AArch64 porting
authorDirk Müller <dmueller@suse.com>
Sun, 13 Apr 2014 16:54:09 +0200
changeset 715 e1c226a4de34
parent 714 b686e856c800
child 716 cef565f1c325
AArch64 porting
MozillaFirefox/MozillaFirefox.changes
MozillaFirefox/MozillaFirefox.spec
MozillaFirefox/mozilla-aarch64-599882cfb998.diff
MozillaFirefox/mozilla-aarch64-bmo-810631.patch
MozillaFirefox/mozilla-aarch64-bmo-962488.patch
MozillaFirefox/mozilla-aarch64-bmo-963023.patch
MozillaFirefox/mozilla-aarch64-bmo-963024.patch
MozillaFirefox/mozilla-aarch64-bmo-963027.patch
MozillaFirefox/mozilla-aarch64-bmo-963028.patch
MozillaFirefox/mozilla-aarch64-bmo-963029.patch
MozillaFirefox/mozilla-aarch64-bmo-963030.patch
MozillaFirefox/mozilla-aarch64-bmo-963031.patch
mozilla-aarch64-599882cfb998.diff
mozilla-aarch64-bmo-810631.patch
mozilla-aarch64-bmo-962488.patch
mozilla-aarch64-bmo-963023.patch
mozilla-aarch64-bmo-963024.patch
mozilla-aarch64-bmo-963027.patch
mozilla-aarch64-bmo-963028.patch
mozilla-aarch64-bmo-963029.patch
mozilla-aarch64-bmo-963030.patch
mozilla-aarch64-bmo-963031.patch
series
--- a/MozillaFirefox/MozillaFirefox.changes	Wed Apr 09 08:22:02 2014 +0200
+++ b/MozillaFirefox/MozillaFirefox.changes	Sun Apr 13 16:54:09 2014 +0200
@@ -1,4 +1,18 @@
 -------------------------------------------------------------------
+Mon Apr  7 15:34:31 UTC 2014 - dmueller@suse.com
+
+- add mozilla-aarch64-599882cfb998.patch,
+      mozilla-aarch64-bmo-810631.patch,
+      mozilla-aarch64-bmo-962488.patch,
+      mozilla-aarch64-bmo-963030.patch,
+      mozilla-aarch64-bmo-963027.patch,
+      mozilla-aarch64-bmo-963028.patch,
+      mozilla-aarch64-bmo-963029.patch,
+      mozilla-aarch64-bmo-963023.patch,
+      mozilla-aarch64-bmo-963024.patch,
+      mozilla-aarch64-bmo-963031.patch: AArch64 porting
+
+-------------------------------------------------------------------
 Mon Mar 24 16:18:44 UTC 2014 - dvaleev@suse.com
 
 - Add patch for bmo#973977
--- a/MozillaFirefox/MozillaFirefox.spec	Wed Apr 09 08:22:02 2014 +0200
+++ b/MozillaFirefox/MozillaFirefox.spec	Sun Apr 13 16:54:09 2014 +0200
@@ -113,13 +113,25 @@
 Patch19:        mozilla-ppc64le-webrtc.patch
 Patch20:        mozilla-ppc64le-xpcom.patch
 Patch21:        mozilla-ppc64-xpcom.patch
+# Gecko/Toolkit AArch64 Porting
+Patch36:        mozilla-aarch64-599882cfb998.diff
+Patch37:        mozilla-aarch64-bmo-810631.patch
+Patch38:        mozilla-aarch64-bmo-962488.patch
+Patch39:        mozilla-aarch64-bmo-963030.patch
+Patch40:        mozilla-aarch64-bmo-963027.patch
+Patch41:        mozilla-aarch64-bmo-963028.patch
+Patch42:        mozilla-aarch64-bmo-963029.patch
+Patch43:        mozilla-aarch64-bmo-963023.patch
+Patch44:        mozilla-aarch64-bmo-963024.patch
+Patch45:        mozilla-aarch64-bmo-963031.patch
+
 # Firefox/browser
-Patch30:        firefox-browser-css.patch
-Patch31:        firefox-kde.patch
-Patch32:        firefox-kde-114.patch
-Patch33:        firefox-no-default-ualocale.patch
-Patch34:        firefox-multilocale-chrome.patch
-Patch35:        firefox-branded-icons.patch
+Patch100:       firefox-browser-css.patch
+Patch101:       firefox-kde.patch
+Patch102:       firefox-kde-114.patch
+Patch103:       firefox-no-default-ualocale.patch
+Patch104:       firefox-multilocale-chrome.patch
+Patch105:       firefox-branded-icons.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Requires(post):   coreutils shared-mime-info desktop-file-utils
 Requires(postun): shared-mime-info desktop-file-utils
@@ -152,7 +164,7 @@
 %define _google_api_key AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q
 %define branding 1
 %define localize 1
-%ifarch ppc ppc64 ppc64le s390 s390x ia64 %arm
+%ifarch aarch64 ppc ppc64 ppc64le s390 s390x ia64 %arm
 %define crashreporter 0
 %else
 %define crashreporter 1
@@ -259,15 +271,26 @@
 %patch19 -p1
 %patch20 -p1
 %patch21 -p1
-#
-%patch30 -p1
-%patch31 -p1
+%patch36 -p1
+%patch37 -p1
+%patch38 -p1
+%patch39 -p1
+%patch40 -p1
+%patch41 -p1
+%patch42 -p1
+%patch43 -p1
+%patch44 -p1
+%patch45 -p1
+
+# Firefox
+%patch100 -p1
+%patch101 -p1
 %if %suse_version >= 1140
-%patch32 -p1
+%patch102 -p1
 %endif
-%patch33 -p1
-%patch34 -p1
-%patch35 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
 
 %build
 # no need to add build time to binaries
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-599882cfb998.diff	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-599882cfb998.diff
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-810631.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-810631.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-962488.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-962488.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963023.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963023.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963024.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963024.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963027.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963027.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963028.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963028.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963029.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963029.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963030.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963030.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-aarch64-bmo-963031.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,1 @@
+../mozilla-aarch64-bmo-963031.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-599882cfb998.diff	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,32 @@
+
+diff --git a/js/src/assembler/wtf/Platform.h b/js/src/assembler/wtf/Platform.h
+--- a/js/src/assembler/wtf/Platform.h
++++ b/js/src/assembler/wtf/Platform.h
+@@ -205,16 +205,23 @@
+ #endif
+ 
+ /* WTF_CPU_S390 - S390 32-bit */
+ #if defined(__s390__)
+ #define WTF_CPU_S390 1
+ #define WTF_CPU_BIG_ENDIAN 1
+ #endif
+ 
++#if defined(__aarch64__)
++#define WTF_CPU_AARCH64 1
++#if defined(__AARCH64EB__)
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++#endif
++
+ /* WTF_CPU_X86 - i386 / x86 32-bit */
+ #if   defined(__i386__) \
+     || defined(i386)     \
+     || defined(_M_IX86)  \
+     || defined(_X86_)    \
+     || defined(__THW_INTEL)
+ #define WTF_CPU_X86 1
+ #endif
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-810631.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,100372 @@
+
+# HG changeset patch
+# User Ryan VanderMeulen <ryanvm@gmail.com>
+# Date 1395835684 14400
+# Node ID 1c6abf8c653a8788f5f2cb30779e46647ac8d504
+# Parent  9afe2a1145bd2962684186fe78d0fc4773630144
+Bug 810631 - Update libffi to version 3.1rc1.
+
+diff --git a/js/src/ctypes/libffi/ChangeLog b/js/src/ctypes/libffi/ChangeLog
+--- a/js/src/ctypes/libffi/ChangeLog
++++ b/js/src/ctypes/libffi/ChangeLog
+@@ -1,4259 +1,4883 @@
+-2010-08-05  Dan Witte  <dwitte@mozilla.com>
+-
+-        * Makefile.am: Pass FFI_DEBUG define to msvcc.sh for linking to the
+-        debug CRT when --enable-debug is given.
+-        * configure.ac: Define it.
+-        * msvcc.sh: Translate -g and -DFFI_DEBUG appropriately.
+-
+-2010-08-04  Dan Witte  <dwitte@mozilla.com>
+-
+-	* src/x86/ffitarget.h: Add X86_ANY define for all x86/x86_64
+-	platforms.
+-	* src/x86/ffi.c: Remove redundant ifdef checks.
+-	* src/prep_cif.c: Push stack space computation into src/x86/ffi.c
+-	for X86_ANY so return value space doesn't get added twice.
+-
+-2010-08-03  Neil Rashbrooke <neil@parkwaycc.co.uk>
+-
+-	* msvcc.sh: Don't pass -safeseh to ml64 because behavior is buggy.
+-
+-2010-07-22  Dan Witte  <dwitte@mozilla.com>
+-
+-	* src/*/ffitarget.h: Make FFI_LAST_ABI one past the last valid ABI.
+-	* src/prep_cif.c: Fix ABI assertion.
+-        * src/cris/ffi.c: Ditto.
+-
+-2010-07-10  Evan Phoenix  <evan@fallingsnow.net>
+-
+-	* src/closures.c (selinux_enabled_check): Fix strncmp usage bug.
+-
+-2010-07-07  Dan Horák <dan@danny.cz>
+-
+-	* include/ffi.h.in: Protect #define with #ifndef.
+-	* src/powerpc/ffitarget.h: Ditto.
+-	* src/s390/ffitarget.h: Ditto.
+-	* src/sparc/ffitarget.h: Ditto.
+-
+-2010-05-11  Dan Witte  <dwitte@mozilla.com>
+-
+-	* doc/libffi.tex: Document previous change.
+-
+-2010-05-11  Makoto Kato <m_kato@ga2.so-net.ne.jp>
+-
+-	* src/x86/ffi.c (ffi_call): Don't copy structs passed by value.
+-
+-2010-05-05  Michael Kohler <michaelkohler@live.com>
+-
+-	* src/dlmalloc.c (dlfree): Fix spelling.
+-	* src/ia64/ffi.c (ffi_prep_cif_machdep): Ditto.
+-	* configure.ac: Ditto.
+-	* configure: Rebuilt.
+-
+-2010-04-13  Dan Witte  <dwitte@mozilla.com>
+-
+-	* msvcc.sh: Build with -W3 instead of -Wall.
+-	* src/powerpc/ffi_darwin.c: Remove build warnings.
+-	* src/x86/ffi.c: Ditto.
+-	* src/x86/ffitarget.h: Ditto.
+-
+-2010-03-30  Dan Witte  <dwitte@mozilla.com>
+-
+-	* msvcc.sh: Disable build warnings.
+-	* README (tested): Clarify windows build procedure.
+-
+-2010-03-14  Matthias Klose  <doko@ubuntu.com>
+-
+-	* src/x86/ffi64.c: Fix typo in comment.
+-	* src/x86/ffi.c: Use /* ... */ comment style.
+-
+-2010-07-07   Neil Roberts <neil@linux.intel.com>
+-
+-	* src/x86/sysv.S (ffi_call_SYSV): Align the stack pointer to
+-	16-bytes.
+-
+-2010-07-02  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* Makefile.am (AM_MAKEFLAGS): Pass also mandir to submakes.
+-	* Makefile.in: Regenerated.
+-
+-2010-05-19  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+-
+-	* configure.ac (libffi_cv_as_x86_pcrel): Check for illegal in as
+-	output, too.
+-	(libffi_cv_as_ascii_pseudo_op): Check for .ascii.
+-	(libffi_cv_as_string_pseudo_op): Check for .string.
+-	* configure: Regenerate.
+-	* fficonfig.h.in: Regenerate.
+-	* src/x86/sysv.S (.eh_frame): Use .ascii, .string or error.
+-
+-2010-04-07  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* regex.c (byte_re_match_2_internal): Avoid set but not used
+-	warning.
+-
+-2010-04-02  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* Makefile.in: Regenerate.
+-	* aclocal.m4: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* man/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2010-03-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+-
+-	* configure.ac (libffi_cv_as_x86_64_unwind_section_type): New test.
+-	* configure: Regenerate.
+-	* fficonfig.h.in: Regenerate.
+-	* libffi/src/x86/unix64.S (.eh_frame)
+-	[HAVE_AS_X86_64_UNWIND_SECTION_TYPE]: Use @unwind section type.
+-
+-2010-02-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+-
+-	* doc/libffi.texi (The Closure API): Fix typo.
+-	* doc/libffi.info: Remove.
+-
+-2010-02-15  Matthias Klose  <doko@ubuntu.com>
+-
+-	* src/arm/sysv.S (__ARM_ARCH__): Define for processor
+-	__ARM_ARCH_7EM__.
+-
+-2010-01-07  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+-
+-	PR libffi/40701
+-	* testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL,
+-	PRIuLL, PRId64, PRIu64, PRIuPTR): Define.
+-	* testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on
+-	alpha*-dec-osf*.
+-	* testsuite/libffi.call/cls_align_uint64.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/return_ll1.c: Likewise.
+-	* testsuite/libffi.call/stret_medium2.c: Likewise.
+-	* testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast
+-	MAP_FAILED to char *.
+-
+-2010-01-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+-
+-	* src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__.
+-
+-2009-12-31  Anthony Green  <green@redhat.com>
+-
+-	* README: Update for libffi 3.0.9.
+-
+-2009-12-27  Matthias Klose  <doko@ubuntu.com>
+-
+-	* configure.ac (HAVE_LONG_DOUBLE): Define for mips when
+-	appropriate.
+-	* configure: Rebuilt.
+-
+-2009-12-26  Anthony Green  <green@redhat.com>
+-
+-	* testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for
+-	avr32*-*-*.
+-	* testsuite/libffi.call/cls_double_va.c: Ditto.
+-
+-2009-12-26  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* testsuite/libffi.call/ffitest.h: Conditionally include stdint.h
+-	and inttypes.h.
+-	* testsuite/libffi.special/unwindtest.cc: Ditto.
+-
+-2009-12-26  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* configure.ac: Add amd64-*-openbsd*.
+-	* configure: Rebuilt.
+-	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Link
+-	openbsd programs with -lpthread.
+-
+-2009-12-26  Anthony Green  <green@redhat.com>
+-
+-	* testsuite/libffi.call/cls_double_va.c,
+-	testsuite/libffi.call/cls_longdouble.c,
+-	testsuite/libffi.call/cls_longdouble_va.c,
+-	testsuite/libffi.call/cls_pointer.c,
+-	testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for
+-	mips*-*-* and arm*-*-*.
+-	* testsuite/libffi.call/cls_align_longdouble_split.c,
+-	testsuite/libffi.call/cls_align_longdouble_split2.c,
+-	testsuite/libffi.call/stret_medium2.c,
+-	testsuite/libffi.call/stret_medium.c,
+-	testsuite/libffi.call/stret_large.c,
+-	testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*.
+-
+-2009-12-31  Kay Tietz  <ktietz70@googlemail.com>
+-
+-	* testsuite/libffi.call/ffitest.h,
+-	testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix
+-	definitions.
+-
+-2009-12-31  Carlo Bramini  <carlo.bramix@libero.it>
+-
+-	* configure.ac (AM_LTLDFLAGS): Define for windows hosts.
+-	* Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS.
+-	* configure: Rebuilt.
+-	* Makefile.in: Rebuilt.
+-
+-2009-12-31  Anthony Green  <green@redhat.com>
+-	    Blake Chaffin.
+-
+-	* testsuite/libffi.call/huge_struct.c: New test case from Blake
+-	Chaffin @ Apple.
+-
+-2009-12-28  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to
+-	local variables.
+-	(aix_adjust_aggregate_sizes): New function.
+-	(ffi_prep_cif_machdep): Call it.
+-
+-2009-12-26  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* configure.ac: Define FFI_MMAP_EXEC_WRIT for the given targets.
+-	* configure: Regenerate.
+-	* fficonfig.h.in: Likewise.
+-	* src/closures.c: Remove the FFI_MMAP_EXEC_WRIT definition for
+-	Solaris/x86.
+-
+-2009-12-26  Andreas Schwab  <schwab@linux-m68k.org>
+-
+-	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count
+-	when a float arguments is passed in memory.
+-	(ffi_closure_helper_SYSV): Mark general registers as used up when
+-	a 64bit or soft-float long double argument is passed in memory.
+-
+-2009-12-25  Matthias Klose  <doko@ubuntu.com>
+-
+-	* man/ffi_call.3: Fix #include in examples.
+-	* doc/libffi.texi: Add dircategory.
+-
+-2009-12-25  Frank Everdij <f.p.x.everdij@tudelft.nl>
+-
+-	* include/ffi.h.in: Placed '__GNUC__' ifdef around
+-	'__attribute__((aligned(8)))' in ffi_closure, fixes compile for
+-	IRIX MIPSPro c99.
+-	* include/ffi_common.h: Added '__sgi' define to non
+-	'__attribute__((__mode__()))' integer typedefs.
+-	* src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32,
+-	ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check.
+-	(ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added
+-	FFI_LONGDOUBLE support and alignment(N32 only).
+-	* src/mips/ffitarget.h: Corrected '#include <sgidefs.h>' for IRIX and
+-	fixed non '__attribute__((__mode__()))' integer typedefs.
+-	* src/mips/n32.S: Put '#ifdef linux' around '.abicalls' and '.eh_frame'
+-	since they are Linux/GNU Assembler specific.
+-
+-2009-12-25  Bradley Smith  <brad@brad-smith.co.uk>
+-
+-	* configure.ac, Makefile.am, src/avr32/ffi.c,
+-	src/avr32/ffitarget.h,
+-	src/avr32/sysv.S: Add AVR32 port.
+-	* configure, Makefile.in: Rebuilt.
+-
+-2009-12-21  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* configure.ac: Make i?86 build on FreeBSD and OpenBSD.
+-	* configure: Regenerate.
+-
+-2009-12-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+-
+-	* testsuite/libffi.call/ffitest.h: Define PRIuPTR on PA HP-UX.
+-
+-2009-12-13  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+-
+-	* src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE
+-	type on HP-UX.
+-
+-2009-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+-
+-	* src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long
+-	double' arguments.
+-
+-2009-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+-
+-	* testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10.
+-
+-2009-12-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+-
+-	PR libffi/40700
+-	* src/closures.c [X86_64 && __sun__ && __svr4__]
+-	(FFI_MMAP_EXEC_WRIT): Define.
+-
+-2009-12-08  David Daney  <ddaney@caviumnetworks.com>
+-
+-	* testsuite/libffi.call/stret_medium.c: Remove xfail for mips*-*-*
+-	* testsuite/libffi.call/cls_align_longdouble_split2.c: Same.
+-	* testsuite/libffi.call/stret_large.c: Same.
+-	* testsuite/libffi.call/cls_align_longdouble_split.c: Same.
+-	* testsuite/libffi.call/stret_large2.c: Same.
+-	* testsuite/libffi.call/stret_medium2.c: Same.
+-
+-2009-12-07  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/aix_closure.S (libffi_closure_ASM): Fix tablejump
+-	typo.
+-
+-2009-12-05  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/aix.S: Update AIX32 code to be consistent with AIX64
+-	code.
+-	* src/powerpc/aix_closure.S: Same.
+-
+-2009-12-05  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* Makefile.in: Regenerate.
+-	* configure: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* man/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2009-12-04  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/aix_closure.S: Reorganize 64-bit code to match
+-	linux64_closure.S.
+-
+-2009-12-04  Uros Bizjak  <ubizjak@gmail.com>
+-
+-	PR libffi/41908
+-	* src/x86/ffi64.c (classify_argument): Update from
+-	gcc/config/i386/i386.c.
+-	(ffi_closure_unix64_inner): Do not use the address of two consecutive
+-	SSE registers directly.
+-	* testsuite/libffi.call/cls_dbls_struct.c (main): Remove xfail
+-	for x86_64 linux targets.
+-
+-2009-12-04  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_closure_helper_DARWIN): Increment
+-	pfr for long double split between fpr13 and stack.
+-
+-2009-12-03  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Increment next_arg and
+-	fparg_count twice for long double.
+-
+-2009-12-03  David Edelsohn  <edelsohn@gnu.org>
+-
+-	PR libffi/42243
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Remove extra parentheses.
+-
+-2009-12-03  Uros Bizjak  <ubizjak@gmail.com>
+-
+-	* testsuite/libffi.call/cls_longdouble_va.c (main): Fix format string.
+-	Remove xfails for x86 linux targets.
+-
+-2009-12-02  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Fix typo in INT64
+-	case.
+-
+-2009-12-01  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/aix.S (ffi_call_AIX): Convert to more standard
+-	register usage.  Call ffi_prep_args directly.  Add long double
+-	return value support.
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Double arg increment
+-	applies to FFI_TYPE_DOUBLE.  Correct fpr_base increment typo.
+-	Separate FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases.
+-	(ffi_prep_cif_machdep): Only 16 byte stack alignment in 64 bit
+-	mode.
+-	(ffi_closure_helper_DARWIN): Remove nf and ng counters.  Move temp
+-	into case.
+-	* src/powerpc/aix_closure.S: Maintain 16 byte stack alignment.
+-	Allocate result area between params and FPRs.
+-
+-2009-11-30  David Edelsohn  <edelsohn@gnu.org>
+-
+-	PR target/35484
+-	* src/powerpc/ffitarget.h (POWERPC64): Define for PPC64 Linux and
+-	AIX64.
+-	* src/powerpc/aix.S: Implement AIX64 version.
+-	* src/powerpc/aix_closure.S: Implement AIX64 version.
+-	(ffi_closure_ASM): Use extsb, lha and displament addresses.
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Implement AIX64
+-	support.
+-	(ffi_prep_cif_machdep): Same.
+-	(ffi_call): Same.
+-	(ffi_closure_helper_DARWIN): Same.
+-
+-2009-11-02  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	PR libffi/41908
+-	* testsuite/libffi.call/testclosure.c: New test.
+-
+-2009-09-28  Kai Tietz  <kai.tietz@onevision.com>
+-
+-	* src/x86/win64.S (_ffi_call_win64 stack): Remove for gnu
+-	assembly version use of ___chkstk.
+-
+-2009-09-23  Matthias Klose  <doko@ubuntu.com>
+-
+-	PR libffi/40242, PR libffi/41443
+-	* src/arm/sysv.S (__ARM_ARCH__): Define for processors
+-	__ARM_ARCH_6T2__, __ARM_ARCH_6M__, __ARM_ARCH_7__,
+-	__ARM_ARCH_7A__, __ARM_ARCH_7R__, __ARM_ARCH_7M__.
+-	Change the conditionals to __SOFTFP__ || __ARM_EABI__
+-	for -mfloat-abi=softfp to work.
+-
+-2009-09-17  Loren J. Rittle  <ljrittle@acm.org>
+-
+-	PR testsuite/32843 (strikes again)
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): Add X86_FREEBSD to
+-	enable proper extension on char and short.
+-
+-2009-09-15  David Daney  <ddaney@caviumnetworks.com>
+-
+-	* src/java_raw_api.c (ffi_java_raw_to_rvalue): Remove special
+-	handling for FFI_TYPE_POINTER.
+-	* src/mips/ffitarget.h (FFI_TYPE_STRUCT_D_SOFT,
+-	FFI_TYPE_STRUCT_F_SOFT, FFI_TYPE_STRUCT_DD_SOFT,
+-	FFI_TYPE_STRUCT_FF_SOFT, FFI_TYPE_STRUCT_FD_SOFT,
+-	FFI_TYPE_STRUCT_DF_SOFT, FFI_TYPE_STRUCT_SOFT): New defines.
+-	(FFI_N32_SOFT_FLOAT, FFI_N64_SOFT_FLOAT): New ffi_abi enumerations.
+-	(enum ffi_abi): Set FFI_DEFAULT_ABI for soft-float.
+-	* src/mips/n32.S (ffi_call_N32): Add handling for soft-float
+-	structure and pointer returns.
+-	(ffi_closure_N32): Add handling for pointer returns.
+-	* src/mips/ffi.c (ffi_prep_args, calc_n32_struct_flags,
+-	calc_n32_return_struct_flags): Handle soft-float.
+-	(ffi_prep_cif_machdep):  Handle soft-float, fix pointer handling.
+-	(ffi_call_N32): Declare proper argument types.
+-	(ffi_call, copy_struct_N32, ffi_closure_mips_inner_N32): Handle
+-	soft-float.
+-
+-2009-08-24  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* configure.ac (AC_PREREQ): Bump to 2.64.
+-
+-2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* Makefile.am (install-html, install-pdf): Remove.
+-	* Makefile.in: Regenerate.
+-
+-	* Makefile.in: Regenerate.
+-	* aclocal.m4: Regenerate.
+-	* configure: Regenerate.
+-	* fficonfig.h.in: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* man/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2009-07-30  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force.
+-
+-2009-07-24  Dave Korn  <dave.korn.cygwin@gmail.com>
+-
+-	PR libffi/40807
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): Also use sign/zero-extending
+-	return types for X86_WIN32.
+-	* src/x86/win32.S (_ffi_call_SYSV): Handle omitted return types.
+-	(_ffi_call_STDCALL, _ffi_closure_SYSV, _ffi_closure_raw_SYSV,
+-	_ffi_closure_STDCALL): Likewise.
+-
+-	* src/closures.c (is_selinux_enabled): Define to const 0 for Cygwin.
+-	(dlmmap, dlmunmap): Also use these functions on Cygwin.
+-
+-2009-07-11  Richard Sandiford  <rdsandiford@googlemail.com>
+-
+-	PR testsuite/40699
+-	PR testsuite/40707
+-	PR testsuite/40709
+-	* testsuite/lib/libffi-dg.exp: Revert 2009-07-02, 2009-07-01 and
+-	2009-06-30 commits.
+-
+-2009-07-01  Richard Sandiford  <r.sandiford@uk.ibm.com>
+-
+-	* testsuite/lib/libffi-dg.exp (libffi-init): Set ld_library_path
+-	to "" before adding paths.  (This reinstates an assignment that
+-	was removed by my 2009-06-30 commit, but changes the initial
+-	value from "." to "".)
+-
+-2009-07-01  H.J. Lu  <hongjiu.lu@intel.com>
+-
+-	PR testsuite/40601
+-	* testsuite/lib/libffi-dg.exp (libffi-init): Properly set
+-	gccdir.  Adjust ld_library_path for gcc only if gccdir isn't
+-	empty.
+-
+-2009-06-30  Richard Sandiford  <r.sandiford@uk.ibm.com>
+-
+-	* testsuite/lib/libffi-dg.exp (libffi-init): Don't add "."
+-	to ld_library_path.  Use add_path.  Add just find_libgcc_s
+-	to ld_library_path, not every libgcc multilib directory.
+-
+-2009-06-16  Wim Lewis  <wiml@hhhh.org>
+-
+-	* src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are
+-	supposed to be callee-saved.
+-	* src/powerpc/sysv.S (small_struct_return_value): Fix overrun of
+-	return buffer for odd-size structs.
+-
+-2009-06-16  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	PR libffi/40444
+-	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Add
+-	allow_stack_execute for Darwin.
+-
+-2009-06-16  Andrew Haley  <aph@redhat.com>
+-
+-	* configure.ac (TARGETDIR): Add missing blank lines.
+-	* configure: Regenerate.
+-
+-2009-06-16  Andrew Haley  <aph@redhat.com>
+-
+-	* testsuite/libffi.call/cls_align_sint64.c,
+-	testsuite/libffi.call/cls_align_uint64.c,
+-	testsuite/libffi.call/cls_longdouble_va.c,
+-	testsuite/libffi.call/cls_ulonglong.c,
+-	testsuite/libffi.call/return_ll1.c,
+-	testsuite/libffi.call/stret_medium2.c: Fix printf format
+-	specifiers.
+-	* testsuite/libffi.call/ffitest.h,
+-	testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define.
+-
+-2009-06-15  Andrew Haley  <aph@redhat.com>
+-
+-	* testsuite/libffi.call/err_bad_typedef.c: xfail everywhere.
+-	* testsuite/libffi.call/err_bad_abi.c: Likewise.
+-
+-2009-06-12  Andrew Haley  <aph@redhat.com>
+-
+-	* Makefile.am: Remove info_TEXINFOS.
+-
+-2009-06-12  Andrew Haley  <aph@redhat.com>
+-
+-	* ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c,
+-	testsuite/libffi.call/cls_align_uint64.c,
+-	testsuite/libffi.call/cls_ulonglong.c,
+-	testsuite/libffi.call/return_ll1.c,
+-	testsuite/libffi.call/stret_medium2.c: Fix printf format
+-	specifiers.
+-	testsuite/libffi.special/unwindtest.cc: include stdint.h.
+-
+-2009-06-11  Timothy Wall  <twall@users.sf.net>
+-
+-	* Makefile.am,
+-	configure.ac,
+-	include/ffi.h.in,
+-	include/ffi_common.h,
+-	src/closures.c,
+-	src/dlmalloc.c,
+-	src/x86/ffi.c,
+-	src/x86/ffitarget.h,
+-	src/x86/win64.S (new),
+-	README: Added win64 support (mingw or MSVC)
+-	* Makefile.in,
+-	include/Makefile.in,
+-	man/Makefile.in,
+-	testsuite/Makefile.in,
+-	configure,
+-	aclocal.m4: Regenerated
+-	* ltcf-c.sh: properly escape cygwin/w32 path
+-	* man/ffi_call.3: Clarify size requirements for return value.
+-	* src/x86/ffi64.c: Fix filename in comment.
+-	* src/x86/win32.S: Remove unused extern.
+-
+-	* testsuite/libffi.call/closure_fn0.c,
+-	testsuite/libffi.call/closure_fn1.c,
+-	testsuite/libffi.call/closure_fn2.c,
+-	testsuite/libffi.call/closure_fn3.c,
+-	testsuite/libffi.call/closure_fn4.c,
+-	testsuite/libffi.call/closure_fn5.c,
+-	testsuite/libffi.call/closure_fn6.c,
+-	testsuite/libffi.call/closure_stdcall.c,
+-	testsuite/libffi.call/cls_12byte.c,
+-	testsuite/libffi.call/cls_16byte.c,
+-	testsuite/libffi.call/cls_18byte.c,
+-	testsuite/libffi.call/cls_19byte.c,
+-	testsuite/libffi.call/cls_1_1byte.c,
+-	testsuite/libffi.call/cls_20byte.c,
+-	testsuite/libffi.call/cls_20byte1.c,
+-	testsuite/libffi.call/cls_24byte.c,
+-	testsuite/libffi.call/cls_2byte.c,
+-	testsuite/libffi.call/cls_3_1byte.c,
+-	testsuite/libffi.call/cls_3byte1.c,
+- 	testsuite/libffi.call/cls_3byte2.c,
+- 	testsuite/libffi.call/cls_4_1byte.c,
+- 	testsuite/libffi.call/cls_4byte.c,
+- 	testsuite/libffi.call/cls_5_1_byte.c,
+- 	testsuite/libffi.call/cls_5byte.c,
+- 	testsuite/libffi.call/cls_64byte.c,
+- 	testsuite/libffi.call/cls_6_1_byte.c,
+- 	testsuite/libffi.call/cls_6byte.c,
+- 	testsuite/libffi.call/cls_7_1_byte.c,
+- 	testsuite/libffi.call/cls_7byte.c,
+- 	testsuite/libffi.call/cls_8byte.c,
+- 	testsuite/libffi.call/cls_9byte1.c,
+- 	testsuite/libffi.call/cls_9byte2.c,
+- 	testsuite/libffi.call/cls_align_double.c,
+- 	testsuite/libffi.call/cls_align_float.c,
+- 	testsuite/libffi.call/cls_align_longdouble.c,
+- 	testsuite/libffi.call/cls_align_longdouble_split.c,
+- 	testsuite/libffi.call/cls_align_longdouble_split2.c,
+- 	testsuite/libffi.call/cls_align_pointer.c,
+- 	testsuite/libffi.call/cls_align_sint16.c,
+- 	testsuite/libffi.call/cls_align_sint32.c,
+- 	testsuite/libffi.call/cls_align_sint64.c,
+- 	testsuite/libffi.call/cls_align_uint16.c,
+- 	testsuite/libffi.call/cls_align_uint32.c,
+- 	testsuite/libffi.call/cls_align_uint64.c,
+- 	testsuite/libffi.call/cls_dbls_struct.c,
+- 	testsuite/libffi.call/cls_double.c,
+- 	testsuite/libffi.call/cls_double_va.c,
+- 	testsuite/libffi.call/cls_float.c,
+- 	testsuite/libffi.call/cls_longdouble.c,
+- 	testsuite/libffi.call/cls_longdouble_va.c,
+- 	testsuite/libffi.call/cls_multi_schar.c,
+- 	testsuite/libffi.call/cls_multi_sshort.c,
+- 	testsuite/libffi.call/cls_multi_sshortchar.c,
+- 	testsuite/libffi.call/cls_multi_uchar.c,
+- 	testsuite/libffi.call/cls_multi_ushort.c,
+- 	testsuite/libffi.call/cls_multi_ushortchar.c,
+- 	testsuite/libffi.call/cls_pointer.c,
+- 	testsuite/libffi.call/cls_pointer_stack.c,
+- 	testsuite/libffi.call/cls_schar.c,
+- 	testsuite/libffi.call/cls_sint.c,
+- 	testsuite/libffi.call/cls_sshort.c,
+- 	testsuite/libffi.call/cls_uchar.c,
+- 	testsuite/libffi.call/cls_uint.c,
+- 	testsuite/libffi.call/cls_ulonglong.c,
+- 	testsuite/libffi.call/cls_ushort.c,
+- 	testsuite/libffi.call/err_bad_abi.c,
+- 	testsuite/libffi.call/err_bad_typedef.c,
+- 	testsuite/libffi.call/float2.c,
+- 	testsuite/libffi.call/huge_struct.c,
+- 	testsuite/libffi.call/nested_struct.c,
+- 	testsuite/libffi.call/nested_struct1.c,
+- 	testsuite/libffi.call/nested_struct10.c,
+- 	testsuite/libffi.call/nested_struct2.c,
+- 	testsuite/libffi.call/nested_struct3.c,
+- 	testsuite/libffi.call/nested_struct4.c,
+- 	testsuite/libffi.call/nested_struct5.c,
+- 	testsuite/libffi.call/nested_struct6.c,
+- 	testsuite/libffi.call/nested_struct7.c,
+- 	testsuite/libffi.call/nested_struct8.c,
+- 	testsuite/libffi.call/nested_struct9.c,
+- 	testsuite/libffi.call/problem1.c,
+- 	testsuite/libffi.call/return_ldl.c,
+- 	testsuite/libffi.call/return_ll1.c,
+- 	testsuite/libffi.call/stret_large.c,
+- 	testsuite/libffi.call/stret_large2.c,
+- 	testsuite/libffi.call/stret_medium.c,
+- 	testsuite/libffi.call/stret_medium2.c,
+-	testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead
+-	of checking for MMAP.  Use intptr_t instead of long casts.
+-
+-2009-06-11  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*.
+-	* testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*.
+-	* testsuite/libffi.call/err_bad_typedef.c: Likewise.
+-
+-2009-06-09  Andrew Haley  <aph@redhat.com>
+-
+-	* src/x86/freebsd.S: Add missing file.
+-
+-2009-06-08  Andrew Haley  <aph@redhat.com>
+-
+-	Import from libffi 3.0.8:
+-
+-	* doc/libffi.texi: New file.
+-	* doc/libffi.info: Likewise.
+-	* doc/stamp-vti: Likewise.
+-	* man/Makefile.am: New file.
+-	* man/ffi_call.3: New file.
+-
+-	* Makefile.am (EXTRA_DIST): Add src/x86/darwin64.S,
+-	src/dlmalloc.c.
+-	(nodist_libffi_la_SOURCES): Add X86_FREEBSD.
+-
+-	* configure.ac: Bump version to 3.0.8.
+-	parisc*-*-linux*: Add.
+-	i386-*-freebsd* | i386-*-openbsd*: Add.
+-	powerpc-*-beos*: Add.
+-	AM_CONDITIONAL X86_FREEBSD: Add.
+-	AC_CONFIG_FILES: Add man/Makefile.
+-
+-	* include/ffi.h.in (FFI_FN): Change void (*)() to void (*)(void).
+-
+-2009-06-08  Andrew Haley  <aph@redhat.com>
+-
+-	* README: Import from libffi 3.0.8.
+-
+-2009-06-08  Andrew Haley  <aph@redhat.com>
+-
+-	* testsuite/libffi.call/err_bad_abi.c: Add xfails.
+-	* testsuite/libffi.call/cls_longdouble_va.c: Add xfails.
+-	* testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*.
+-	* testsuite/libffi.call/err_bad_typedef.c: Add xfails.
+-
+-	* testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args.
+-	* testsuite/libffi.call/stret_medium.c: Likewise.
+-	* testsuite/libffi.call/stret_large2.c: Likewise.
+-	* testsuite/libffi.call/stret_large.c:  Likewise.
+-
+-2008-12-26  Timothy Wall  <twall@users.sf.net>
+-
+-	* testsuite/libffi.call/cls_longdouble.c,
+-	testsuite/libffi.call/cls_longdouble_va.c,
+-	testsuite/libffi.call/cls_align_longdouble.c,
+-	testsuite/libffi.call/cls_align_longdouble_split.c,
+-	testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected
+-	failures on x86_64 cygwin/mingw.
+-
+-2008-12-22  Timothy Wall  <twall@users.sf.net>
+-
+-	* testsuite/libffi.call/closure_fn0.c,
+-	testsuite/libffi.call/closure_fn1.c,
+-	testsuite/libffi.call/closure_fn2.c,
+-	testsuite/libffi.call/closure_fn3.c,
+-	testsuite/libffi.call/closure_fn4.c,
+-	testsuite/libffi.call/closure_fn5.c,
+-	testsuite/libffi.call/closure_fn6.c,
+-	testsuite/libffi.call/closure_loc_fn0.c,
+-	testsuite/libffi.call/closure_stdcall.c,
+-	testsuite/libffi.call/cls_align_pointer.c,
+-	testsuite/libffi.call/cls_pointer.c,
+-	testsuite/libffi.call/cls_pointer_stack.c: use portable cast from
+-	pointer to integer (intptr_t).
+-	* testsuite/libffi.call/cls_longdouble.c: disable for win64.
+-
+-2008-07-24  Anthony Green  <green@redhat.com>
+-
+-	* testsuite/libffi.call/cls_dbls_struct.c,
+-	testsuite/libffi.call/cls_double_va.c,
+-	testsuite/libffi.call/cls_longdouble.c,
+-	testsuite/libffi.call/cls_longdouble_va.c,
+-	testsuite/libffi.call/cls_pointer.c,
+-	testsuite/libffi.call/cls_pointer_stack.c,
+-	testsuite/libffi.call/err_bad_abi.c: Clean up failures from
+-	compiler warnings.
+-
+-2008-03-04  Anthony Green  <green@redhat.com>
+-	    Blake Chaffin
+-	    hos@tamanegi.org
+-
+-	* testsuite/libffi.call/cls_align_longdouble_split2.c
+-	  testsuite/libffi.call/cls_align_longdouble_split.c
+-	  testsuite/libffi.call/cls_dbls_struct.c
+-	  testsuite/libffi.call/cls_double_va.c
+-	  testsuite/libffi.call/cls_longdouble.c
+-	  testsuite/libffi.call/cls_longdouble_va.c
+-	  testsuite/libffi.call/cls_pointer.c
+-	  testsuite/libffi.call/cls_pointer_stack.c
+-	  testsuite/libffi.call/err_bad_abi.c
+-	  testsuite/libffi.call/err_bad_typedef.c
+-	  testsuite/libffi.call/stret_large2.c
+-	  testsuite/libffi.call/stret_large.c
+-	  testsuite/libffi.call/stret_medium2.c
+-	  testsuite/libffi.call/stret_medium.c: New tests from Apple.
+-
+-2009-06-05  Andrew Haley  <aph@redhat.com>
+-
+-	* src/x86/ffitarget.h, src/x86/ffi.c: Merge stdcall changes from
+-	libffi.
+-
+-2009-06-04  Andrew Haley  <aph@redhat.com>
+-
+-	* src/x86/ffitarget.h, src/x86/win32.S, src/x86/ffi.c: Back out
+-	stdcall changes.
+-
+-2008-02-26  Anthony Green  <green@redhat.com>
+-	    Thomas Heller  <theller@ctypes.org>
+-
+-	* src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C
+-	comment.
+-
+-2008-02-03  Timothy Wall  <twall@users.sf.net>
+-
+-	* src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return
+-	  offset based on code pointer, not data pointer.
+-
+-2008-01-31  Timothy Wall <twall@users.sf.net>
+-
+-	* testsuite/libffi.call/closure_stdcall.c: Add test for stdcall
+-	closures.
+-	* src/x86/ffitarget.h: Increase size of trampoline for stdcall
+-	closures.
+-	* src/x86/win32.S: Add assembly for stdcall closure.
+-	* src/x86/ffi.c: Initialize stdcall closure trampoline.
+-
+-2009-06-04  Andrew Haley  <aph@redhat.com>
+-
+-	* include/ffi.h.in: Change void (*)() to void (*)(void).
+-	* src/x86/ffi.c: Likewise.
+-
+-2009-06-04  Andrew Haley  <aph@redhat.com>
+-
+-	* src/powerpc/ppc_closure.S: Insert licence header.
+-	* src/powerpc/linux64_closure.S: Likewise.
+-	* src/m68k/sysv.S: Likewise.
+-
+-	* src/sh64/ffi.c: Change void (*)() to void (*)(void).
+-	* src/powerpc/ffi.c: Likewise.
+-	* src/powerpc/ffi_darwin.c: Likewise.
+-	* src/m32r/ffi.c: Likewise.
+-	* src/sh64/ffi.c: Likewise.
+-	* src/x86/ffi64.c: Likewise.
+-	* src/alpha/ffi.c: Likewise.
+-	* src/alpha/osf.S: Likewise.
+-	* src/frv/ffi.c: Likewise.
+-	* src/s390/ffi.c: Likewise.
+-	* src/pa/ffi.c: Likewise.
+-	* src/pa/hpux32.S: Likewise.
+-	* src/ia64/unix.S: Likewise.
+-	* src/ia64/ffi.c: Likewise.
+-	* src/sparc/ffi.c: Likewise.
+-	* src/mips/ffi.c: Likewise.
+-	* src/sh/ffi.c: Likewise.
+-
+-2008-02-15  David Daney  <ddaney@avtrex.com>
+-
+-	* src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE):
+-	Define (conditionally), and use it to include cachectl.h.
+-	(ffi_prep_closure_loc): Fix cache flushing.
+-	* src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define.
+-
+-2009-06-04  Andrew Haley  <aph@redhat.com>
+-
+-	include/ffi.h.in,
+-	src/arm/ffitarget.h,
+-	src/arm/ffi.c,
+-	src/arm/sysv.S,
+-	src/powerpc/ffitarget.h,
+-	src/closures.c,
+-	src/sh64/ffitarget.h,
+-	src/sh64/ffi.c,
+-	src/sh64/sysv.S,
+-	src/types.c,
+-	src/x86/ffi64.c,
+-	src/x86/ffitarget.h,
+-	src/x86/win32.S,
+-	src/x86/darwin.S,
+-	src/x86/ffi.c,
+-	src/x86/sysv.S,
+-	src/x86/unix64.S,
+-	src/alpha/ffitarget.h,
+-	src/alpha/ffi.c,
+-	src/alpha/osf.S,
+-	src/m68k/ffitarget.h,
+-	src/frv/ffitarget.h,
+-	src/frv/ffi.c,
+-	src/s390/ffitarget.h,
+-	src/s390/sysv.S,
+-	src/cris/ffitarget.h,
+-	src/pa/linux.S,
+-	src/pa/ffitarget.h,
+-	src/pa/ffi.c,
+-	src/raw_api.c,
+-	src/ia64/ffitarget.h,
+-	src/ia64/unix.S,
+-	src/ia64/ffi.c,
+-	src/ia64/ia64_flags.h,
+-	src/java_raw_api.c,
+-	src/debug.c,
+-	src/sparc/v9.S,
+-	src/sparc/ffitarget.h,
+-	src/sparc/ffi.c,
+-	src/sparc/v8.S,
+-	src/mips/ffitarget.h,
+-	src/mips/n32.S,
+-	src/mips/o32.S,
+-	src/mips/ffi.c,
+-	src/prep_cif.c,
+-	src/sh/ffitarget.h,
+-	src/sh/ffi.c,
+-	src/sh/sysv.S: Update license text.
+-
+-2009-05-22  Dave Korn  <dave.korn.cygwin@gmail.com>
+-
+-	* src/x86/win32.S (_ffi_closure_STDCALL):  New function.
+-	(.eh_frame):  Add FDE for it.
+-
+-2009-05-22  Dave Korn  <dave.korn.cygwin@gmail.com>
+-
+-	* configure.ac:  Also check if assembler supports pc-relative
+-	relocs on X86_WIN32 targets.
+-	* configure:  Regenerate.
+-	* src/x86/win32.S (ffi_prep_args):  Declare extern, not global.
+-	(_ffi_call_SYSV):  Add missing function type symbol .def and
+-	add EH markup labels.
+-	(_ffi_call_STDCALL):  Likewise.
+-	(_ffi_closure_SYSV):  Likewise.
+-	(_ffi_closure_raw_SYSV):  Likewise.
+-	(.eh_frame):  Add hand-crafted EH data.
+-
+-2009-04-09  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* testsuite/lib/libffi-dg.exp: Change copyright header to refer to
+-	version 3 of the GNU General Public License and to point readers
+-	at the COPYING3 file and the FSF's license web page.
+-	* testsuite/libffi.call/call.exp: Likewise.
+-	* testsuite/libffi.special/special.exp: Likewise.
+-
+-2009-03-01  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* configure: Regenerate.
+-
+-2008-12-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	PR libffi/26048
+-	* configure.ac (HAVE_AS_X86_PCREL): New test.
+-	* configure: Regenerate.
+-	* fficonfig.h.in: Regenerate.
+-	* src/x86/sysv.S [!FFI_NO_RAW_API]: Precalculate
+-	RAW_CLOSURE_CIF_OFFSET, RAW_CLOSURE_FUN_OFFSET,
+-	RAW_CLOSURE_USER_DATA_OFFSET for the Solaris 10/x86 assembler.
+-	(.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL.
+-	* src/x86/unix64.S (.Lstore_table): Move to .text section.
+-	(.Lload_table): Likewise.
+-	(.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL.
+-
+-2008-12-18  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* configure: Regenerate.
+-
+-2008-11-21  Eric Botcazou  <ebotcazou@adacore.com>
+-
+-	* src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for
+-	signed/unsigned int8/16 return values.
+-	* src/sparc/v8.S (ffi_call_v8): Likewise.
+-	(ffi_closure_v8): Likewise.
+-
+-2008-09-26  Peter O'Gorman  <pogma@thewrittenword.com>
+-	    Steve Ellcey  <sje@cup.hp.com>
+-
+-	* configure: Regenerate for new libtool.
+-	* Makefile.in: Ditto.
+-	* include/Makefile.in: Ditto.
+-	* aclocal.m4: Ditto.
+-
+-2008-08-25  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and
+-	FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum.
+-	Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT.
+-	Adjust copyright notice.
+-	* src/powerpc/ffi.c: Add two new flags to indicate if we have one
+-	register or two register to use for FFI_SYSV structs.
+-	(ffi_prep_cif_machdep): Pass the right register flag introduced above.
+-	(ffi_closure_helper_SYSV): Fix the return type for
+-	FFI_SYSV_TYPE_SMALL_STRUCT. Comment.
+-	Adjust copyright notice.
+-
+-2008-07-16  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned
+-	int.
+-
+-2008-06-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* configure: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2008-06-07  Joseph Myers  <joseph@codesourcery.com>
+-
+-	* configure.ac (parisc*-*-linux*, powerpc-*-sysv*,
+-	powerpc-*-beos*): Remove.
+-	* configure: Regenerate.
+-
+-2008-05-09  Julian Brown  <julian@codesourcery.com>
+-
+-	* Makefile.am (LTLDFLAGS): New.
+-	(libffi_la_LDFLAGS): Use above.
+-	* Makefile.in: Regenerate.
+-
+-2008-04-18  Paolo Bonzini  <bonzini@gnu.org>
+-
+-	PR bootstrap/35457
+-	* aclocal.m4: Regenerate.
+-	* configure: Regenerate.
+-
+-2008-03-26  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/sysv.S: Add .note.GNU-stack on Linux.
+-	* src/sh64/sysv.S: Likewise.
+-
+-2008-03-26  Daniel Jacobowitz  <dan@debian.org>
+-
+-	* src/arm/sysv.S: Fix ARM comment marker.
+-
+-2008-03-26  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/alpha/osf.S: Add .note.GNU-stack on Linux.
+-	* src/s390/sysv.S: Likewise.
+-	* src/powerpc/ppc_closure.S: Likewise.
+-	* src/powerpc/sysv.S: Likewise.
+-	* src/x86/unix64.S: Likewise.
+-	* src/x86/sysv.S: Likewise.
+-	* src/sparc/v8.S: Likewise.
+-	* src/sparc/v9.S: Likewise.
+-	* src/m68k/sysv.S: Likewise.
+-	* src/arm/sysv.S: Likewise.
+-
+-2008-03-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+-
+-	* aclocal.m4: Regenerate.
+-	* configure: Likewise.
+-	* Makefile.in: Likewise.
+-	* include/Makefile.in: Likewise.
+-	* testsuite/Makefile.in: Likewise.
+-
+-2008-02-12  Bjoern Koenig  <bkoenig@alpha-tierchen.de>
+-	    Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* configure.ac: Add amd64-*-freebsd* target.
+-	* configure: Regenerate.
+-
+-2008-01-30  H.J. Lu  <hongjiu.lu@intel.com>
+-
+-	PR libffi/34612
+-	* src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when
+-	returning struct.
+-
+-	* testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer"
+-	tests.
+-
+-2008-01-24  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* configure: Regenerate.
+-
+-2008-01-06  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): Fix thinko.
+-
+-2008-01-05  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	PR testsuite/32843
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): Add code for
+-	signed/unsigned int8/16 for X86_DARWIN.
+-	Updated copyright info.
+-	Handle one and two byte structs with special cif->flags.
+-	* src/x86/ffitarget.h: Add special types for one and two byte structs.
+-	Updated copyright info.
+-	* src/x86/darwin.S (ffi_call_SYSV): Rewrite to use a jump table like
+-	sysv.S
+-	Remove code to pop args from the stack after call.
+-	Special-case signed/unsigned for int8/16, one and two byte structs.
+-	(ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8,
+-	FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32,
+-	FFI_TYPE_SINT32.
+-	Updated copyright info.
+-
+-2007-12-08  David Daney  <ddaney@avtrex.com>
+-
+-	* src/mips/n32.S (ffi_call_N32):  Replace dadd with ADDU, dsub with
+-	SUBU, add with ADDU and use smaller code sequences.
+-
+-2007-12-07  David Daney  <ddaney@avtrex.com>
+-
+-	* src/mips/ffi.c (ffi_prep_cif_machdep): Handle long double return
+-	type.
+-
+-2007-12-06  David Daney  <ddaney@avtrex.com>
+-
+-	* include/ffi.h.in (FFI_SIZEOF_JAVA_RAW): Define if not	already
+-	defined.
+-	(ffi_java_raw): New typedef.
+-	(ffi_java_raw_call, ffi_java_ptrarray_to_raw,
+-	ffi_java_raw_to_ptrarray): Change parameter types from ffi_raw to
+-	ffi_java_raw.
+-	(ffi_java_raw_closure) : Same.
+-	(ffi_prep_java_raw_closure, ffi_prep_java_raw_closure_loc): Change
+-	parameter types.
+-	* src/java_raw_api.c (ffi_java_raw_size):  Replace FFI_SIZEOF_ARG with
+-	FFI_SIZEOF_JAVA_RAW.
+-	(ffi_java_raw_to_ptrarray): Change type of raw to ffi_java_raw.
+-	Replace FFI_SIZEOF_ARG with FFI_SIZEOF_JAVA_RAW. Use
+-	sizeof(ffi_java_raw) for alignment calculations.
+-	(ffi_java_ptrarray_to_raw): Same.
+-	(ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER
+-	if FFI_SIZEOF_JAVA_RAW == 4.
+-	(ffi_java_raw_to_rvalue): Same.
+-	(ffi_java_raw_call): Change type of raw to ffi_java_raw.
+-	(ffi_java_translate_args): Same.
+-	(ffi_prep_java_raw_closure_loc, ffi_prep_java_raw_closure): Change
+-	parameter types.
+-	* src/mips/ffitarget.h (FFI_SIZEOF_JAVA_RAW): Define for N32 ABI.
+-
+-2007-12-06  David Daney  <ddaney@avtrex.com>
+-
+-	* src/mips/n32.S (ffi_closure_N32): Use 64-bit add instruction on
+-	pointer values.
+-
+-2007-12-01  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	PR libffi/31937
+-	* src/powerpc/ffitarget.h: Introduce new ABI FFI_LINUX_SOFT_FLOAT.
+-	Add local FFI_TYPE_UINT128 to handle soft-float long-double-128.
+-	* src/powerpc/ffi.c: Distinguish between __NO_FPRS__ and not and
+-	set the NUM_FPR_ARG_REGISTERS according to.
+-	Add support for potential soft-float support under hard-float
+-	architecture.
+-	(ffi_prep_args_SYSV): Set NUM_FPR_ARG_REGISTERS to 0 in case of
+-	FFI_LINUX_SOFT_FLOAT, handle float, doubles and long-doubles according
+-	to the FFI_LINUX_SOFT_FLOAT ABI.
+-	(ffi_prep_cif_machdep): Likewise.
+-	(ffi_closure_helper_SYSV): Likewise.
+-	* src/powerpc/ppc_closure.S: Make sure not to store float/double
+-	on archs where __NO_FPRS__ is true.
+-	Add FFI_TYPE_UINT128 support.
+-	* src/powerpc/sysv.S: Add support for soft-float long-double-128.
+-	Adjust copyright notice.
+-
+-2007-11-25  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* src/closures.c: Move defintion of MAYBE_UNUSED from here to ...
+-	* include/ffi_common.h: ... here.
+-	Update copyright.
+-
+-2007-11-17  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* src/powerpc/sysv.S: Load correct cr to compare if we have long double.
+-	* src/powerpc/linux64.S: Likewise.
+-	* src/powerpc/ffi.c: Add a comment to show which part goes into cr6.
+-	* testsuite/libffi.call/return_ldl.c: New test.
+-
+-2007-09-04    <aph@redhat.com>
+-
+-	* src/arm/sysv.S (UNWIND): New.
+-	(Whole file): Conditionally compile unwinder directives.
+-	* src/arm/sysv.S: Add unwinder directives.
+-
+-	* src/arm/ffi.c (ffi_prep_args): Align structs by at least 4 bytes.
+-	Only treat r0 as a struct address if we're actually returning a
+-	struct by address.
+-	Only copy the bytes that are actually within a struct.
+-	(ffi_prep_cif_machdep): A Composite Type not larger than 4 bytes
+-	is returned in r0, not passed by address.
+-	(ffi_call): Allocate a word-sized temporary for the case where
+-	a composite is returned in r0.
+-	(ffi_prep_incoming_args_SYSV): Align as necessary.
+-
+-2007-08-05  Steven Newbury  <s_j_newbury@yahoo.co.uk>
+-
+-	* src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Use __clear_cache instead of
+-	directly using the sys_cacheflush syscall.
+-
+-2007-07-27  Andrew Haley  <aph@redhat.com>
+-
+-	* src/arm/sysv.S (ffi_closure_SYSV): Add soft-float.
+-
+-2007-09-03  Maciej W. Rozycki  <macro@linux-mips.org>
+-
+-	* Makefile.am: Unify MIPS_IRIX and MIPS_LINUX into MIPS.
+-	* configure.ac: Likewise.
+-	* Makefile.in: Regenerate.
+-	* include/Makefile.in: Likewise.
+-	* testsuite/Makefile.in: Likewise.
+-	* configure: Likewise.
+-
+-2007-08-24  David Daney  <ddaney@avtrex.com>
+-
+-	* testsuite/libffi.call/return_sl.c: New test.
+-
+-2007-08-10  David Daney  <ddaney@avtrex.com>
+-
+-	* testsuite/libffi.call/cls_multi_ushort.c,
+-	testsuite/libffi.call/cls_align_uint16.c,
+-	testsuite/libffi.call/nested_struct1.c,
+-	testsuite/libffi.call/nested_struct3.c,
+-	testsuite/libffi.call/cls_7_1_byte.c,
+-	testsuite/libffi.call/nested_struct5.c,
+-	testsuite/libffi.call/cls_double.c,
+-	testsuite/libffi.call/nested_struct7.c,
+-	testsuite/libffi.call/cls_sint.c,
+-	testsuite/libffi.call/nested_struct9.c,
+-	testsuite/libffi.call/cls_20byte1.c,
+-	testsuite/libffi.call/cls_multi_sshortchar.c,
+-	testsuite/libffi.call/cls_align_sint64.c,
+-	testsuite/libffi.call/cls_3byte2.c,
+-	testsuite/libffi.call/cls_multi_schar.c,
+-	testsuite/libffi.call/cls_multi_uchar.c,
+-	testsuite/libffi.call/cls_19byte.c,
+-	testsuite/libffi.call/cls_9byte1.c,
+-	testsuite/libffi.call/cls_align_float.c,
+-	testsuite/libffi.call/closure_fn1.c,
+-	testsuite/libffi.call/problem1.c,
+-	testsuite/libffi.call/closure_fn3.c,
+-	testsuite/libffi.call/cls_sshort.c,
+-	testsuite/libffi.call/closure_fn5.c,
+-	testsuite/libffi.call/cls_align_double.c,
+-	testsuite/libffi.call/nested_struct.c,
+-	testsuite/libffi.call/cls_2byte.c,
+-	testsuite/libffi.call/nested_struct10.c,
+-	testsuite/libffi.call/cls_4byte.c,
+-	testsuite/libffi.call/cls_6byte.c,
+-	testsuite/libffi.call/cls_8byte.c,
+-	testsuite/libffi.call/cls_multi_sshort.c,
+-	testsuite/libffi.call/cls_align_sint16.c,
+-	testsuite/libffi.call/cls_align_uint32.c,
+-	testsuite/libffi.call/cls_20byte.c,
+-	testsuite/libffi.call/cls_float.c,
+-	testsuite/libffi.call/nested_struct2.c,
+-	testsuite/libffi.call/cls_5_1_byte.c,
+-	testsuite/libffi.call/nested_struct4.c,
+-	testsuite/libffi.call/cls_24byte.c,
+-	testsuite/libffi.call/nested_struct6.c,
+-	testsuite/libffi.call/cls_64byte.c,
+-	testsuite/libffi.call/nested_struct8.c,
+-	testsuite/libffi.call/cls_uint.c,
+-	testsuite/libffi.call/cls_multi_ushortchar.c,
+-	testsuite/libffi.call/cls_schar.c,
+-	testsuite/libffi.call/cls_uchar.c,
+-	testsuite/libffi.call/cls_align_uint64.c,
+-	testsuite/libffi.call/cls_ulonglong.c,
+-	testsuite/libffi.call/cls_align_longdouble.c,
+-	testsuite/libffi.call/cls_1_1byte.c,
+-	testsuite/libffi.call/cls_12byte.c,
+-	testsuite/libffi.call/cls_3_1byte.c,
+-	testsuite/libffi.call/cls_3byte1.c,
+-	testsuite/libffi.call/cls_4_1byte.c,
+-	testsuite/libffi.call/cls_6_1_byte.c,
+-	testsuite/libffi.call/cls_16byte.c,
+-	testsuite/libffi.call/cls_18byte.c,
+-	testsuite/libffi.call/closure_fn0.c,
+-	testsuite/libffi.call/cls_9byte2.c,
+-	testsuite/libffi.call/closure_fn2.c,
+-	testsuite/libffi.call/closure_fn4.c,
+-	testsuite/libffi.call/cls_ushort.c,
+-	testsuite/libffi.call/closure_fn6.c,
+-	testsuite/libffi.call/cls_5byte.c,
+-	testsuite/libffi.call/cls_align_pointer.c,
+-	testsuite/libffi.call/cls_7byte.c,
+-	testsuite/libffi.call/cls_align_sint32.c,
+-	testsuite/libffi.special/unwindtest_ffi_call.cc,
+-	testsuite/libffi.special/unwindtest.cc: Remove xfail for mips64*-*-*.
+-
+-2007-08-10  David Daney  <ddaney@avtrex.com>
+-
+-	PR libffi/28313
+-	* configure.ac: Don't treat mips64 as a special case.
+-	* Makefile.am (nodist_libffi_la_SOURCES): Add n32.S.
+-	* configure: Regenerate
+-	* Makefile.in: Ditto.
+-	* fficonfig.h.in: Ditto.
+-	* src/mips/ffitarget.h (REG_L, REG_S, SUBU, ADDU, SRL, LI): Indent.
+-	(LA, EH_FRAME_ALIGN, FDE_ADDR_BYTES): New preprocessor macros.
+-	(FFI_DEFAULT_ABI): Set for n64 case.
+-	(FFI_CLOSURES, FFI_TRAMPOLINE_SIZE): Define for n32 and n64 cases.
+-	* src/mips/n32.S (ffi_call_N32): Add debug macros and labels for FDE.
+-	(ffi_closure_N32): New function.
+-	(.eh_frame): New section
+-	* src/mips/o32.S: Clean up comments.
+-	(ffi_closure_O32): Pass ffi_closure parameter in $12.
+-	* src/mips/ffi.c: Use FFI_MIPS_N32 instead of
+-	_MIPS_SIM == _ABIN32 throughout.
+-	(FFI_MIPS_STOP_HERE): New, use in place of
+-	ffi_stop_here.
+-	(ffi_prep_args): Use unsigned long to hold pointer values.  Rewrite
+-	to support n32/n64 ABIs.
+-	(calc_n32_struct_flags): Rewrite.
+-	(calc_n32_return_struct_flags): Remove unused variable.  Reverse
+-	position of flag bits.
+-	(ffi_prep_cif_machdep): Rewrite n32 portion.
+-	(ffi_call): Enable for n64.  Add special handling for small structure
+-	return values.
+-	(ffi_prep_closure_loc): Add n32 and n64 support.
+-	(ffi_closure_mips_inner_O32): Add cast to silence warning.
+-	(copy_struct_N32, ffi_closure_mips_inner_N32): New functions.
+-
+-2007-08-08  David Daney  <ddaney@avtrex.com>
+-
+-	* testsuite/libffi.call/ffitest.h (ffi_type_mylong): Remove definition.
+-	* testsuite/libffi.call/cls_align_uint16.c (main): Use correct type
+-	specifiers.
+-	* testsuite/libffi.call/nested_struct1.c (main): Ditto.
+-	* testsuite/libffi.call/cls_sint.c (main): Ditto.
+-	* testsuite/libffi.call/nested_struct9.c (main): Ditto.
+-	* testsuite/libffi.call/cls_20byte1.c (main): Ditto.
+-	* testsuite/libffi.call/cls_9byte1.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn1.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn3.c (main): Ditto.
+-	* testsuite/libffi.call/return_dbl2.c (main): Ditto.
+-	* testsuite/libffi.call/cls_sshort.c (main): Ditto.
+-	* testsuite/libffi.call/return_fl3.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn5.c (main): Ditto.
+-	* testsuite/libffi.call/nested_struct.c (main): Ditto.
+-	* testsuite/libffi.call/nested_struct10.c (main): Ditto.
+-	* testsuite/libffi.call/return_ll1.c (main): Ditto.
+-	* testsuite/libffi.call/cls_8byte.c (main): Ditto.
+-	* testsuite/libffi.call/cls_align_uint32.c (main): Ditto.
+-	* testsuite/libffi.call/cls_align_sint16.c (main): Ditto.
+-	* testsuite/libffi.call/cls_20byte.c (main): Ditto.
+-	* testsuite/libffi.call/nested_struct2.c (main): Ditto.
+-	* testsuite/libffi.call/cls_24byte.c (main): Ditto.
+-	* testsuite/libffi.call/nested_struct6.c (main): Ditto.
+-	* testsuite/libffi.call/cls_uint.c (main): Ditto.
+-	* testsuite/libffi.call/cls_12byte.c (main): Ditto.
+-	* testsuite/libffi.call/cls_16byte.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn0.c (main): Ditto.
+-	* testsuite/libffi.call/cls_9byte2.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn2.c (main): Ditto.
+-	* testsuite/libffi.call/return_dbl1.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn4.c (main): Ditto.
+-	* testsuite/libffi.call/closure_fn6.c (main): Ditto.
+-	* testsuite/libffi.call/cls_align_sint32.c (main): Ditto.
+-
+-2007-08-07  Andrew Haley  <aph@redhat.com>
+-
+-	* src/x86/sysv.S (ffi_closure_raw_SYSV): Fix typo in previous
+-	checkin.
+-
+-2007-08-06  Andrew Haley  <aph@redhat.com>
+-
+-	PR testsuite/32843
+-	* src/x86/sysv.S (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8,
+-	FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32,
+-	FFI_TYPE_SINT32.
+-
+-2007-08-02  David Daney  <ddaney@avtrex.com>
+-
+-	* testsuite/libffi.call/return_ul.c (main): Define return type as
+-	ffi_arg.  Use proper printf conversion specifier.
+-
+-2007-07-30  Andrew Haley  <aph@redhat.com>
+-
+-	PR testsuite/32843
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): in x86 case, add code for
+-	signed/unsigned int8/16.
+-	* src/x86/sysv.S (ffi_call_SYSV): Rewrite to:
+-	Use a jump table.
+-	Remove code to pop args from the stack after call.
+-	Special-case signed/unsigned int8/16.
+-	* testsuite/libffi.call/return_sc.c (main): Revert.
+-
+-2007-07-26  Richard Guenther  <rguenther@suse.de>
+-
+-	PR testsuite/32843
+-	* testsuite/libffi.call/return_sc.c (main): Verify call
+-	result as signed char, not ffi_arg.
+-
+-2007-07-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* configure.ac (i?86-*-solaris2.1[0-9]): Set TARGET to X86_64.
+-	* configure: Regenerate.
+-
+-2007-07-11  David Daney  <ddaney@avtrex.com>
+-
+-	* src/mips/ffi.c: Don't include sys/cachectl.h.
+-	(ffi_prep_closure_loc): Use __builtin___clear_cache() instead of
+-	cacheflush().
+-
+-2007-05-18  Aurelien Jarno  <aurelien@aurel32.net>
+-
+-	* src/arm/ffi.c (ffi_prep_closure_loc): Renamed and ajusted
+-	from (ffi_prep_closure): ... this.
+-	(FFI_INIT_TRAMPOLINE): Adjust.
+-
+-2005-12-31  Phil Blundell  <pb@reciva.com>
+-
+-	* src/arm/ffi.c (ffi_prep_incoming_args_SYSV,
+-	ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support.
+-	* src/arm/sysv.S(ffi_closure_SYSV): Likewise.
+-	* src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise.
+-	(FFI_CLOSURES): Enable closure support.
+-
+-2007-07-03  Andrew Haley  <aph@hedges.billgatliff.com>
+-
+-	* testsuite/libffi.call/cls_multi_ushort.c,
+-	testsuite/libffi.call/cls_align_uint16.c,
+-	testsuite/libffi.call/nested_struct1.c,
+-	testsuite/libffi.call/nested_struct3.c,
+-	testsuite/libffi.call/cls_7_1_byte.c,
+-	testsuite/libffi.call/cls_double.c,
+-	testsuite/libffi.call/nested_struct5.c,
+-	testsuite/libffi.call/nested_struct7.c,
+-	testsuite/libffi.call/cls_sint.c,
+-	testsuite/libffi.call/nested_struct9.c,
+-	testsuite/libffi.call/cls_20byte1.c,
+-	testsuite/libffi.call/cls_multi_sshortchar.c,
+-	testsuite/libffi.call/cls_align_sint64.c,
+-	testsuite/libffi.call/cls_3byte2.c,
+-	testsuite/libffi.call/cls_multi_schar.c,
+-	testsuite/libffi.call/cls_multi_uchar.c,
+-	testsuite/libffi.call/cls_19byte.c,
+-	testsuite/libffi.call/cls_9byte1.c,
+-	testsuite/libffi.call/cls_align_float.c,
+-	testsuite/libffi.call/closure_fn1.c,
+-	testsuite/libffi.call/problem1.c,
+-	testsuite/libffi.call/closure_fn3.c,
+-	testsuite/libffi.call/cls_sshort.c,
+-	testsuite/libffi.call/closure_fn5.c,
+-	testsuite/libffi.call/cls_align_double.c,
+-	testsuite/libffi.call/cls_2byte.c,
+-	testsuite/libffi.call/nested_struct.c,
+-	testsuite/libffi.call/nested_struct10.c,
+-	testsuite/libffi.call/cls_4byte.c,
+-	testsuite/libffi.call/cls_6byte.c,
+-	testsuite/libffi.call/cls_8byte.c,
+-	testsuite/libffi.call/cls_multi_sshort.c,
+-	testsuite/libffi.call/cls_align_uint32.c,
+-	testsuite/libffi.call/cls_align_sint16.c,
+-	testsuite/libffi.call/cls_float.c,
+-	testsuite/libffi.call/cls_20byte.c,
+-	testsuite/libffi.call/cls_5_1_byte.c,
+-	testsuite/libffi.call/nested_struct2.c,
+-	testsuite/libffi.call/cls_24byte.c,
+-	testsuite/libffi.call/nested_struct4.c,
+-	testsuite/libffi.call/nested_struct6.c,
+-	testsuite/libffi.call/cls_64byte.c,
+-	testsuite/libffi.call/nested_struct8.c,
+-	testsuite/libffi.call/cls_uint.c,
+-	testsuite/libffi.call/cls_multi_ushortchar.c,
+-	testsuite/libffi.call/cls_schar.c,
+-	testsuite/libffi.call/cls_uchar.c,
+-	testsuite/libffi.call/cls_align_uint64.c,
+-	testsuite/libffi.call/cls_ulonglong.c,
+-	testsuite/libffi.call/cls_align_longdouble.c,
+-	testsuite/libffi.call/cls_1_1byte.c,
+-	testsuite/libffi.call/cls_12byte.c,
+-	testsuite/libffi.call/cls_3_1byte.c,
+-	testsuite/libffi.call/cls_3byte1.c,
+-	testsuite/libffi.call/cls_4_1byte.c,
+-	testsuite/libffi.call/cls_6_1_byte.c,
+-	testsuite/libffi.call/cls_16byte.c,
+-	testsuite/libffi.call/cls_18byte.c,
+-	testsuite/libffi.call/closure_fn0.c,
+-	testsuite/libffi.call/cls_9byte2.c,
+-	testsuite/libffi.call/closure_fn2.c,
+-	testsuite/libffi.call/closure_fn4.c,
+-	testsuite/libffi.call/cls_ushort.c,
+-	testsuite/libffi.call/closure_fn6.c,
+-	testsuite/libffi.call/cls_5byte.c,
+-	testsuite/libffi.call/cls_align_pointer.c,
+-	testsuite/libffi.call/cls_7byte.c,
+-	testsuite/libffi.call/cls_align_sint32.c,
+-	testsuite/libffi.special/unwindtest_ffi_call.cc,
+-	testsuite/libffi.special/unwindtest.cc: Enable for ARM.
+-
+-2007-07-05  H.J. Lu  <hongjiu.lu@intel.com>
+-
+-	* aclocal.m4: Regenerated.
+-
+-2007-06-02  Paolo Bonzini  <bonzini@gnu.org>
+-
+-	* configure: Regenerate.
+-
+-2007-05-23  Steve Ellcey  <sje@cup.hp.com>
+-
+-	* Makefile.in: Regenerate.
+-	* configure: Regenerate.
+-	* aclocal.m4: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2007-05-10  Roman Zippel <zippel@linux-m68k.org>
+-
+-	* src/m68k/ffi.c (ffi_prep_incoming_args_SYSV,
+-	ffi_closure_SYSV_inner,ffi_prep_closure): New, add closure support.
+-	* src/m68k/sysv.S(ffi_closure_SYSV,ffi_closure_struct_SYSV): Likewise.
+-	* src/m68k/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise.
+-	(FFI_CLOSURES): Enable closure support.
+-
+-2007-05-10  Roman Zippel <zippel@linux-m68k.org>
+-
+-	* configure.ac (HAVE_AS_CFI_PSEUDO_OP): New test.
+-	* configure: Regenerate.
+-	* fficonfig.h.in: Regenerate.
+-	* src/m68k/sysv.S (CFI_STARTPROC,CFI_ENDPROC,
+-	CFI_OFFSET,CFI_DEF_CFA): New macros.
+-	(ffi_call_SYSV): Add callframe annotation.
+-
+-2007-05-10  Roman Zippel <zippel@linux-m68k.org>
+-
+-	* src/m68k/ffi.c (ffi_prep_args,ffi_prep_cif_machdep): Fix
+-	numerous test suite failures.
+-	* src/m68k/sysv.S (ffi_call_SYSV): Likewise.
+-
+-2007-04-11  Paolo Bonzini  <bonzini@gnu.org>
+-
+-	* Makefile.am (EXTRA_DIST): Bring up to date.
+-	* Makefile.in: Regenerate.
+-	* src/frv/eabi.S: Remove RCS keyword.
+-
+-2007-04-06  Richard Henderson  <rth@redhat.com>
+-
+-	* configure.ac: Tidy target case.
+-	(HAVE_LONG_DOUBLE): Allow the target to override.
+-	* configure: Regenerate.
+-	* include/ffi.h.in: Don't define ffi_type_foo if
+-	LIBFFI_HIDE_BASIC_TYPES is defined.
+-	(ffi_type_longdouble): If not HAVE_LONG_DOUBLE, define
+-	to ffi_type_double.
+-	* types.c (LIBFFI_HIDE_BASIC_TYPES): Define.
+-	(FFI_TYPEDEF, ffi_type_void): Mark the data const.
+-	(ffi_type_longdouble): Special case for Alpha.  Don't define
+-	if long double == double.
+-
+-	* src/alpha/ffi.c (FFI_TYPE_LONGDOUBLE): Assert unique value.
+-	(ffi_prep_cif_machdep): Handle it as the 128-bit type.
+-	(ffi_call, ffi_closure_osf_inner): Likewise.
+-	(ffi_closure_osf_inner): Likewise.  Mark hidden.
+-	(ffi_call_osf, ffi_closure_osf): Mark hidden.
+-	* src/alpha/ffitarget.h (FFI_LAST_ABI): Tidy definition.
+-	* src/alpha/osf.S (ffi_call_osf, ffi_closure_osf): Mark hidden.
+-	(load_table): Handle 128-bit long double.
+-
+-	* testsuite/libffi.call/float4.c: Add -mieee for alpha.
+-
+-2007-04-06  Tom Tromey  <tromey@redhat.com>
+-
+-	PR libffi/31491:
+-	* README: Fixed bug in example.
+-
+-2007-04-03  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/closures.c: Include sys/statfs.h.
+-	(_GNU_SOURCE): Define on Linux.
+-	(FFI_MMAP_EXEC_SELINUX): Define.
+-	(selinux_enabled): New variable.
+-	(selinux_enabled_check): New function.
+-	(is_selinux_enabled): Define.
+-	(dlmmap): Use it.
+-
+-2007-03-24  Uros Bizjak  <ubizjak@gmail.com>
+-
+-	* testsuite/libffi.call/return_fl2.c (return_fl): Mark as static.
+-	Use 'volatile float sum' to create sum of floats to avoid false
+-	negative due to excess precision on ix86 targets.
+-	(main): Ditto.
+-
+-2007-03-08  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* src/powerpc/ffi.c (flush_icache): Fix left-over from previous
+-	patch.
+-	(ffi_prep_closure_loc): Remove unneeded casts.  Add needed ones.
+-
+-2007-03-07  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* include/ffi.h.in (ffi_closure_alloc, ffi_closure_free): New.
+-	(ffi_prep_closure_loc): New.
+-	(ffi_prep_raw_closure_loc): New.
+-	(ffi_prep_java_raw_closure_loc): New.
+-	* src/closures.c: New file.
+-	* src/dlmalloc.c [FFI_MMAP_EXEC_WRIT] (struct malloc_segment):
+-	Replace sflags with exec_offset.
+-	[FFI_MMAP_EXEC_WRIT] (mmap_exec_offset, add_segment_exec_offset,
+-	sub_segment_exec_offset): New macros.
+-	(get_segment_flags, set_segment_flags, check_segment_merge): New
+-	macros.
+-	(is_mmapped_segment, is_extern_segment): Use get_segment_flags.
+-	(add_segment, sys_alloc, create_mspace, create_mspace_with_base,
+-	destroy_mspace): Use new macros.
+-	(sys_alloc): Silence warning.
+-	* Makefile.am (libffi_la_SOURCES): Add src/closures.c.
+-	* Makefile.in: Rebuilt.
+-	* src/prep_cif [FFI_CLOSURES] (ffi_prep_closure): Implement in
+-	terms of ffi_prep_closure_loc.
+-	* src/raw_api.c (ffi_prep_raw_closure_loc): Renamed and adjusted
+-	from...
+-	(ffi_prep_raw_closure): ... this.  Re-implement in terms of the
+-	renamed version.
+-	* src/java_raw_api (ffi_prep_java_raw_closure_loc): Renamed and
+-	adjusted from...
+-	(ffi_prep_java_raw_closure): ... this.  Re-implement in terms of
+-	the renamed version.
+-	* src/alpha/ffi.c (ffi_prep_closure_loc): Renamed from
+-	(ffi_prep_closure): ... this.
+-	* src/pa/ffi.c: Likewise.
+-	* src/cris/ffi.c: Likewise.  Adjust.
+-	* src/frv/ffi.c: Likewise.
+-	* src/ia64/ffi.c: Likewise.
+-	* src/mips/ffi.c: Likewise.
+-	* src/powerpc/ffi_darwin.c: Likewise.
+-	* src/s390/ffi.c: Likewise.
+-	* src/sh/ffi.c: Likewise.
+-	* src/sh64/ffi.c: Likewise.
+-	* src/sparc/ffi.c: Likewise.
+-	* src/x86/ffi64.c: Likewise.
+-	* src/x86/ffi.c: Likewise.
+-	(FFI_INIT_TRAMPOLINE): Adjust.
+-	(ffi_prep_raw_closure_loc): Renamed and adjusted from...
+-	(ffi_prep_raw_closure): ... this.
+-	* src/powerpc/ffi.c (ffi_prep_closure_loc): Renamed from
+-	(ffi_prep_closure): ... this.
+-	(flush_icache): Adjust.
+-
+-2007-03-07  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* src/dlmalloc.c: New file, imported version 2.8.3 of Doug
+-	Lea's malloc.
+-
+-2007-03-01  Brooks Moses  <brooks.moses@codesourcery.com>
+-
+-	* Makefile.am: Add dummy install-pdf target.
+-	* Makefile.in: Regenerate
+-
+-2007-02-13  Andreas Krebbel  <krebbel1@de.ibm.com>
+-
+-	* src/s390/ffi.c (ffi_prep_args, ffi_prep_cif_machdep,
+-	ffi_closure_helper_SYSV): Add long double handling.
+-
+-2007-02-02  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/powerpc/linux64.S (ffi_call_LINUX64): Move restore of r2
+-	immediately after bctrl instruction.
+-
+-2007-01-18  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* Makefile.am (all-recursive, install-recursive,
+-	mostlyclean-recursive, clean-recursive, distclean-recursive,
+-	maintainer-clean-recursive): Add missing targets.
+-	* Makefile.in: Rebuilt.
+-
+-2006-12-14  Andreas Tobler  <a.tobler@schweiz.org>
+-
+-	* configure.ac: Add TARGET for x86_64-*-darwin*.
+-	* Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources
+-	for X86_DARWIN.
+-	* src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*.
+-	* src/x86/darwin64.S: New file for x86_64-*-darwin* support.
+-	* configure: Regenerate.
+-	* Makefile.in: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-	* testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for
+-	ffi_call only.
+-
+-2006-12-13  Andreas Tobler <a.tobler@schweiz.org>
+-
+-	* aclocal.m4: Regenerate with aclocal -I .. as written in the
+-	Makefile.am.
+-
+-2006-10-31  Geoffrey Keating  <geoffk@apple.com>
+-
+-	* src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New.
+-	(ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for
+-	Darwin.
+-	* testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL.
+-	* testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL.
+-
+-2006-10-10  Paolo Bonzini  <bonzini@gnu.org>
+-	    Sandro Tolaini  <tolaini@libero.it>
+-
+-	* configure.ac [i*86-*-darwin*]: Set X86_DARWIN symbol and
+-	conditional.
+-	* configure: Regenerated.
+-	* Makefile.am (nodist_libffi_la_SOURCES) [X86_DARWIN]: New case.
+-	(EXTRA_DIST): Add src/x86/darwin.S.
+-	* Makefile.in: Regenerated.
+-	* include/Makefile.in: Regenerated.
+-	* testsuite/Makefile.in: Regenerated.
+-
+-	* src/x86/ffi.c (ffi_prep_cif_machdep) [X86_DARWIN]: Treat like
+-	X86_WIN32, and additionally align stack to 16 bytes.
+-	* src/x86/darwin.S: New, based on sysv.S.
+-	* src/prep_cif.c (ffi_prep_cif) [X86_DARWIN]: Align > 8-byte structs.
+-
+-2006-09-12  David Daney  <ddaney@avtrex.com>
+-
+-	PR libffi/23935
+-	* include/Makefile.am: Install both ffi.h and ffitarget.h in
+-	$(libdir)/gcc/$(target_alias)/$(gcc_version)/include.
+-	* aclocal.m4: Regenerated for automake 1.9.6.
+-	* Makefile.in: Regenerated.
+-	* include/Makefile.in: Regenerated.
+-	* testsuite/Makefile.in: Regenerated.
+-
+-2006-08-17  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* include/ffi_common.h (struct): Revert accidental commit.
+-
+-2006-08-15  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* include/ffi_common.h: Remove lint directives.
+-	* include/ffi.h.in: Likewise.
+-
+-2006-07-25  Torsten Schoenfeld  <kaffeetisch@gmx.de>
+-
+-	* include/ffi.h.in (ffi_type_ulong, ffi_type_slong): Define correctly
+-	for 32-bit architectures.
+-	* testsuite/libffi.call/return_ul.c: New test case.
+-
+-2006-07-19  David Daney  <ddaney@avtrex.com>
+-
+-	* testsuite/libffi.call/closure_fn6.c: Remove xfail for mips,
+-	xfail remains for mips64.
+-
+-2006-05-23  Carlos O'Donell  <carlos@codesourcery.com>
+-
+-	* Makefile.am: Add install-html target. Add install-html to .PHONY
+-	* Makefile.in: Regenerate.
+-	* aclocal.m4: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2006-05-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+-
+-	* pa/ffi.c (ffi_prep_args_pa32): Load floating point arguments from
+-	stack slot.
+-
+-2006-04-22  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* README: Remove notice about 'Crazy Comments'.
+-	* src/debug.c: Remove lint directives. Cleanup white spaces.
+-	* src/java_raw_api.c: Likewise.
+-	* src/prep_cif.c: Likewise.
+-	* src/raw_api.c: Likewise.
+-	* src/ffitest.c: Delete. No longer needed, all test cases migrated
+-	to the testsuite.
+-	* src/arm/ffi.c: Remove lint directives.
+-	* src/m32r/ffi.c: Likewise.
+-	* src/pa/ffi.c: Likewise.
+-	* src/powerpc/ffi.c: Likewise.
+-	* src/powerpc/ffi_darwin.c: Likewise.
+-	* src/sh/ffi.c: Likewise.
+-	* src/sh64/ffi.c: Likewise.
+-	* src/x86/ffi.c: Likewise.
+-	* testsuite/libffi.call/float2.c: Likewise.
+-	* testsuite/libffi.call/promotion.c: Likewise.
+-	* testsuite/libffi.call/struct1.c: Likewise.
+-
+-2006-04-13  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/pa/hpux32.S: Correct unwind offset calculation for
+-	ffi_closure_pa32.
+-	* src/pa/linux.S: Likewise.
+-
+-2006-04-12  James E Wilson  <wilson@specifix.com>
+-
+-	PR libgcj/26483
+-	* src/ia64/ffi.c (stf_spill, ldf_fill): Rewrite as macros.
+-	(hfa_type_load): Call stf_spill.
+-	(hfa_type_store): Call ldf_fill.
+-	(ffi_call): Adjust calls to above routines.  Add local temps for
+-	macro result.
+-
+-2006-04-10  Matthias Klose  <doko@debian.org>
+-
+-	* testsuite/lib/libffi-dg.exp (libffi-init): Recognize multilib
+-	directory names containing underscores.
+-
+-2006-04-07  James E Wilson  <wilson@specifix.com>
+-
+-	* testsuite/libffi.call/float4.c: New testcase.
+-
+-2006-04-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+-	    Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* Makefile.am: Add PA_HPUX port.
+-	* Makefile.in: Regenerate.
+-	* include/Makefile.in: Likewise.
+-	* testsuite/Makefile.in: Likewise.
+-	* configure.ac: Add PA_HPUX rules.
+-	* configure: Regenerate.
+-	* src/pa/ffitarget.h: Rename linux target to PA_LINUX.
+-	Add PA_HPUX and PA64_HPUX.
+-	Rename FFI_LINUX ABI to FFI_PA32 ABI.
+-	(FFI_TRAMPOLINE_SIZE): Define for 32-bit HP-UX targets.
+-	(FFI_TYPE_SMALL_STRUCT2): Define.
+-	(FFI_TYPE_SMALL_STRUCT4): Likewise.
+-	(FFI_TYPE_SMALL_STRUCT8): Likewise.
+-	(FFI_TYPE_SMALL_STRUCT3): Redefine.
+-	(FFI_TYPE_SMALL_STRUCT5): Likewise.
+-	(FFI_TYPE_SMALL_STRUCT6): Likewise.
+-	(FFI_TYPE_SMALL_STRUCT7): Likewise.
+-	* src/pa/ffi.c (ROUND_DOWN): Delete.
+-	(fldw, fstw, fldd, fstd): Use '__asm__'.
+-	(ffi_struct_type): Add support for FFI_TYPE_SMALL_STRUCT2,
+-	FFI_TYPE_SMALL_STRUCT4 and FFI_TYPE_SMALL_STRUCT8.
+-	(ffi_prep_args_LINUX): Rename to ffi_prep_args_pa32. Update comment.
+-	Simplify incrementing of stack slot variable. Change type of local
+-	'n' to unsigned int.
+-	(ffi_size_stack_LINUX): Rename to ffi_size_stack_pa32. Handle long
+-	double on PA_HPUX.
+-	(ffi_prep_cif_machdep): Likewise.
+-	(ffi_call): Likewise.
+-	(ffi_closure_inner_LINUX): Rename to ffi_closure_inner_pa32. Change
+-	return type to ffi_status. Simplify incrementing of stack slot
+-	variable. Only copy floating point argument registers when PA_LINUX
+-	is true. Reformat debug statement.
+-	Add support for FFI_TYPE_SMALL_STRUCT2, FFI_TYPE_SMALL_STRUCT4 and
+-	FFI_TYPE_SMALL_STRUCT8.
+-	(ffi_closure_LINUX): Rename to ffi_closure_pa32. Add 'extern' to
+-	declaration.
+-	(ffi_prep_closure): Make linux trampoline conditional on PA_LINUX.
+-	Add nops to cache flush.  Add trampoline for PA_HPUX.
+-	* src/pa/hpux32.S: New file.
+-	* src/pa/linux.S (ffi_call_LINUX): Rename to ffi_call_pa32. Rename
+-	ffi_prep_args_LINUX to ffi_prep_args_pa32.
+-	Localize labels. Add support for 2, 4 and 8-byte small structs. Handle
+-	unaligned destinations in 3, 5, 6 and 7-byte small structs. Order
+-	argument type checks so that common argument types appear first.
+-	(ffi_closure_LINUX): Rename to ffi_closure_pa32. Rename
+-	ffi_closure_inner_LINUX to ffi_closure_inner_pa32.
+-
+-2006-03-24  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/powerpc/ffitarget.h (enum ffi_abi): Add FFI_LINUX.  Default
+-	for 32-bit using IBM extended double format.  Fix FFI_LAST_ABI.
+-	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Handle linux variant of
+-	FFI_TYPE_LONGDOUBLE.
+-	(ffi_prep_args64): Assert using IBM extended double.
+-	(ffi_prep_cif_machdep): Don't munge FFI_TYPE_LONGDOUBLE type.
+-	Handle FFI_LINUX FFI_TYPE_LONGDOUBLE return and args.
+-	(ffi_call): Handle FFI_LINUX.
+-	(ffi_closure_helper_SYSV): Non FFI_LINUX long double return needs
+-	gpr3 return pointer as for struct return.  Handle FFI_LINUX
+-	FFI_TYPE_LONGDOUBLE return and args.  Don't increment "nf"
+-	unnecessarily.
+-	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Load both f1 and f2
+-	for FFI_TYPE_LONGDOUBLE.  Move epilogue insns into case table.
+-	Don't use r6 as pointer to results, instead use sp offset.  Don't
+-	make a special call to load lr with case table address, instead
+-	use offset from previous call.
+-	* src/powerpc/sysv.S (ffi_call_SYSV): Save long double return.
+-	* src/powerpc/linux64.S (ffi_call_LINUX64): Simplify long double
+-	return.
+-
+-2006-03-15  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh64/ffi.c (ffi_prep_cif_machdep): Handle float arguments
+-	passed with FP registers correctly.
+-	(ffi_closure_helper_SYSV): Likewise.
+-	* src/sh64/sysv.S: Likewise.
+-
+-2006-03-01  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.special/unwindtest.cc (closure_test_fn): Mark cif,
+-	args and userdata unused.
+-	(closure_test_fn1): Mark cif and userdata unused.
+-	(main): Remove unused res.
+-
+-2006-02-28  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/call.exp: Adjust FSF address. Add test runs for
+-	-O2, -O3, -Os and the warning flags -W -Wall.
+-	* testsuite/libffi.special/special.exp: Likewise.
+-	* testsuite/libffi.call/ffitest.h: Add an __UNUSED__ macro to mark
+-	unused parameter unused for gcc or else do nothing.
+-	* testsuite/libffi.special/ffitestcxx.h: Likewise.
+-	* testsuite/libffi.call/cls_12byte.c (cls_struct_12byte_gn): Mark cif
+-	and userdata unused.
+-	* testsuite/libffi.call/cls_16byte.c (cls_struct_16byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_18byte.c (cls_struct_18byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_19byte.c (cls_struct_19byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_1_1byte.c (cls_struct_1_1byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_20byte.c (cls_struct_20byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_20byte1.c (cls_struct_20byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_24byte.c (cls_struct_24byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_2byte.c (cls_struct_2byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_3_1byte.c (cls_struct_3_1byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_3byte1.c (cls_struct_3byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_3byte2.c (cls_struct_3byte_gn1): Likewise.
+-	* testsuite/libffi.call/cls_4_1byte.c (cls_struct_4_1byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_4byte.c (cls_struct_4byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_5_1_byte.c (cls_struct_5byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_5byte.c (cls_struct_5byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_64byte.c (cls_struct_64byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_6_1_byte.c (cls_struct_6byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_6byte.c (cls_struct_6byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_7_1_byte.c (cls_struct_7byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_7byte.c (cls_struct_7byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_8byte.c (cls_struct_8byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_9byte1.c (cls_struct_9byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_9byte2.c (cls_struct_9byte_gn): Likewise.
+-	* testsuite/libffi.call/cls_align_double.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_float.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_longdouble.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_pointer.c (cls_struct_align_fn): Cast
+-	void* to avoid compiler warning.
+-	(main): Likewise.
+-	(cls_struct_align_gn): Mark cif and userdata unused.
+-	* testsuite/libffi.call/cls_align_sint16.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_sint32.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_sint64.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_uint16.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_align_uint32.c (cls_struct_align_gn):
+-	Likewise.
+-	* testsuite/libffi.call/cls_double.c (cls_ret_double_fn): Likewise.
+-	* testsuite/libffi.call/cls_float.c (cls_ret_float_fn): Likewise.
+-	* testsuite/libffi.call/cls_multi_schar.c (test_func_gn): Mark cif and
+-	data unused.
+-	(main): Cast res_call to silence gcc.
+-	* testsuite/libffi.call/cls_multi_sshort.c (test_func_gn): Mark cif and
+-	data unused.
+-	(main): Cast res_call to silence gcc.
+-	* testsuite/libffi.call/cls_multi_sshortchar.c (test_func_gn): Mark cif
+-	and data unused.
+-	(main): Cast res_call to silence gcc.
+-	* testsuite/libffi.call/cls_multi_uchar.c (test_func_gn): Mark cif and
+-	data unused.
+-	(main): Cast res_call to silence gcc.
+-	* testsuite/libffi.call/cls_multi_ushort.c (test_func_gn): Mark cif and
+-	data unused.
+-	(main): Cast res_call to silence gcc.
+-	* testsuite/libffi.call/cls_multi_ushortchar.c (test_func_gn): Mark cif
+-	and data unused.
+-	(main): Cast res_call to silence gcc.
+-	* testsuite/libffi.call/cls_schar.c (cls_ret_schar_fn): Mark cif and
+-	userdata unused.
+-	(cls_ret_schar_fn): Cast printf parameter to silence gcc.
+-	* testsuite/libffi.call/cls_sint.c (cls_ret_sint_fn): Mark cif and
+-	userdata unused.
+-	(cls_ret_sint_fn): Cast printf parameter to silence gcc.
+-	* testsuite/libffi.call/cls_sshort.c (cls_ret_sshort_fn): Mark cif and
+-	userdata unused.
+-	(cls_ret_sshort_fn): Cast printf parameter to silence gcc.
+-	* testsuite/libffi.call/cls_uchar.c (cls_ret_uchar_fn):  Mark cif and
+-	userdata unused.
+-	(cls_ret_uchar_fn): Cast printf parameter to silence gcc.
+-	* testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Mark cif and
+-	userdata unused.
+-	(cls_ret_uint_fn): Cast printf parameter to silence gcc.
+-	* testsuite/libffi.call/cls_ulonglong.c (cls_ret_ulonglong_fn): Mark cif
+-	and userdata unused.
+-	* testsuite/libffi.call/cls_ushort.c (cls_ret_ushort_fn): Mark cif and
+-	userdata unused.
+-	(cls_ret_ushort_fn): Cast printf parameter to silence gcc.
+-	* testsuite/libffi.call/float.c (floating): Remove unused parameter e.
+-	* testsuite/libffi.call/float1.c (main): Remove unused variable i.
+-	Cleanup white spaces.
+-	* testsuite/libffi.call/negint.c (checking): Remove unused variable i.
+-	* testsuite/libffi.call/nested_struct.c (cls_struct_combined_gn): Mark
+-	cif and userdata unused.
+-	* testsuite/libffi.call/nested_struct1.c (cls_struct_combined_gn):
+-	Likewise.
+-	* testsuite/libffi.call/nested_struct10.c (B_gn): Likewise.
+-	* testsuite/libffi.call/nested_struct2.c (B_fn): Adjust printf
+-	formatters to silence gcc.
+-	(B_gn): Mark cif and userdata unused.
+-	* testsuite/libffi.call/nested_struct3.c (B_gn): Mark cif and userdata
+-	unused.
+-	* testsuite/libffi.call/nested_struct4.c: Mention related PR.
+-	(B_gn): Mark cif and userdata unused.
+-	* testsuite/libffi.call/nested_struct5.c (B_gn): Mark cif and userdata
+-	unused.
+-	* testsuite/libffi.call/nested_struct6.c: Mention related PR.
+-	(B_gn): Mark cif and userdata unused.
+-	* testsuite/libffi.call/nested_struct7.c (B_gn): Mark cif and userdata
+-	unused.
+-	* testsuite/libffi.call/nested_struct8.c (B_gn): Likewise.
+-	* testsuite/libffi.call/nested_struct9.c (B_gn): Likewise.
+-	* testsuite/libffi.call/problem1.c (stub): Likewise.
+-	* testsuite/libffi.call/pyobjc-tc.c (main): Cast the result to silence
+-	gcc.
+-	* testsuite/libffi.call/return_fl2.c (return_fl): Add the note mentioned
+-	in the last commit for this test case in the test case itself.
+-	* testsuite/libffi.call/closure_fn0.c (closure_test_fn0): Mark cif as
+-	unused.
+-	* testsuite/libffi.call/closure_fn1.c (closure_test_fn1): Likewise.
+-	* testsuite/libffi.call/closure_fn2.c (closure_test_fn2): Likewise.
+-	* testsuite/libffi.call/closure_fn3.c (closure_test_fn3): Likewise.
+-	* testsuite/libffi.call/closure_fn4.c (closure_test_fn0): Likewise.
+-	* testsuite/libffi.call/closure_fn5.c (closure_test_fn5): Likewise.
+-	* testsuite/libffi.call/closure_fn6.c (closure_test_fn0): Likewise.
+-
+-2006-02-22  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/sysv.S: Fix register numbers in the FDE for
+-	ffi_closure_SYSV.
+-
+-2006-02-20  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/return_fl2.c (return_fl): Remove static
+-	declaration to avoid a false negative on ix86. See PR323.
+-
+-2006-02-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/ffi.c (ffi_closure_helper_SYSV): Remove unused variable
+-	and cast integer to void * if needed.  Update the pointer to
+-	the FP register saved area correctly.
+-
+-2006-02-17  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/nested_struct6.c: XFAIL this test until PR25630
+-	is fixed.
+-	* testsuite/libffi.call/nested_struct4.c: Likewise.
+-
+-2006-02-16  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/return_dbl.c: New test case.
+-	* testsuite/libffi.call/return_dbl1.c: Likewise.
+-	* testsuite/libffi.call/return_dbl2.c: Likewise.
+-	* testsuite/libffi.call/return_fl.c: Likewise.
+-	* testsuite/libffi.call/return_fl1.c: Likewise.
+-	* testsuite/libffi.call/return_fl2.c: Likewise.
+-	* testsuite/libffi.call/return_fl3.c: Likewise.
+-	* testsuite/libffi.call/closure_fn6.c: Likewise.
+-
+-	* testsuite/libffi.call/nested_struct2.c: Remove ffi_type_mylong
+-	definition.
+-	* testsuite/libffi.call/ffitest.h: Add ffi_type_mylong definition
+-	here to be used by other test cases too.
+-
+-	* testsuite/libffi.call/nested_struct10.c: New test case.
+-	* testsuite/libffi.call/nested_struct9.c: Likewise.
+-	* testsuite/libffi.call/nested_struct8.c: Likewise.
+-	* testsuite/libffi.call/nested_struct7.c: Likewise.
+-	* testsuite/libffi.call/nested_struct6.c: Likewise.
+-	* testsuite/libffi.call/nested_struct5.c: Likewise.
+-	* testsuite/libffi.call/nested_struct4.c: Likewise.
+-
+-2006-01-21  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* configure.ac: Enable libffi for sparc64-*-freebsd*.
+-	* configure: Rebuilt.
+-
+-2006-01-18  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/powerpc/sysv.S (smst_two_register): Don't call __ashldi3,
+-	instead do the shifting inline.
+-	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't compute %r5
+-	shift count unconditionally.  Simplify load sequences for 1, 2, 3, 4
+-	and 8 byte structs, for the remaining struct sizes don't call
+-	__lshrdi3, instead do the shifting inline.
+-
+-2005-12-07  Thiemo Seufer  <ths@networkno.de>
+-
+-	* src/mips/ffitarget.h: Remove obsolete sgidefs.h include. Add
+-	missing parentheses.
+-	* src/mips/o32.S (ffi_call_O32): Code formatting. Define
+-	and use A3_OFF, FP_OFF, RA_OFF. Micro-optimizations.
+-	(ffi_closure_O32): Likewise, but with newly defined A3_OFF2,
+-	A2_OFF2, A1_OFF2, A0_OFF2, RA_OFF2, FP_OFF2, S0_OFF2, GP_OFF2,
+-	V1_OFF2, V0_OFF2, FA_1_1_OFF2, FA_1_0_OFF2, FA_0_1_OFF2,
+-	FA_0_0_OFF2.
+-	* src/mips/ffi.c (ffi_prep_args): Code formatting. Fix
+-	endianness bugs.
+-	(ffi_prep_closure): Improve trampoline instruction scheduling.
+-	(ffi_closure_mips_inner_O32): Fix endianness bugs.
+-
+-2005-12-03  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/powerpc/ffi.c: Formatting.
+-	(ffi_prep_args_SYSV): Avoid possible aliasing problems by using unions.
+-	(ffi_prep_args64): Likewise.
+-
+-2005-09-30  Geoffrey Keating  <geoffk@apple.com>
+-
+-	* testsuite/lib/libffi-dg.exp (libffi_target_compile): For
+-	darwin, use -shared-libgcc not -lgcc_s, and explain why.
+-
+-2005-09-26  Tom Tromey  <tromey@redhat.com>
+-
+-	* testsuite/libffi.call/float1.c (value_type): New typedef.
+-	(CANARY): New define.
+-	(main): Check for result buffer overflow.
+-	* src/powerpc/linux64.S: Handle linux64 long double returns.
+-	* src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant.
+-	(ffi_prep_cif_machdep): Handle linux64 long double returns.
+-
+-2005-08-25  Alan Modra  <amodra@bigpond.net.au>
+-
+-	PR target/23404
+-	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack
+-	homed fp args.
+-	(ffi_status ffi_prep_cif_machdep): Correct stack sizing for same.
+-
+-2005-08-11  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test.
+-	(AH_BOTTOM): Add FFI_HIDDEN definition.
+-	* configure: Rebuilt.
+-	* fficonfig.h.in: Rebuilt.
+-	* src/powerpc/ffi.c (hidden): Remove.
+-	(ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64,
+-	ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden.
+-	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64,
+-	.ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden.
+-	* src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove,
+-	add FFI_HIDDEN to its prototype.
+-	(ffi_closure_SYSV_inner): New.
+-	* src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New.
+-	* src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New.
+-
+-2005-08-10  Alfred M. Szmidt  <ams@gnu.org>
+-
+-	PR libffi/21819:
+-	* configure: Rebuilt.
+-	* configure.ac: Handle i*86-*-gnu*.
+-
+-2005-08-09  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Use
+-	DW_CFA_offset_extended_sf rather than
+-	DW_CFA_GNU_negative_offset_extended.
+-	* src/powerpc/sysv.S (ffi_call_SYSV): Likewise.
+-
+-2005-07-22  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+-
+-	* src/sh/sysv.S (ffi_call_SYSV): Stop argument popping correctly
+-	on sh3.
+-	(ffi_closure_SYSV): Change the stack layout for sh3 struct argument.
+-	* src/sh/ffi.c (ffi_prep_args): Fix sh3 argument copy, when it is
+-	partially on register.
+-	(ffi_closure_helper_SYSV): Likewise.
+-	(ffi_prep_cif_machdep): Don't set too many cif->flags.
+-
+-2005-07-20  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/ffi.c (ffi_call): Handle small structures correctly.
+-	Remove empty line.
+-	* src/sh64/ffi.c (simple_type): Remove.
+-	(return_type): Handle small structures correctly.
+-	(ffi_prep_args): Likewise.
+-	(ffi_call): Likewise.
+-	(ffi_closure_helper_SYSV): Likewise.
+-	* src/sh64/sysv.S (ffi_call_SYSV): Handle 1, 2 and 4-byte return.
+-	Emit position independent code if PIC and remove wrong datalabel
+-	prefixes from EH data.
+-
+-2005-07-19  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* Makefile.am (nodist_libffi_la_SOURCES): Add POWERPC_FREEBSD.
+-	* Makefile.in: Regenerate.
+-	* include/Makefile.in: Likewise.
+-	* testsuite/Makefile.in: Likewise.
+-	* configure.ac: Add POWERPC_FREEBSD rules.
+-	* configure: Regenerate.
+-	* src/powerpc/ffitarget.h: Add POWERPC_FREEBSD rules.
+-	(FFI_SYSV_TYPE_SMALL_STRUCT): Define.
+-	* src/powerpc/ffi.c: Add flags to handle small structure returns
+-	in ffi_call_SYSV.
+-	(ffi_prep_cif_machdep): Handle small structures for SYSV 4 ABI.
+-	Aka FFI_SYSV.
+-	(ffi_closure_helper_SYSV): Likewise.
+-	* src/powerpc/ppc_closure.S: Add return types for small structures.
+-	* src/powerpc/sysv.S: Add bits to handle small structures for
+-	final SYSV 4 ABI.
+-
+-2005-07-10  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/cls_5_1_byte.c: New test file.
+-	* testsuite/libffi.call/cls_6_1_byte.c: Likewise.
+-	* testsuite/libffi.call/cls_7_1_byte.c: Likewise.
+-
+-2005-07-05  Randolph Chung  <tausq@debian.org>
+-
+-	* src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1
+-	as FFI_TYPE_SMALL_STRUCT3.  Break out handling for 5-7 byte
+-	structures.  Kill compilation warnings.
+-	(ffi_closure_inner_LINUX): Print return values as hex in debug
+-	message.  Rename FFI_TYPE_SMALL_STRUCT1 as FFI_TYPE_SMALL_STRUCT3.
+-	Properly handle 5-7 byte structure returns.
+-	* src/pa/ffitarget.h (FFI_TYPE_SMALL_STRUCT1)
+-	(FFI_TYPE_SMALL_STRUCT2): Remove.
+-	(FFI_TYPE_SMALL_STRUCT3, FFI_TYPE_SMALL_STRUCT5)
+-	(FFI_TYPE_SMALL_STRUCT6, FFI_TYPE_SMALL_STRUCT7): Define.
+-	* src/pa/linux.S: Mark source file as using PA1.1 assembly.
+-	(checksmst1, checksmst2): Remove.
+-	(checksmst3): Optimize handling of 3-byte struct returns.
+-	(checksmst567): Properly handle 5-7 byte struct returns.
+-
+-2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	PR libgcj/21943
+-	* src/mips/n32.S: Enforce PIC code.
+-	* src/mips/o32.S: Likewise.
+-
+-2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* configure.ac: Treat i*86-*-solaris2.10 and up as X86_64.
+-	* configure: Regenerate.
+-
+-2005-06-01  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET
+-	to call ffi_closure_helper_SYSV.  Append @local instead.
+-	* src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV.
+-
+-2005-05-17  Kelley Cook  <kcook@gcc.gnu.org>
+-
+-	* configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
+-	Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
+-	* Makefile.am (ACLOCAL_AMFLAGS): Remove -I ../config.
+-	* aclocal.m4, configure, fficonfig.h.in, Makefile.in,
+-	include/Makefile.in, testsuite/Makefile.in: Regenerate.
+-
+-2005-05-09  Mike Stump  <mrs@apple.com>
+-
+-	* configure: Regenerate.
+-
+-2005-05-08  Richard Henderson  <rth@redhat.com>
+-
+-	PR libffi/21285
+-	* src/alpha/osf.S: Update unwind into to match code.
+-
+-2005-05-04  Andreas Degert <ad@papyrus-gmbh.de>
+-	    Richard Henderson  <rth@redhat.com>
+-
+-	* src/x86/ffi64.c (ffi_prep_cif_machdep): Save sse-used flag in
+-	bit 11 of flags.
+-	(ffi_call): Mask return type field.  Pass ssecount to ffi_call_unix64.
+-	(ffi_prep_closure): Set carry bit if sse-used flag set.
+-	* src/x86/unix64.S (ffi_call_unix64): Add ssecount argument.
+-	Only load sse registers if ssecount non-zero.
+-	(ffi_closure_unix64): Only save sse registers if carry set on entry.
+-
+-2005-04-29  Ralf Corsepius  <ralf.corsepius@rtems.org>
+-
+-	* configure.ac: Add i*86-*-rtems*, sparc*-*-rtems*,
+-	powerpc-*rtems*, arm*-*-rtems*, sh-*-rtems*.
+-	* configure: Regenerate.
+-
+-2005-04-20  Hans-Peter Nilsson  <hp@axis.com>
+-
+-	* testsuite/lib/libffi-dg.exp (libffi-dg-test-1): In regsub use,
+-	have Tcl8.3-compatible intermediate variable.
+-
+-2005-04-18  Simon Posnjak <simon.posnjak@siol.net>
+-	    Hans-Peter Nilsson  <hp@axis.com>
+-
+-	* Makefile.am: Add CRIS support.
+-	* configure.ac: Likewise.
+-	* Makefile.in, configure, testsuite/Makefile.in,
+-	include/Makefile.in: Regenerate.
+-	* src/cris: New directory.
+-	* src/cris/ffi.c, src/cris/sysv.S, src/cris/ffitarget.h: New files.
+-	* src/prep_cif.c (ffi_prep_cif): Wrap in #ifndef __CRIS__.
+-
+-	* testsuite/lib/libffi-dg.exp (libffi-dg-test-1): Replace \n with
+-	\r?\n in output tests.
+-
+-2005-04-12  Mike Stump  <mrs@apple.com>
+-
+-	* configure: Regenerate.
+-
+-2005-03-30  Hans Boehm  <Hans.Boehm@hp.com>
+-
+-	* src/ia64/ffitarget.h (ffi_arg): Use long long instead of DI.
+-
+-2005-03-30  Steve Ellcey  <sje@cup.hp.com>
+-
+-	* src/ia64/ffitarget.h (ffi_arg) ADD DI attribute.
+-	(ffi_sarg) Ditto.
+-	* src/ia64/unix.S (ffi_closure_unix): Extend gp
+-	to 64 bits in ILP32 mode.
+-	Load 64 bits even for short data.
+-
+-2005-03-23  Mike Stump  <mrs@apple.com>
+-
+-	* src/powerpc/darwin.S: Update for -m64 multilib.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-
+-2005-03-21  Zack Weinberg  <zack@codesourcery.com>
+-
+-	* configure.ac: Do not invoke TL_AC_GCC_VERSION.
+-	Do not set tool_include_dir.
+-	* aclocal.m4, configure, Makefile.in, testsuite/Makefile.in:
+-	Regenerate.
+-	* include/Makefile.am: Set gcc_version and toollibffidir.
+-	* include/Makefile.in: Regenerate.
+-
+-2005-02-22  Andrew Haley  <aph@redhat.com>
+-
+-	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to
+-	odd-numbered register pairs for 64-bit integer types.
+-
+-2005-02-23  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	PR libffi/20104
+-	* testsuite/libffi.call/return_ll1.c: New test case.
+-
+-2005-02-11  Janis Johnson  <janis187@us.ibm.com>
+-
+-	* testsuite/libffi.call/cls_align_longdouble.c: Remove dg-options.
+-	* testsuite/libffi.call/float.c: Ditto.
+-	* testsuite/libffi.call/float2.c: Ditto.
+-	* testsuite/libffi.call/float3.c: Ditto.
+-
+-2005-02-08  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/frv/ffitarget.h: Remove PPC stuff which does not belong to frv.
+-
+-2005-01-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
+-
+-	* testsuite/libffi.special/special.exp (cxx_options): Add
+-	-shared-libgcc.
+-
+-2004-12-31  Richard Henderson  <rth@redhat.com>
+-
+-	* src/types.c (FFI_AGGREGATE_TYPEDEF): Remove.
+-	(FFI_TYPEDEF): Rename from FFI_INTEGRAL_TYPEDEF.  Replace size and
+-	offset parameters with a type parameter; deduce size and structure
+-	alignment.  Update all users.
+-
+-2004-12-31  Richard Henderson  <rth@redhat.com>
+-
+-	* src/types.c (FFI_TYPE_POINTER): Define with sizeof.
+-	(FFI_TYPE_LONGDOUBLE): Fix for ia64.
+-	* src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move
+-	into ffi_prep_closure.
+-	* src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite
+-	from scratch.
+-
+-2004-12-27  Richard Henderson  <rth@redhat.com>
+-
+-	* src/x86/unix64.S: Fix typo in unwind info.
+-
+-2004-12-25  Richard Henderson  <rth@redhat.com>
+-
+-	* src/x86/ffi64.c (struct register_args): Rename from stackLayout.
+-	(enum x86_64_reg_class): Add X86_64_COMPLEX_X87_CLASS.
+-	(merge_classes): Check for it.
+-	(SSE_CLASS_P): New.
+-	(classify_argument): Pass byte_offset by value; perform all updates
+-	inside struct case.
+-	(examine_argument): Add classes argument; handle
+-	X86_64_COMPLEX_X87_CLASS.
+-	(ffi_prep_args): Merge into ...
+-	(ffi_call): ... here.  Share stack frame with ffi_call_unix64.
+-	(ffi_prep_cif_machdep): Setup cif->flags for proper structure return.
+-	(ffi_fill_return_value): Remove.
+-	(ffi_prep_closure): Remove dead assert.
+-	(ffi_closure_unix64_inner): Rename from ffi_closure_UNIX64_inner.
+-	Rewrite to use struct register_args instead of va_list.  Create
+-	flags for handling structure returns.
+-	* src/x86/unix64.S: Remove dead strings.
+-	(ffi_call_unix64): Rename from ffi_call_UNIX64.  Rewrite to share
+-	stack frame with ffi_call.  Handle structure returns properly.
+-	(float2sse, floatfloat2sse, double2sse): Remove.
+-	(sse2float, sse2double, sse2floatfloat): Remove.
+-	(ffi_closure_unix64): Rename from ffi_closure_UNIX64.  Rewrite
+-	to handle structure returns properly.
+-
+-2004-12-08  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* Makefile.am (AM_MAKEFLAGS): Remove duplicate LIBCFLAGS and
+-	PICFLAG.
+-	* Makefile.in: Regenerated.
+-
+-2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
+-
+-	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
+-	* configure, aclocal.m4, Makefile.in: Regenerate.
+-	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
+-
+-2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
+-
+-	* configure: Regenerate for libtool change.
+-
+-2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
+-
+-	* configure: Regenerate for libtool reversion.
+-
+-2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
+-
+-	* configure: Regenerate for libtool change.
+-
+-2004-11-23  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+-
+-	* testsuite/lib/libffi-dg.exp: Use new procs in target-libpath.exp.
+-
+-2004-11-23  Richard Sandiford  <rsandifo@redhat.com>
+-
+-	* src/mips/o32.S (ffi_call_O32, ffi_closure_O32): Use jalr instead
+-	of jal.  Use an absolute encoding for the frame information.
+-
+-2004-11-23  Kelley Cook  <kcook@gcc.gnu.org>
+-
+-	* Makefile.am: Remove no-dependencies.  Add ACLOCAL_AMFLAGS.
+-	* acinclude.m4: Delete logic for sincludes.
+-	* aclocal.m4, Makefile.in, configure: Regenerate.
+-	* include/Makefile: Likewise.
+-	* testsuite/Makefile: Likewise.
+-
+-2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+-
+-	* src/sparc/ffi.c (ffi_prep_closure): Align doubles and 64-bit integers
+-	on a 8-byte boundary.
+-	* src/sparc/v8.S (ffi_closure_v8): Reserve frame space for arguments.
+-
+-2004-10-27  Richard Earnshaw  <rearnsha@arm.com>
+-
+-	* src/arm/ffi.c (ffi_prep_cif_machdep): Handle functions that return
+-	long long values.  Round stack allocation to a multiple of 8 bytes
+-	for ATPCS compatibility.
+-	* src/arm/sysv.S (ffi_call_SYSV): Rework to avoid use of APCS register
+-	names.  Handle returning long long types.  Add Thumb and interworking
+-	support.  Improve soft-float code.
+-
+-2004-10-27  Richard Earnshaw  <rearnsha@arm.com>
+-
+-	* testsuite/lib/libffi-db.exp (load_gcc_lib): New function.
+-	(libffi_exit): New function.
+-	(libffi_init): Build the testglue wrapper if needed.
+-
+-2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
+-
+-	PR other/18138
+-	* testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc.
+-
+-2004-10-25  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+-
+-	* src/m32r/libffitarget.h (FFI_CLOSURES): Set to 0.
+-
+-2004-10-20  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/sysv.S (ffi_call_SYSV): Don't align for double data.
+-	* testsuite/libffi.call/float3.c: New test case.
+-
+-2004-10-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/ffi.c (ffi_prep_closure): Set T bit in trampoline for
+-	the function returning a structure pointed with R2.
+-	* src/sh/sysv.S (ffi_closure_SYSV): Use R2 as the pointer to
+-	the structure return value if T bit set.  Emit position
+-	independent code and EH data if PIC.
+-
+-2004-10-13  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+-
+-	* Makefile.am: Add m32r support.
+-	* configure.ac: Likewise.
+-	* Makefile.in: Regenerate.
+-	* confiugre: Regenerate.
+-	* src/types.c: Add m32r port to FFI_INTERNAL_TYPEDEF
+-	(uint64, sint64, double, longdouble)
+-	* src/m32r: New directory.
+-	* src/m32r/ffi.c: New file.
+-	* src/m32r/sysv.S: Likewise.
+-	* src/m32r/ffitarget.h: Likewise.
+-
+-2004-10-02  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* testsuite/libffi.call/negint.c: New test case.
+-
+-2004-09-14  H.J. Lu  <hongjiu.lu@intel.com>
+-
+-	PR libgcj/17465
+-	* testsuite/lib/libffi-dg.exp: Don't use global ld_library_path.
+-	Set up LD_LIBRARY_PATH, SHLIB_PATH, LD_LIBRARYN32_PATH,
+-	LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and
+-	DYLD_LIBRARY_PATH.
+-
+-2004-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/many_win32.c: Remove whitespaces.
+-	* testsuite/libffi.call/promotion.c: Likewise.
+-	* testsuite/libffi.call/return_ll.c: Remove unused var. Cleanup
+-	whitespaces.
+-	* testsuite/libffi.call/return_sc.c: Likewise.
+-	* testsuite/libffi.call/return_uc.c: Likewise.
+-
+-2004-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/darwin.S: Fix comments and identation.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-
+-2004-09-02  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/ffi_darwin.c: Add flag for longdouble return values.
+-	(ffi_prep_args): Handle longdouble arguments.
+-	(ffi_prep_cif_machdep): Set flags for longdouble. Calculate space for
+-	longdouble.
+-	(ffi_closure_helper_DARWIN): Add closure handling for longdouble.
+-	* src/powerpc/darwin.S (_ffi_call_DARWIN): Add handling of longdouble
+-	values.
+-	* src/powerpc/darwin_closure.S (_ffi_closure_ASM): Likewise.
+-	* src/types.c: Defined longdouble size and alignment for darwin.
+-
+-2004-09-02  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/aix.S: Remove whitespaces.
+-	* src/powerpc/aix_closure.S: Likewise.
+-	* src/powerpc/asm.h: Likewise.
+-	* src/powerpc/ffi.c: Likewise.
+-	* src/powerpc/ffitarget.h: Likewise.
+-	* src/powerpc/linux64.S: Likewise.
+-	* src/powerpc/linux64_closure.S: Likewise.
+-	* src/powerpc/ppc_closure.S: Likewise.
+-	* src/powerpc/sysv.S: Likewise.
+-
+-2004-08-30  Anthony Green  <green@redhat.com>
+-
+-	* Makefile.am: Add frv support.
+-	* Makefile.in, testsuite/Makefile.in: Rebuilt.
+-	* configure.ac: Read configure.host.
+-	* configure.in: Read configure.host.
+-	* configure.host: New file.  frv-elf needs libgloss.
+-	* include/ffi.h.in: Force ffi_closure to have a nice big (8)
+-	alignment.  This is needed to frv and shouldn't harm the others.
+-	* include/ffi_common.h (ALIGN_DOWN): New macro.
+-	* src/frv/ffi.c, src/frv/ffitarget.h, src/frv/eabi.S: New files.
+-
+-2004-08-24  David Daney  <daney@avtrex.com>
+-
+-	* testsuite/libffi.call/closure_fn0.c: Xfail mips64* instead of mips*.
+-	* testsuite/libffi.call/closure_fn1.c: Likewise.
+-	* testsuite/libffi.call/closure_fn2.c  Likewise.
+-	* testsuite/libffi.call/closure_fn3.c: Likewise.
+-	* testsuite/libffi.call/closure_fn4.c: Likewise.
+-	* testsuite/libffi.call/closure_fn5.c: Likewise.
+-	* testsuite/libffi.call/cls_18byte.c: Likewise.
+-	* testsuite/libffi.call/cls_19byte.c: Likewise.
+-	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_24byte.c: Likewise.
+-	* testsuite/libffi.call/cls_2byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_4byte.c: Likewise.
+-	* testsuite/libffi.call/cls_64byte.c: Likewise.
+-	* testsuite/libffi.call/cls_6byte.c: Likewise.
+-	* testsuite/libffi.call/cls_7byte.c: Likewise.
+-	* testsuite/libffi.call/cls_8byte.c: Likewise.
+-	* testsuite/libffi.call/cls_9byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_9byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_align_double.c: Likewise.
+-	* testsuite/libffi.call/cls_align_float.c: Likewise.
+-	* testsuite/libffi.call/cls_align_longdouble.c: Likewise.
+-	* testsuite/libffi.call/cls_align_pointer.c: Likewise.
+-	* testsuite/libffi.call/cls_align_sint16.c: Likewise.
+-	* testsuite/libffi.call/cls_align_sint32.c: Likewise.
+-	* testsuite/libffi.call/cls_align_sint64.c: Likewise.
+-	* testsuite/libffi.call/cls_align_uint16.c: Likewise.
+-	* testsuite/libffi.call/cls_align_uint32.c: Likewise.
+-	* testsuite/libffi.call/cls_align_uint64.c: Likewise.
+-	* testsuite/libffi.call/cls_double.c: Likewise.
+-	* testsuite/libffi.call/cls_float.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_schar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_sshort.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_sshortchar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_ushort.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_ushortchar.c: Likewise.
+-	* testsuite/libffi.call/cls_schar.c: Likewise.
+-	* testsuite/libffi.call/cls_sint.c: Likewise.
+-	* testsuite/libffi.call/cls_sshort.c: Likewise.
+-	* testsuite/libffi.call/cls_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_uint.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/cls_ushort.c: Likewise.
+-	* testsuite/libffi.call/nested_struct.c: Likewise.
+-	* testsuite/libffi.call/nested_struct1.c: Likewise.
+-	* testsuite/libffi.call/nested_struct2.c: Likewise.
+-	* testsuite/libffi.call/nested_struct3.c: Likewise.
+-	* testsuite/libffi.call/problem1.c: Likewise.
+-	* testsuite/libffi.special/unwindtest.cc: Likewise.
+-	* testsuite/libffi.call/cls_12byte.c: Likewise and set return value
+-	to zero.
+-	* testsuite/libffi.call/cls_16byte.c: Likewise.
+-	* testsuite/libffi.call/cls_5byte.c: Likewise.
+-
+-2004-08-23  David Daney <daney@avtrex.com>
+-
+-	PR libgcj/13141
+-	* src/mips/ffitarget.h (FFI_O32_SOFT_FLOAT): New ABI.
+-	* src/mips/ffi.c (ffi_prep_args): Fix alignment calculation.
+-	(ffi_prep_cif_machdep): Handle FFI_O32_SOFT_FLOAT floating point
+-	parameters and return types.
+-	(ffi_call): Handle FFI_O32_SOFT_FLOAT ABI.
+-	(ffi_prep_closure): Ditto.
+-	(ffi_closure_mips_inner_O32): Handle FFI_O32_SOFT_FLOAT ABI, fix
+-	alignment calculations.
+-	* src/mips/o32.S (ffi_closure_O32): Don't use floating point
+-	instructions if FFI_O32_SOFT_FLOAT, make stack frame ABI compliant.
+-
+-2004-08-14  Casey Marshall <csm@gnu.org>
+-
+-	* src/mips/ffi.c (ffi_pref_cif_machdep): set `cif->flags' to
+-	contain `FFI_TYPE_UINT64' as return type for any 64-bit
+-	integer (O32 ABI only).
+-	(ffi_prep_closure): new function.
+-	(ffi_closure_mips_inner_O32): new function.
+-	* src/mips/ffitarget.h: Define `FFI_CLOSURES' and
+-	`FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32.
+-	* src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return
+-	64 bit integers correctly.
+-	(ffi_closure_O32): new function.
+-	Added DWARF-2 unwind info for both functions.
+-
+-2004-08-10  Andrew Haley  <aph@redhat.com>
+-
+-	* src/x86/ffi64.c (ffi_prep_args ): 8-align all stack arguments.
+-
+-2004-08-01  Robert Millan  <robertmh@gnu.org>
+-
+-	* configure.ac: Detect knetbsd-gnu and kfreebsd-gnu.
+-	* configure: Regenerate.
+-
+-2004-07-30  Maciej W. Rozycki  <macro@linux-mips.org>
+-
+-	* acinclude.m4 (AC_FUNC_MMAP_BLACKLIST): Check for <sys/mman.h>
+-	and mmap() explicitly instead of relying on preset autoconf cache
+-	variables.
+-	* aclocal.m4: Regenerate.
+-	* configure: Regenerate.
+-
+-2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* src/s390/ffi.c (ffi_prep_args): Fix C aliasing violation.
+-	(ffi_check_float_struct): Remove unused prototype.
+-
+-2004-06-30  Geoffrey Keating  <geoffk@apple.com>
+-
+-	* src/powerpc/ffi_darwin.c (flush_icache): ';' is a comment
+-	character on Darwin, use '\n\t' instead.
+-
+-2004-06-26  Matthias Klose  <doko@debian.org>
+-
+-	* libtool-version: Fix typo in revision/age.
+-
+-2004-06-17  Matthias Klose  <doko@debian.org>
+-
+-	* libtool-version: New.
+-	* Makefile.am (libffi_la_LDFLAGS): Use -version-info for soname.
+-	* Makefile.in: Regenerate.
+-
+-2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+-
+-	* Makefile.am: Remove useless multilib rules.
+-	* Makefile.in: Regenerate.
+-	* aclocal.m4: Regenerate with automake 1.8.5.
+-	* configure.ac: Remove useless multilib configury.
+-	* configure: Regenerate.
+-
+-2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+-
+-	* .cvsignore: New file.
+-
+-2004-06-10  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/ia64/unix.S (ffi_call_unix): Insert group barrier break
+-	fp_done.
+-	(ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever
+-	changed from 8.
+-
+-2004-06-06  Sean McNeil  <sean@mcneil.com>
+-
+-	* configure.ac: Add x86_64-*-freebsd* support.
+-	* configure: Regenerate.
+-
+-2004-04-26  Joe Buck <jbuck@welsh-buck.org>
+-
+-	Bug 15093
+-	* configure.ac: Test for existence of mmap and sys/mman.h before
+-	checking blacklist.  Fix suggested by Jim Wilson.
+-	* configure: Regenerate.
+-
+-2004-04-26  Matt Austern  <austern@apple.com>
+-
+-	* src/powerpc/darwin.S: Go through a non-lazy pointer for initial
+-	FDE location.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-
+-2004-04-24  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization
+-	error. Reported by Thomas Heller <theller@python.net>.
+-	* testsuite/libffi.call/cls_multi_sshort.c (main): Likewise.
+-	* testsuite/libffi.call/cls_multi_ushort.c (main): Likewise.
+-
+-2004-03-20  Matthias Klose  <doko@debian.org>
+-
+-	* src/pa/linux.S: Fix typo.
+-
+-2004-03-19  Matthias Klose  <doko@debian.org>
+-
+-	* Makefile.am: Update.
+-	* Makefile.in: Regenerate.
+-	* src/pa/ffi.h.in: Remove.
+-	* src/pa/ffitarget.h: New file.
+-
+-2004-02-10  Randolph Chung  <tausq@debian.org>
+-
+-	* Makefile.am: Add PA support.
+-	* Makefile.in: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* configure.ac: Add PA target.
+-	* configure: Regenerate.
+-	* src/pa/ffi.c: New file.
+-	* src/pa/ffi.h.in: Add PA support.
+-	* src/pa/linux.S: New file.
+-	* prep_cif.c: Add PA support.
+-
+-2004-03-16  Hosaka Yuji  <hos@tamanegi.org>
+-
+-	* src/types.c: Fix alignment size of X86_WIN32 case int64 and
+-	double.
+-	* src/x86/ffi.c (ffi_prep_args): Replace ecif->cif->rtype->type
+-	with ecif->cif->flags.
+-	(ffi_call, ffi_prep_incoming_args_SYSV): Replace cif->rtype->type
+-	with cif->flags.
+-	(ffi_prep_cif_machdep): Add X86_WIN32 struct case.
+-	(ffi_closure_SYSV): Add 1 or 2-bytes struct case for X86_WIN32.
+-	* src/x86/win32.S (retstruct1b, retstruct2b, sc_retstruct1b,
+-	sc_retstruct2b): Add for 1 or 2-bytes struct case.
+-
+-2004-03-15 Kelley Cook <kcook@gcc.gnu.org>
+-
+-	* configure.in: Rename file to ...
+-	* configure.ac: ... this.
+-	* fficonfig.h.in: Regenerate.
+-	* Makefile.in: Regenerate.
+-	* include/Makefile.in: Regenerate.
+-	* testsuite/Makefile.in: Regenerate.
+-
+-2004-03-12  Matt Austern  <austern@apple.com>
+-
+-	* src/powerpc/darwin.S: Fix EH information so it corresponds to
+-	changes in EH format resulting from addition of linkonce support.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-
+-2004-03-11  Andreas Tobler  <a.tobler@schweiz.ch>
+-	    Paolo Bonzini  <bonzini@gnu.org>
+-
+-	* Makefile.am (AUTOMAKE_OPTIONS): Set them.
+-	Remove VPATH. Remove rules for object files. Remove multilib support.
+-	(AM_CCASFLAGS): Add.
+-	* configure.in (AC_CONFIG_HEADERS): Relace AM_CONFIG_HEADER.
+-	(AC_PREREQ): Bump version to 2.59.
+-	(AC_INIT): Fill with version info and bug address.
+-	(ORIGINAL_LD_FOR_MULTILIBS): Remove.
+-	(AM_ENABLE_MULTILIB): Use this instead of AC_ARG_ENABLE.
+-	De-precious CC so that the right flags are passed down to multilibs.
+-	(AC_MSG_ERROR): Replace obsolete macro AC_ERROR.
+-	(AC_CONFIG_FILES): Replace obsolete macro AC_LINK_FILES.
+-	(AC_OUTPUT): Reorganize the output with AC_CONFIG_COMMANDS.
+-	* configure: Rebuilt.
+-	* aclocal.m4: Likewise.
+-	* Makefile.in, include/Makefile.in, testsuite/Makefile.in: Likewise.
+-	* fficonfig.h.in: Likewise.
+-
+-2004-03-11  Andreas Schwab  <schwab@suse.de>
+-
+-	* src/ia64/ffi.c (ffi_prep_incoming_args_UNIX): Get floating point
+-	arguments from fp registers only for the first 8 parameter slots.
+-	Don't convert a float parameter when passed in memory.
+-
+-2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
+-
+-	* configure: Regenerate for config/accross.m4 correction.
+-
+-2004-02-25  Matt Kraai  <kraai@alumni.cmu.edu>
+-
+-	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Change
+-	ecif->cif->bytes to bytes.
+-	(ffi_prep_cif_machdep): Add braces around nested if statement.
+-
+-2004-02-09  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/types.c (pointer): POWERPC64 has 8 byte pointers.
+-
+-	* src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling.
+-	(ffi_closure_helper_LINUX64): Fix typo.
+-	* testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128
+-	for powerpc64-*-*.
+-	* testsuite/libffi.call/float.c: Likewise.
+-	* testsuite/libffi.call/float2.c: Likewise.
+-
+-2004-02-08  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/powerpc/ffi.c (ffi_prep_cif_machdep <FFI_LINUX64>): Correct
+-	long double function return and long double arg handling.
+-	(ffi_closure_helper_LINUX64): Formatting.  Delete unused "ng" var.
+-	Use "end_pfr" instead of "nf".  Correct long double handling.
+-	Localise "temp".
+-	* src/powerpc/linux64.S (ffi_call_LINUX64): Save f2 long double
+-	return value.
+-	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate
+-	space for long double return value.  Adjust stack frame and offsets.
+-	Load f2 long double return.
+-
+-2004-02-07  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/types.c: Use 16 byte long double for POWERPC64.
+-
+-2004-01-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
+-
+-	* src/sparc/ffi.c (ffi_prep_args_v9): Shift the parameter array
+-	when the structure return address is passed in %o0.
+-	(ffi_V9_return_struct): Rename into ffi_v9_layout_struct.
+-	(ffi_v9_layout_struct): Align the field following a nested structure
+-	on a word boundary.  Use memmove instead of memcpy.
+-	(ffi_call): Update call to ffi_V9_return_struct.
+-	(ffi_prep_closure): Define 'ctx' only for V8.
+-	(ffi_closure_sparc_inner): Clone into ffi_closure_sparc_inner_v8
+-	and ffi_closure_sparc_inner_v9.
+-	(ffi_closure_sparc_inner_v8): Return long doubles by reference.
+-	Always skip the structure return address.  For structures and long
+-	doubles, copy the argument directly.
+-	(ffi_closure_sparc_inner_v9): Skip the structure return address only
+-	if required.  Shift the maximum floating-point slot accordingly.  For
+-	big structures, copy the argument directly; otherwise, left-justify the
+-	argument and call ffi_v9_layout_struct to lay out the structure on
+-	the stack.
+-	* src/sparc/v8.S: Undef STACKFRAME before defining it.
+-	(ffi_closure_v8): Pass the structure return address.  Update call to
+-	ffi_closure_sparc_inner_v8.  Short-circuit FFI_TYPE_INT handling.
+-	Skip the 'unimp' insn when returning long doubles and structures.
+-	* src/sparc/v9.S: Undef STACKFRAME before defining it.
+-	(ffi_closure_v9): Increase the frame size by 2 words.  Short-circuit
+-	FFI_TYPE_INT handling.  Load structures both in integers and
+-	floating-point registers on return.
+-	* README: Update status of the SPARC port.
+-
+-2004-01-24  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/pyobjc-tc.c (main): Treat result value
+-	as of type ffi_arg.
+-	* testsuite/libffi.call/struct3.c (main): Fix CHECK.
+-
+-2004-01-22  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Treat result
+-	value as of type ffi_arg, not unsigned int.
+-
+-2004-01-21  Michael Ritzert  <ritzert@t-online.de>
+-
+-	* ffi64.c (ffi_prep_args): Cast the RHS of an assignment instead
+-	of the LHS.
+-
+-2004-01-12  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_32 for
+-	Solaris.
+-
+-2004-01-08  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* testsuite/libffi.call/ffitest.h (allocate_mmap): Cast MAP_FAILED
+-	to void *.
+-
+-2003-12-10  Richard Henderson  <rth@redhat.com>
+-
+-	* testsuite/libffi.call/cls_align_pointer.c: Cast pointers to
+-	size_t instead of int.
+-
+-2003-12-04  Hosaka Yuji  <hos@tamanegi.org>
+-
+-	* testsuite/libffi.call/many_win32.c: Include <float.h>.
+-	* testsuite/libffi.call/many_win32.c (main): Replace variable
+-	int i with unsigned long ul.
+-
+-	* testsuite/libffi.call/cls_align_uint64.c: New test case.
+-	* testsuite/libffi.call/cls_align_sint64.c: Likewise.
+-	* testsuite/libffi.call/cls_align_uint32.c: Likewise.
+-	* testsuite/libffi.call/cls_align_sint32.c: Likewise.
+-	* testsuite/libffi.call/cls_align_uint16.c: Likewise.
+-	* testsuite/libffi.call/cls_align_sint16.c: Likewise.
+-	* testsuite/libffi.call/cls_align_float.c: Likewise.
+-	* testsuite/libffi.call/cls_align_double.c: Likewise.
+-	* testsuite/libffi.call/cls_align_longdouble.c: Likewise.
+-	* testsuite/libffi.call/cls_align_pointer.c: Likewise.
+-
+-2003-12-02  Hosaka Yuji  <hos@tamanegi.org>
+-
+-	PR other/13221
+-	* src/x86/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV):
+-	Align arguments to 32 bits.
+-
+-2003-12-01  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	PR other/13221
+-	* testsuite/libffi.call/cls_multi_sshort.c: New test case.
+-	* testsuite/libffi.call/cls_multi_sshortchar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_schar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_ushortchar.c: Likewise.
+-	* testsuite/libffi.call/cls_multi_ushort.c: Likewise.
+-
+-	* testsuite/libffi.special/unwindtest.cc: Cosmetics.
+-
+-2003-11-26  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+-
+-	* testsuite/libffi.call/ffitest.h: Include <fcntl.h>.
+-	* testsuite/libffi.special/ffitestcxx.h: Likewise.
+-
+-2003-11-22  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* Makefile.in: Rebuilt.
+-	* configure: Likewise.
+-	* testsuite/libffi.special/unwindtest.cc: Convert the mmap to
+-	the right type.
+-
+-2003-11-21  Andreas Jaeger  <aj@suse.de>
+-	    Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* acinclude.m4: Add AC_FUNC_MMAP_BLACKLIST.
+-	* configure.in: Call AC_FUNC_MMAP_BLACKLIST.
+-	* Makefile.in: Rebuilt.
+-	* aclocal.m4: Likewise.
+-	* configure: Likewise.
+-	* fficonfig.h.in: Likewise.
+-	* testsuite/lib/libffi-dg.exp: Add include dir.
+-	* testsuite/libffi.call/ffitest.h: Add MMAP definitions.
+-	* testsuite/libffi.special/ffitestcxx.h: Likewise.
+-	* testsuite/libffi.call/closure_fn0.c: Use MMAP functionality
+-	for ffi_closure if available.
+-	* testsuite/libffi.call/closure_fn1.c: Likewise.
+-	* testsuite/libffi.call/closure_fn2.c: Likewise.
+-	* testsuite/libffi.call/closure_fn3.c: Likewise.
+-	* testsuite/libffi.call/closure_fn4.c: Likewise.
+-	* testsuite/libffi.call/closure_fn5.c: Likewise.
+-	* testsuite/libffi.call/cls_12byte.c: Likewise.
+-	* testsuite/libffi.call/cls_16byte.c: Likewise.
+-	* testsuite/libffi.call/cls_18byte.c: Likewise.
+-	* testsuite/libffi.call/cls_19byte.c: Likewise.
+-	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_24byte.c: Likewise.
+-	* testsuite/libffi.call/cls_2byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_4byte.c: Likewise.
+-	* testsuite/libffi.call/cls_5byte.c: Likewise.
+-	* testsuite/libffi.call/cls_64byte.c: Likewise.
+-	* testsuite/libffi.call/cls_6byte.c: Likewise.
+-	* testsuite/libffi.call/cls_7byte.c: Likewise.
+-	* testsuite/libffi.call/cls_8byte.c: Likewise.
+-	* testsuite/libffi.call/cls_9byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_9byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_double.c: Likewise.
+-	* testsuite/libffi.call/cls_float.c: Likewise.
+-	* testsuite/libffi.call/cls_schar.c: Likewise.
+-	* testsuite/libffi.call/cls_sint.c: Likewise.
+-	* testsuite/libffi.call/cls_sshort.c: Likewise.
+-	* testsuite/libffi.call/cls_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_uint.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/cls_ushort.c: Likewise.
+-	* testsuite/libffi.call/nested_struct.c: Likewise.
+-	* testsuite/libffi.call/nested_struct1.c: Likewise.
+-	* testsuite/libffi.call/nested_struct2.c: Likewise.
+-	* testsuite/libffi.call/nested_struct3.c: Likewise.
+-	* testsuite/libffi.call/problem1.c: Likewise.
+-	* testsuite/libffi.special/unwindtest.cc: Likewise.
+-
+-2003-11-20  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/lib/libffi-dg.exp: Make the -lgcc_s conditional.
+-
+-2003-11-19  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/lib/libffi-dg.exp: Add DYLD_LIBRARY_PATH for darwin.
+-	Add -lgcc_s to additional flags.
+-
+-2003-11-12  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* configure.in, include/Makefile.am: PR libgcj/11147, install
+-	the ffitarget.h header file in a gcc versioned and target
+-	dependent place.
+-	* configure: Regenerated.
+-	* Makefile.in, include/Makefile.in: Likewise.
+-	* testsuite/Makefile.in: Likewise.
+-
+-2003-11-09  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/closure_fn0.c: Print result and check
+-	with dg-output to make debugging easier.
+-	* testsuite/libffi.call/closure_fn1.c: Likewise.
+-	* testsuite/libffi.call/closure_fn2.c: Likewise.
+-	* testsuite/libffi.call/closure_fn3.c: Likewise.
+-	* testsuite/libffi.call/closure_fn4.c: Likewise.
+-	* testsuite/libffi.call/closure_fn5.c: Likewise.
+-	* testsuite/libffi.call/cls_12byte.c: Likewise.
+-	* testsuite/libffi.call/cls_16byte.c: Likewise.
+-	* testsuite/libffi.call/cls_18byte.c: Likewise.
+-	* testsuite/libffi.call/cls_19byte.c: Likewise.
+-	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_24byte.c: Likewise.
+-	* testsuite/libffi.call/cls_2byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_4byte.c: Likewise.
+-	* testsuite/libffi.call/cls_5byte.c: Likewise.
+-	* testsuite/libffi.call/cls_64byte.c: Likewise.
+-	* testsuite/libffi.call/cls_6byte.c: Likewise.
+-	* testsuite/libffi.call/cls_7byte.c: Likewise.
+-	* testsuite/libffi.call/cls_8byte.c: Likewise.
+-	* testsuite/libffi.call/cls_9byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_9byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_double.c: Likewise.
+-	* testsuite/libffi.call/cls_float.c: Likewise.
+-	* testsuite/libffi.call/cls_schar.c: Likewise.
+-	* testsuite/libffi.call/cls_sint.c: Likewise.
+-	* testsuite/libffi.call/cls_sshort.c: Likewise.
+-	* testsuite/libffi.call/cls_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_uint.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/cls_ushort.c: Likewise.
+-	* testsuite/libffi.call/problem1.c: Likewise.
+-
+-	* testsuite/libffi.special/unwindtest.cc: Make ffi_closure
+-	static.
+-
+-2003-11-08  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/cls_9byte2.c: New test case.
+-	* testsuite/libffi.call/cls_9byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_64byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_19byte.c: Likewise.
+-	* testsuite/libffi.call/cls_18byte.c: Likewise.
+-	* testsuite/libffi.call/closure_fn4.c: Likewise.
+-	* testsuite/libffi.call/closure_fn5.c: Likewise.
+-	* testsuite/libffi.call/cls_schar.c: Likewise.
+-	* testsuite/libffi.call/cls_sint.c: Likewise.
+-	* testsuite/libffi.call/cls_sshort.c: Likewise.
+-	* testsuite/libffi.call/nested_struct2.c: Likewise.
+-	* testsuite/libffi.call/nested_struct3.c: Likewise.
+-
+-2003-11-08  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/cls_double.c: Do a check on the result.
+-	* testsuite/libffi.call/cls_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_uint.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/cls_ushort.c: Likewise.
+-	* testsuite/libffi.call/return_sc.c: Cleanup whitespaces.
+-
+-2003-11-06  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/prep_cif.c (ffi_prep_cif): Move the validity check after
+-	the initialization.
+-
+-2003-10-23  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/java_raw_api.c (ffi_java_ptrarray_to_raw): Replace
+-	FFI_ASSERT(FALSE) with FFI_ASSERT(0).
+-
+-2003-10-22  David Daney  <ddaney@avtrex.com>
+-
+-	* src/mips/ffitarget.h: Replace undefined UINT32 and friends with
+-	__attribute__((__mode__(__SI__))) and friends.
+-
+-2003-10-22  Andreas Schwab  <schwab@suse.de>
+-
+-	* src/ia64/ffi.c: Replace FALSE/TRUE with false/true.
+-
+-2003-10-21  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* configure.in: AC_LINK_FILES(ffitarget.h).
+-	* configure: Regenerate.
+-	* Makefile.in: Likewise.
+-	* include/Makefile.in: Likewise.
+-	* testsuite/Makefile.in: Likewise.
+-	* fficonfig.h.in: Likewise.
+-
+-2003-10-21  Paolo Bonzini  <bonzini@gnu.org>
+-	    Richard Henderson  <rth@redhat.com>
+-
+-	Avoid that ffi.h includes fficonfig.h.
+-
+-	* Makefile.am (EXTRA_DIST): Include ffitarget.h files
+-	(TARGET_SRC_MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX.
+-	(TARGET_SRC_MIPS_SGI): Removed.
+-	(MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX.
+-	(MIPS_SGI): Removed.
+-	(CLEANFILES): Removed.
+-	(mostlyclean-am, clean-am, mostlyclean-sub, clean-sub): New
+-	targets.
+-	* acconfig.h: Removed.
+-	* configure.in: Compute sizeofs only for double and long double.
+-	Use them to define and subst HAVE_LONG_DOUBLE.  Include comments
+-	into AC_DEFINE instead of using acconfig.h.  Create
+-	include/ffitarget.h instead of include/fficonfig.h.  Rename
+-	MIPS_GCC to MIPS_IRIX, drop MIPS_SGI since we are in gcc's tree.
+-	AC_DEFINE EH_FRAME_FLAGS.
+-	* include/Makefile.am (DISTCLEANFILES): New automake macro.
+-	(hack_DATA): Add ffitarget.h.
+-	* include/ffi.h.in: Remove all system specific definitions.
+-	Declare raw API even if it is not installed, why bother?
+-	Use limits.h instead of SIZEOF_* to define ffi_type_*.  Do
+-	not define EH_FRAME_FLAGS, it is in fficonfig.h now.  Include
+-	ffitarget.h instead of fficonfig.h.  Remove ALIGN macro.
+-	(UINT_ARG, INT_ARG): Removed, use ffi_arg and ffi_sarg instead.
+-	* include/ffi_common.h (bool): Do not define.
+-	(ffi_assert): Accept failed assertion.
+-	(ffi_type_test): Return void and accept file/line.
+-	(FFI_ASSERT): Pass stringized failed assertion.
+-	(FFI_ASSERT_AT): New macro.
+-	(FFI_ASSERT_VALID_TYPE): New macro.
+-	(UINT8, SINT8, UINT16, SINT16, UINT32, SINT32,
+-	UINT64, SINT64): Define here with gcc's __attribute__ macro
+-	instead of in ffi.h
+-	(FLOAT32, ALIGN): Define here instead of in ffi.h
+-	* include/ffi-mips.h: Removed.  Its content moved to
+-	src/mips/ffitarget.h after separating assembly and C sections.
+-	* src/alpha/ffi.c, src/alpha/ffi.c, src/java_raw_api.c
+-	src/prep_cif.c, src/raw_api.c, src/ia64/ffi.c,
+-	src/mips/ffi.c, src/mips/n32.S, src/mips/o32.S,
+-	src/mips/ffitarget.h, src/sparc/ffi.c, src/x86/ffi64.c:
+-	SIZEOF_ARG -> FFI_SIZEOF_ARG.
+-	* src/ia64/ffi.c: Include stdbool.h (provided by GCC 2.95+).
+-	* src/debug.c (ffi_assert): Accept stringized failed assertion.
+-	(ffi_type_test): Rewritten.
+-	* src/prep-cif.c (initialize_aggregate, ffi_prep_cif): Call
+-	FFI_ASSERT_VALID_TYPE.
+-	* src/alpha/ffitarget.h, src/arm/ffitarget.h,
+-	src/ia64/ffitarget.h, src/m68k/ffitarget.h,
+-	src/mips/ffitarget.h, src/powerpc/ffitarget.h,
+-	src/s390/ffitarget.h, src/sh/ffitarget.h,
+-	src/sh64/ffitarget.h, src/sparc/ffitarget.h,
+-	src/x86/ffitarget.h: New files.
+-	* src/alpha/osf.S, src/arm/sysv.S, src/ia64/unix.S,
+-	src/m68k/sysv.S, src/mips/n32.S, src/mips/o32.S,
+-	src/powerpc/aix.S, src/powerpc/darwin.S,
+-	src/powerpc/ffi_darwin.c, src/powerpc/linux64.S,
+-	src/powerpc/linux64_closure.S, src/powerpc/ppc_closure.S,
+-	src/powerpc/sysv.S, src/s390/sysv.S, src/sh/sysv.S,
+-	src/sh64/sysv.S, src/sparc/v8.S, src/sparc/v9.S,
+-	src/x86/sysv.S, src/x86/unix64.S, src/x86/win32.S:
+-	include fficonfig.h
+-
+-2003-10-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* src/mips/ffi.c: Use _ABIN32, _ABIO32 instead of external
+-	_MIPS_SIM_NABI32, _MIPS_SIM_ABI32.
+-
+-2003-10-19  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Declare bytes again.
+-	Used when FFI_DEBUG = 1.
+-
+-2003-10-14  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/types.c (double, longdouble): Default POWERPC64 to 8 byte size
+-	and align.
+-
+-2003-10-06  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* include/ffi_mips.h: Define FFI_MIPS_N32 for N32/N64 ABIs,
+-	FFI_MIPS_O32 for O32 ABI.
+-
+-2003-10-01  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_64 for
+-	SPARC64. Cleanup whitespaces.
+-
+-2003-09-19  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* testsuite/libffi.call/closure_fn0.c: Xfail mips, arm,
+-	strongarm, xscale. Cleanup whitespaces.
+-	* testsuite/libffi.call/closure_fn1.c: Likewise.
+-	* testsuite/libffi.call/closure_fn2.c: Likewise.
+-	* testsuite/libffi.call/closure_fn3.c: Likewise.
+-	* testsuite/libffi.call/cls_12byte.c: Likewise.
+-	* testsuite/libffi.call/cls_16byte.c: Likewise.
+-	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte.c: Likewise.
+-	* testsuite/libffi.call/cls_24byte.c: Likewise.
+-	* testsuite/libffi.call/cls_2byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_4byte.c: Likewise.
+-	* testsuite/libffi.call/cls_5byte.c: Likewise.
+-	* testsuite/libffi.call/cls_6byte.c: Likewise.
+-	* testsuite/libffi.call/cls_7byte.c: Likewise.
+-	* testsuite/libffi.call/cls_8byte.c: Likewise.
+-	* testsuite/libffi.call/cls_double.c: Likewise.
+-	* testsuite/libffi.call/cls_float.c: Likewise.
+-	* testsuite/libffi.call/cls_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_uint.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/cls_ushort.c: Likewise.
+-	* testsuite/libffi.call/nested_struct.c: Likewise.
+-	* testsuite/libffi.call/nested_struct1.c: Likewise.
+-	* testsuite/libffi.call/problem1.c: Likewise.
+-	* testsuite/libffi.special/unwindtest.cc: Likewise.
+-	* testsuite/libffi.call/pyobjc-tc.c: Cleanup whitespaces.
+-
+-2003-09-18  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/aix.S: Cleanup whitespaces.
+-	* src/powerpc/aix_closure.S: Likewise.
+-
+-2003-09-18  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/darwin.S: Cleanup whitespaces, comment formatting.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-	* src/powerpc/ffi_darwin.c: Likewise.
+-
+-2003-09-18  Andreas Tobler  <a.tobler@schweiz.ch>
+-	    David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/types.c (double): Add AIX and Darwin to the right TYPEDEF.
+-	* src/powerpc/aix_closure.S: Remove the pointer to the outgoing
+-	parameter stack.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Handle structures
+-	according to the Darwin/AIX ABI.
+-	(ffi_prep_cif_machdep): Likewise.
+-	(ffi_closure_helper_DARWIN): Likewise.
+-	Remove the outgoing parameter stack logic. Simplify the evaluation
+-	of the different CASE types.
+-	(ffi_prep_clousure): Avoid the casts on lvalues. Change the branch
+-	statement in the trampoline code.
+-
+-2003-09-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/ffi.c (ffi_prep_args): Take account into the alignement
+-	for the register size.
+-	(ffi_closure_helper_SYSV): Handle the structure return value
+-	address correctly.
+-	(ffi_closure_helper_SYSV): Return the appropriate type when
+-	the registers are used for the structure return value.
+-	* src/sh/sysv.S (ffi_closure_SYSV): Fix the stack layout for
+-	the 64-bit return value.  Update copyright years.
+-
+-2003-09-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Search in
+-	srcdir for ffi_mips.h.
+-
+-2003-09-12  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/prep_cif.c (initialize_aggregate): Include tail padding in
+-	structure size.
+-	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Correct
+-	placement of float result.
+-	* testsuite/libffi.special/unwindtest.cc (closure_test_fn1): Correct
+-	cast of "resp" for big-endian 64 bit machines.
+-
+-2003-09-11  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/types.c (double, longdouble): Merge identical SH and ARM
+-	typedefs, and add POWERPC64.
+-	* src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for
+-	struct split over gpr and rest.
+-	(ffi_prep_cif_machdep): Correct intarg_count for structures.
+-	* src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets.
+-
+-2003-09-09  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
+-	passing correctly.
+-
+-2003-09-09  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* configure: Regenerate.
+-
+-2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* Makefile.am: Remove build rules for ffitest.
+-	* Makefile.in: Rebuilt.
+-
+-2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/java_raw_api.c: Include <stdlib.h> to fix compiler warning
+-	about implicit declaration of abort().
+-
+-2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* Makefile.am: Add dejagnu test framework. Fixes PR other/11411.
+-	* Makefile.in: Rebuilt.
+-	* configure.in: Add dejagnu test framework.
+-	* configure: Rebuilt.
+-
+-	* testsuite/Makefile.am: New file.
+-	* testsuite/Makefile.in: Built
+-	* testsuite/lib/libffi-dg.exp: New file.
+-	* testsuite/config/default.exp: Likewise.
+-	* testsuite/libffi.call/call.exp: Likewise.
+-	* testsuite/libffi.call/ffitest.h: Likewise.
+-	* testsuite/libffi.call/closure_fn0.c: Likewise.
+-	* testsuite/libffi.call/closure_fn1.c: Likewise.
+-	* testsuite/libffi.call/closure_fn2.c: Likewise.
+-	* testsuite/libffi.call/closure_fn3.c: Likewise.
+-	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
+-	* testsuite/libffi.call/cls_2byte.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte1.c: Likewise.
+-	* testsuite/libffi.call/cls_3byte2.c: Likewise.
+-	* testsuite/libffi.call/cls_4byte.c: Likewise.
+-	* testsuite/libffi.call/cls_5byte.c: Likewise.
+-	* testsuite/libffi.call/cls_6byte.c: Likewise.
+-	* testsuite/libffi.call/cls_7byte.c: Likewise.
+-	* testsuite/libffi.call/cls_8byte.c: Likewise.
+-	* testsuite/libffi.call/cls_12byte.c: Likewise.
+-	* testsuite/libffi.call/cls_16byte.c: Likewise.
+-	* testsuite/libffi.call/cls_20byte.c: Likewise.
+-	* testsuite/libffi.call/cls_24byte.c: Likewise.
+-	* testsuite/libffi.call/cls_double.c: Likewise.
+-	* testsuite/libffi.call/cls_float.c: Likewise.
+-	* testsuite/libffi.call/cls_uchar.c: Likewise.
+-	* testsuite/libffi.call/cls_uint.c: Likewise.
+-	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
+-	* testsuite/libffi.call/cls_ushort.c: Likewise.
+-	* testsuite/libffi.call/float.c: Likewise.
+-	* testsuite/libffi.call/float1.c: Likewise.
+-	* testsuite/libffi.call/float2.c: Likewise.
+-	* testsuite/libffi.call/many.c: Likewise.
+-	* testsuite/libffi.call/many_win32.c: Likewise.
+-	* testsuite/libffi.call/nested_struct.c: Likewise.
+-	* testsuite/libffi.call/nested_struct1.c: Likewise.
+-	* testsuite/libffi.call/pyobjc-tc.c: Likewise.
+-	* testsuite/libffi.call/problem1.c: Likewise.
+-	* testsuite/libffi.call/promotion.c: Likewise.
+-	* testsuite/libffi.call/return_ll.c: Likewise.
+-	* testsuite/libffi.call/return_sc.c: Likewise.
+-	* testsuite/libffi.call/return_uc.c: Likewise.
+-	* testsuite/libffi.call/strlen.c: Likewise.
+-	* testsuite/libffi.call/strlen_win32.c: Likewise.
+-	* testsuite/libffi.call/struct1.c: Likewise.
+-	* testsuite/libffi.call/struct2.c: Likewise.
+-	* testsuite/libffi.call/struct3.c: Likewise.
+-	* testsuite/libffi.call/struct4.c: Likewise.
+-	* testsuite/libffi.call/struct5.c: Likewise.
+-	* testsuite/libffi.call/struct6.c: Likewise.
+-	* testsuite/libffi.call/struct7.c: Likewise.
+-	* testsuite/libffi.call/struct8.c: Likewise.
+-	* testsuite/libffi.call/struct9.c: Likewise.
+-	* testsuite/libffi.special/special.exp: New file.
+-	* testsuite/libffi.special/ffitestcxx.h: Likewise.
+-	* testsuite/libffi.special/unwindtest.cc: Likewise.
+-
+-
+-2003-08-13  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/ffi.c (OFS_INT16): Set 0 for little endian case.  Update
+-	copyright years.
+-
+-2003-08-02  Alan Modra  <amodra@bigpond.net.au>
+-
+-	* src/powerpc/ffi.c (ffi_prep_args64): Modify for changed gcc
+-	structure passing.
+-	(ffi_closure_helper_LINUX64): Likewise.
+-	* src/powerpc/linux64.S: Remove code writing to parm save area.
+-	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Use return
+-	address in lr from ffi_closure_helper_LINUX64 call to calculate
+-	table address.  Optimize function tail.
+-
+-2003-07-28  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/sparc/ffi.c: Handle all floating point registers.
+-	* src/sparc/v9.S: Likewise. Fixes second part of PR target/11410.
+-
+-2003-07-11  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>
+-
+-	* README: Note that libffi is not part of GCC.  Update the project
+-	URL and status.
+-
+-2003-06-19  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+-
+-	* src/powerpc/ppc_closure.S: Include ffi.h.
+-
+-2003-06-13  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* src/x86/sysv.S: Avoid gas-only .uleb128/.sleb128 directives.
+-	Use C style comments.
+-
+-2003-06-13  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+-
+-	* Makefile.am: Add SHmedia support.  Fix a typo of SH support.
+-	* Makefile.in: Regenerate.
+-	* configure.in (sh64-*-linux*, sh5*-*-linux*): Add target.
+-	* configure: Regenerate.
+-	* include/ffi.h.in: Add SHmedia support.
+-	* src/sh64/ffi.c: New file.
+-	* src/sh64/sysv.S: New file.
+-
+-2003-05-16  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section
+-	should be read-only.
+-	* configure: Rebuilt.
+-	* fficonfig.h.in: Rebuilt.
+-	* include/ffi.h.in (EH_FRAME_FLAGS): Define.
+-	* src/alpha/osf.S: Use EH_FRAME_FLAGS.
+-	* src/powerpc/linux64.S: Likewise.
+-	* src/powerpc/linux64_closure.S: Likewise.  Include ffi.h.
+-	* src/powerpc/sysv.S: Use EH_FRAME_FLAGS.  Use pcrel encoding
+-	if -fpic/-fPIC/-mrelocatable.
+-	* src/powerpc/powerpc_closure.S: Likewise.
+-	* src/sparc/v8.S: If HAVE_RO_EH_FRAME is defined, don't include
+-	#write in .eh_frame flags.
+-	* src/sparc/v9.S: Likewise.
+-	* src/x86/unix64.S: Use EH_FRAME_FLAGS.
+-	* src/x86/sysv.S: Likewise.  Use pcrel encoding if -fpic/-fPIC.
+-	* src/s390/sysv.S: Use EH_FRAME_FLAGS.  Include ffi.h.
+-
+-2003-05-07  Jeff Sturm  <jsturm@one-point.com>
+-
+-	Fixes PR bootstrap/10656
+-	* configure.in (HAVE_AS_REGISTER_PSEUDO_OP): Test assembler
+-	support for .register pseudo-op.
+-	* src/sparc/v8.S: Use it.
+-	* fficonfig.h.in: Rebuilt.
+-	* configure: Rebuilt.
+-
+-2003-04-18  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* include/ffi.h.in (POWERPC64): Define if 64-bit.
+-	(enum ffi_abi): Add FFI_LINUX64 on POWERPC.
+-	Make it the default on POWERPC64.
+-	(FFI_TRAMPOLINE_SIZE): Define to 24 on POWERPC64.
+-	* configure.in: Change powerpc-*-linux* into powerpc*-*-linux*.
+-	* configure: Rebuilt.
+-	* src/powerpc/ffi.c (hidden): Define.
+-	(ffi_prep_args_SYSV): Renamed from
+-	ffi_prep_args.  Cast pointers to unsigned long to shut up warnings.
+-	(NUM_GPR_ARG_REGISTERS64, NUM_FPR_ARG_REGISTERS64,
+-	ASM_NEEDS_REGISTERS64): New.
+-	(ffi_prep_args64): New function.
+-	(ffi_prep_cif_machdep): Handle FFI_LINUX64 ABI.
+-	(ffi_call): Likewise.
+-	(ffi_prep_closure): Likewise.
+-	(flush_icache): Surround by #ifndef POWERPC64.
+-	(ffi_dblfl): New union type.
+-	(ffi_closure_helper_SYSV): Use it to avoid aliasing problems.
+-	(ffi_closure_helper_LINUX64): New function.
+-	* src/powerpc/ppc_closure.S: Surround whole file by #ifndef
+-	__powerpc64__.
+-	* src/powerpc/sysv.S: Likewise.
+-	(ffi_call_SYSV): Rename ffi_prep_args to ffi_prep_args_SYSV.
+-	* src/powerpc/linux64.S: New file.
+-	* src/powerpc/linux64_closure.S: New file.
+-	* Makefile.am (EXTRA_DIST): Add src/powerpc/linux64.S and
+-	src/powerpc/linux64_closure.S.
+-	(TARGET_SRC_POWERPC): Likewise.
+-
+-	* src/ffitest.c (closure_test_fn, closure_test_fn1, closure_test_fn2,
+-	closure_test_fn3): Fix result printing on big-endian 64-bit
+-	machines.
+-	(main): Print tst2_arg instead of uninitialized tst2_result.
+-
+-	* src/ffitest.c (main): Hide what closure pointer really points to
+-	from the compiler.
+-
+-2003-04-16  Richard Earnshaw  <rearnsha@arm.com>
+-
+-	* configure.in (arm-*-netbsdelf*): Add configuration.
+-	(configure): Regenerated.
+-
+-2003-04-04  Loren J. Rittle  <ljrittle@acm.org>
+-
+-	* include/Makefile.in: Regenerate.
+-
+-2003-03-21  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+-
+-	* libffi/include/ffi.h.in: Define X86 instead of X86_64 in 32
+-	bit mode.
+-	* libffi/src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV):
+-	Receive closure pointer through parameter, read args using
+-	__builtin_dwarf_cfa.
+-	(FFI_INIT_TRAMPOLINE): Send closure reference through eax.
+-
+-2003-03-12  Andreas Schwab  <schwab@suse.de>
+-
+-	* configure.in: Avoid trailing /. in toolexeclibdir.
+-	* configure: Rebuilt.
+-
+-2003-03-03  Andreas Tobler <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/darwin_closure.S: Recode to fit dynamic libraries.
+-
+-2003-02-06  Andreas Tobler <a.tobler@schweiz.ch>
+-
+-	* libffi/src/powerpc/darwin_closure.S:
+-	Fix alignement bug, allocate 8 bytes for the result.
+-	* libffi/src/powerpc/aix_closure.S:
+-	Likewise.
+-	* libffi/src/powerpc/ffi_darwin.c:
+-	Update stackframe description for aix/darwin_closure.S.
+-
+-2003-02-06  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility
+-	attribute.
+-
+-2003-01-31  Christian Cornelssen  <ccorn@cs.tu-berlin.de>,
+-	    Andreas Schwab  <schwab@suse.de>
+-
+-	* configure.in: Adjust command to source config-ml.in to account
+-	for changes to the libffi_basedir definition.
+-	(libffi_basedir): Remove ${srcdir} from value and include trailing
+-	slash if nonempty.
+-
+-	* configure: Regenerate.
+-
+-2003-01-29  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+-
+-	* src/powerpc/ppc_closure.S: Recode to fit shared libs.
+-
+-2003-01-28  Andrew Haley  <aph@redhat.com>
+-
+-	* include/ffi.h.in: Enable FFI_CLOSURES for x86_64.
+-	* src/x86/ffi64.c (ffi_prep_closure): New.
+-	(ffi_closure_UNIX64_inner): New.
+-	* src/x86/unix64.S (ffi_closure_UNIX64): New.
+-
+-2003-01-27  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST.
+-	Remove USE_LIBDIR conditional.
+-	* Makefile.am (toolexecdir, toolexeclibdir): Don't override.
+-	* Makefile.in, configure: Rebuilt.
+-
+-2003-01027  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* Makefile.am (TARGET_SRC_POWERPC_AIX): Fix typo.
+-	* Makefile.in: Regenerate.
+-
+-2003-01-22  Andrew Haley  <aph@redhat.com>
+-
+-	* src/powerpc/darwin.S (_ffi_call_AIX): Add Augmentation size to
+-	unwind info.
+-
+-2003-01-21  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/darwin.S: Add unwind info.
+-	* src/powerpc/darwin_closure.S: Likewise.
+-
+-2003-01-14  Andrew Haley  <aph@redhat.com>
+-
+-	* src/x86/ffi64.c (ffi_prep_args): Check for void retval.
+-	(ffi_prep_cif_machdep): Likewise.
+-	* src/x86/unix64.S: Add unwind info.
+-
+-2003-01-14  Andreas Jaeger  <aj@suse.de>
+-
+-	* src/ffitest.c (main): Only use ffi_closures if those are
+-	supported.
+-
+-2003-01-13 Andreas Tobler <a.tobler@schweiz.ch>
+-
+-	* libffi/src/ffitest.c
+-	 add closure testcases
+-
+-2003-01-13 Kevin B. Hendricks <khendricks@ivey.uwo.ca>
+-
+-	* libffi/src/powerpc/ffi.c
+-	 fix alignment bug for float (4 byte aligned iso 8 byte)
+-
+-2003-01-09  Geoffrey Keating  <geoffk@apple.com>
+-
+-	* src/powerpc/ffi_darwin.c: Remove RCS version string.
+-	* src/powerpc/darwin.S: Remove RCS version string.
+-
+-2003-01-03  Jeff Sturm  <jsturm@one-point.com>
+-
+-	* include/ffi.h.in: Add closure defines for SPARC, SPARC64.
+-	* src/ffitest.c (main): Use static storage for closure.
+-	* src/sparc/ffi.c (ffi_prep_closure, ffi_closure_sparc_inner): New.
+-	* src/sparc/v8.S (ffi_closure_v8): New.
+-	* src/sparc/v9.S (ffi_closure_v9): New.
+-
+-2002-11-10  Ranjit Mathew <rmathew@hotmail.com>
+-
+-	* include/ffi.h.in: Added FFI_STDCALL ffi_type
+-	  enumeration for X86_WIN32.
+-	* src/x86/win32.S: Added ffi_call_STDCALL function
+-	  definition.
+-	* src/x86/ffi.c (ffi_call/ffi_raw_call): Added
+-	  switch cases for recognising FFI_STDCALL and
+-	  calling ffi_call_STDCALL if target is X86_WIN32.
+-	* src/ffitest.c (my_stdcall_strlen/stdcall_many):
+-	  stdcall versions of the "my_strlen" and "many"
+-	  test functions (for X86_WIN32).
+-	  Added test cases to test stdcall invocation using
+-	  these functions.
+-
+-2002-12-02  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* src/sh/sysv.S: Add DWARF2 unwind info.
+-
+-2002-11-27  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* src/s390/sysv.S (.eh_frame section): Make section read-only.
+-
+-2002-11-26  Jim Wilson  <wilson@redhat.com>
+-
+-	* src/types.c (FFI_TYPE_POINTER): Has size 8 on IA64.
+-
+-2002-11-23  H.J. Lu <hjl@gnu.org>
+-
+-	* acinclude.m4: Add dummy AM_PROG_LIBTOOL.
+-	Include ../config/accross.m4.
+-	* aclocal.m4; Rebuild.
+-	* configure: Likewise.
+-
+-2002-11-15  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* src/s390/sysv.S (.eh_frame section): Adapt to pcrel FDE encoding.
+-
+-2002-11-11  DJ Delorie  <dj@redhat.com>
+-
+-	* configure.in: Look for common files in the right place.
+-
+-2002-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* src/java_raw_api.c (ffi_java_raw_to_ptrarray): Interpret
+-	raw data as _Jv_word values, not ffi_raw.
+-	(ffi_java_ptrarray_to_raw): Likewise.
+-	(ffi_java_rvalue_to_raw): New function.
+-	(ffi_java_raw_call): Call it.
+-	(ffi_java_raw_to_rvalue): New function.
+-	(ffi_java_translate_args): Call it.
+-	* src/ffitest.c (closure_test_fn): Interpret return value
+-	as ffi_arg, not int.
+-	* src/s390/ffi.c (ffi_prep_cif_machdep): Add missing
+-	FFI_TYPE_POINTER case.
+-	(ffi_closure_helper_SYSV): Likewise.  Also, assume return
+-	values extended to word size.
+-
+-2002-10-02  Andreas Jaeger  <aj@suse.de>
+-
+-	* src/x86/ffi64.c (ffi_prep_cif_machdep): Remove debug output.
+-
+-2002-10-01  Bo Thorsen  <bo@smetana.suse.de>
+-
+-	* include/ffi.h.in: Fix i386 win32 compilation.
+-
+-2002-09-30  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* configure.in: Add s390x-*-linux-* target.
+-	* configure: Regenerate.
+-	* include/ffi.h.in: Define S390X for s390x targets.
+-	(FFI_CLOSURES): Define for s390/s390x.
+-	(FFI_TRAMPOLINE_SIZE): Likewise.
+-	(FFI_NATIVE_RAW_API): Likewise.
+-	* src/prep_cif.c (ffi_prep_cif): Do not compute stack space for s390.
+-	* src/types.c (FFI_TYPE_POINTER): Use 8-byte pointers on s390x.
+-	* src/s390/ffi.c: Major rework of existing code.  Add support for
+-	s390x targets.  Add closure support.
+-	* src/s390/sysv.S: Likewise.
+-
+-2002-09-29  Richard Earnshaw  <rearnsha@arm.com>
+-
+-	* src/arm/sysv.S: Fix typo.
+-
+-2002-09-28  Richard Earnshaw  <rearnsha@arm.com>
+-
+-	* src/arm/sysv.S: If we don't have machine/asm.h and the pre-processor
+-	has defined __USER_LABEL_PREFIX__, then use it in CNAME.
+-	(ffi_call_SYSV): Handle soft-float.
+-
+-2002-09-27  Bo Thorsen  <bo@suse.de>
+-
+-	* include/ffi.h.in: Fix multilib x86-64 support.
+-
+-2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+-
+-	* Makefile.am (all-multi): Fix multilib parallel build.
+-
+-2002-07-19  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* configure.in (sh[34]*-*-linux*): Add brackets.
+-	* configure: Regenerate.
+-
+-2002-07-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+-
+-	* Makefile.am: Add SH support.
+-	* Makefile.in: Regenerate.
+-	* configure.in (sh-*-linux*, sh[34]*-*-linux*): Add target.
+-	* configure: Regenerate.
+-	* include/ffi.h.in: Add SH support.
+-	* src/sh/ffi.c: New file.
+-	* src/sh/sysv.S: New file.
+-	* src/types.c: Add SH support.
+-
+-2002-07-16  Bo Thorsen  <bo@suse.de>
+-
+-	* src/x86/ffi64.c: New file that adds x86-64 support.
+-	* src/x86/unix64.S: New file that handles argument setup for
+-	x86-64.
+-	* src/x86/sysv.S: Don't use this on x86-64.
+-	* src/x86/ffi.c: Don't use this on x86-64.
+-	Remove unused vars.
+-	* src/prep_cif.c (ffi_prep_cif): Don't do stack size calculation
+-	for x86-64.
+-	* src/ffitest.c (struct6): New test that tests a special case in
+-	the x86-64 ABI.
+-	(struct7): Likewise.
+-	(struct8): Likewise.
+-	(struct9): Likewise.
+-	(closure_test_fn): Silence warning about this when it's not used.
+-	(main): Add the new tests.
+-	(main): Fix a couple of wrong casts and silence some compiler warnings.
+-	* include/ffi.h.in: Add x86-64 ABI definition.
+-	* fficonfig.h.in: Regenerate.
+-	* Makefile.am: Add x86-64 support.
+-	* configure.in: Likewise.
+-	* Makefile.in: Regenerate.
+-	* configure: Likewise.
+-
+-2002-06-24  Bo Thorsen  <bo@suse.de>
+-
+-	* src/types.c: Merge settings for similar architectures.
+-	Add x86-64 sizes and alignments.
+-
+-2002-06-23  Bo Thorsen  <bo@suse.de>
+-
+-	* src/arm/ffi.c (ffi_prep_args): Remove unused vars.
+-	* src/sparc/ffi.c (ffi_prep_args_v8): Likewise.
+-	* src/mips/ffi.c (ffi_prep_args): Likewise.
+-	* src/m68k/ffi.c (ffi_prep_args): Likewise.
+-
+-2002-07-18  H.J. Lu  (hjl@gnu.org)
+-
+-	* Makefile.am (TARGET_SRC_MIPS_LINUX): New.
+-	(libffi_la_SOURCES): Support MIPS_LINUX.
+-	(libffi_convenience_la_SOURCES): Likewise.
+-	* Makefile.in: Regenerated.
+-
+-	* configure.in (mips64*-*): Skip.
+-	(mips*-*-linux*): New.
+-	* configure: Regenerated.
+-
+-	* src/mips/ffi.c: Include <sgidefs.h>.
+-
+-2002-06-06  Ulrich Weigand  <uweigand@de.ibm.com>
+-
+-	* src/s390/sysv.S: Save/restore %r6.  Add DWARF-2 unwind info.
+-
+-2002-05-27  Roger Sayle  <roger@eyesopen.com>
+-
+-	* src/x86/ffi.c (ffi_prep_args): Remove reference to avn.
+-
+-2002-05-27  Bo Thorsen  <bo@suse.de>
+-
+-	* src/x86/ffi.c (ffi_prep_args): Remove unused variable and
+-	fix formatting.
+-
+-2002-05-13  Andreas Tobler  <a.tobler@schweiz.ch>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_prep_closure): Declare fd at
+-	beginning of function (for older apple cc).
+-
+-2002-05-08  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
+-	script entry, and set LD to it when configuring multilibs.
+-	* configure: Rebuilt.
+-
+-2002-05-05  Jason Thorpe  <thorpej@wasabisystems.com>
+-
+-	* configure.in (sparc64-*-netbsd*): Add target.
+-	(sparc-*-netbsdelf*): Likewise.
+-	* configure: Regenerate.
+-
+-2002-04-28  David S. Miller  <davem@redhat.com>
+-
+-	* configure.in, configure: Fix SPARC test in previous change.
+-
+-2002-04-29  Gerhard Tonn  <GerhardTonn@swol.de>
+-
+-	* Makefile.am: Add Linux for S/390 support.
+-	* Makefile.in: Regenerate.
+-	* configure.in: Add Linux for S/390 support.
+-	* configure: Regenerate.
+-	* include/ffi.h.in: Add Linux for S/390 support.
+-	* src/s390/ffi.c: New file from libffi CVS tree.
+-	* src/s390/sysv.S: New file from libffi CVS tree.
+-
+-2002-04-28  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working
+-	%r_disp32().
+-	* src/sparc/v8.S: Use it.
+-	* src/sparc/v9.S: Likewise.
+-	* fficonfig.h.in: Rebuilt.
+-	* configure: Rebuilt.
+-
+-2002-04-08  Hans Boehm  <Hans_Boehm@hp.com>
+-
+-	* src/java_raw_api.c (ffi_java_raw_size): Handle FFI_TYPE_DOUBLE
+-	correctly.
+-	* src/ia64/unix.S: Add unwind information. Fix comments.
+-	Save sp in a way that's compatible with unwind info.
+-	(ffi_call_unix): Correctly restore sp in all cases.
+-	* src/ia64/ffi.c: Add, fix comments.
+-
+-2002-04-08  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* src/sparc/v8.S: Make .eh_frame dependent on target word size.
+-
+-2002-04-06  Jason Thorpe  <thorpej@wasabisystems.com>
+-
+-	* configure.in (alpha*-*-netbsd*): Add target.
+-	* configure: Regenerate.
+-
+-2002-04-04  Jeff Sturm  <jsturm@one-point.com>
+-
+-	* src/sparc/v8.S: Add unwind info.
+-	* src/sparc/v9.S: Likewise.
+-
+-2002-03-30  Krister Walfridsson  <cato@df.lth.se>
+-
+-	* configure.in: Enable i*86-*-netbsdelf*.
+-	* configure: Rebuilt.
+-
+-2002-03-29  David Billinghurst <David.Billinghurst@riotinto.com>
+-
+-	PR other/2620
+-	* src/mips/n32.s: Delete
+-	* src/mips/o32.s: Delete
+-
+-2002-03-21  Loren J. Rittle  <ljrittle@acm.org>
+-
+-	* configure.in: Enable alpha*-*-freebsd*.
+-	* configure: Rebuilt.
+-
+-2002-03-17  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+-
+-	* Makefile.am: libfficonvenience -> libffi_convenience.
+-	* Makefile.in: Rebuilt.
+-
+-	* Makefile.am: Define ffitest_OBJECTS.
+-	* Makefile.in: Rebuilt.
+-
+-2002-03-07  Andreas Tobler  <toa@pop.agri.ch>
+-	    David Edelsohn  <edelsohn@gnu.org>
+-
+-	* Makefile.am (EXTRA_DIST): Add Darwin and AIX closure files.
+-	(TARGET_SRC_POWERPC_AIX): Add aix_closure.S.
+-	(TARGET_SRC_POWERPC_DARWIN): Add darwin_closure.S.
+-	* Makefile.in: Regenerate.
+-	* include/ffi.h.in: Add AIX and Darwin closure definitions.
+-	* src/powerpc/ffi_darwin.c (ffi_prep_closure): New function.
+-	(flush_icache, flush_range): New functions.
+-	(ffi_closure_helper_DARWIN): New function.
+-	* src/powerpc/aix_closure.S: New file.
+-	* src/powerpc/darwin_closure.S: New file.
+-
+-2002-02-24  Jeff Sturm  <jsturm@one-point.com>
+-
+-	* include/ffi.h.in: Add typedef for ffi_arg.
+-	* src/ffitest.c (main): Declare rint with ffi_arg.
+-
+-2002-02-21  Andreas Tobler  <toa@pop.agri.ch>
+-
+-	* src/powerpc/ffi_darwin.c (ffi_prep_args): Skip appropriate
+-	number of GPRs for floating-point arguments.
+-
+-2002-01-31  Anthony Green  <green@redhat.com>
+-
+-	* configure: Rebuilt.
+-	* configure.in: Replace CHECK_SIZEOF and endian tests with
+-	cross-compiler friendly macros.
+-	* aclocal.m4 (AC_COMPILE_CHECK_SIZEOF, AC_C_BIGENDIAN_CROSS): New
+-	macros.
+-
+-2002-01-18  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* src/powerpc/darwin.S (_ffi_call_AIX): New.
+-	* src/powerpc/aix.S (ffi_call_DARWIN): New.
+-
+-2002-01-17  David Edelsohn  <edelsohn@gnu.org>
+-
+-	* Makefile.am (EXTRA_DIST): Add Darwin and AIX files.
+-	(TARGET_SRC_POWERPC_AIX): New.
+-	(POWERPC_AIX): New stanza.
+-	* Makefile.in: Regenerate.
+-	* configure.in: Add AIX case.
+-	* configure: Regenerate.
+-	* include/ffi.h.in (ffi_abi): Add FFI_AIX.
+-	* src/powerpc/ffi_darwin.c (ffi_status): Use "long" to scale frame
+-	size.  Fix "long double" support.
+-	(ffi_call): Add FFI_AIX case.
+-	* src/powerpc/aix.S: New.
+-
+-2001-10-09  John Hornkvist  <john@toastedmarshmallow.com>
+-
+-	Implement Darwin PowerPC ABI.
+-	* configure.in: Handle powerpc-*-darwin*.
+-	* Makefile.am: Set source files for POWERPC_DARWIN.
+-	* configure: Rebuilt.
+-	* Makefile.in: Rebuilt.
+-	* include/ffi.h.in: Define FFI_DARWIN and FFI_DEFAULT_ABI for
+-	POWERPC_DARWIN.
+-	* src/powerpc/darwin.S: New file.
+-	* src/powerpc/ffi_darwin.c: New file.
+-
+-2001-10-07  Joseph S. Myers  <jsm28@cam.ac.uk>
+-
+-	* src/x86/ffi.c: Fix spelling error of "separate" as "seperate".
+-
+-2001-07-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* src/x86/sysv.S: Avoid gas-only .balign directive.
+-	Use C style comments.
+-
+-2001-07-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* src/alpha/ffi.c (ffi_prep_closure): Avoid gas-only mnemonic.
+-	Fixes PR bootstrap/3563.
+-
+-2001-06-26  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* src/alpha/osf.S (ffi_closure_osf): Use .rdata for ECOFF.
+-
+-2001-06-25  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+-
+-	* configure.in: Recognize sparc*-sun-* host.
+-	* configure: Regenerate.
+-
+-2001-06-06  Andrew Haley  <aph@redhat.com>
+-
+-	* src/alpha/osf.S (__FRAME_BEGIN__): Conditionalize for ELF.
+-
+-2001-06-03  Andrew Haley  <aph@redhat.com>
+-
+-	* src/alpha/osf.S: Add unwind info.
+-	* src/powerpc/sysv.S: Add unwind info.
+-	* src/powerpc/ppc_closure.S: Likewise.
+-
+-2000-05-31  Jeff Sturm  <jsturm@one-point.com>
+-
+-	* configure.in: Fix AC_ARG_ENABLE usage.
+-	* configure: Rebuilt.
+-
+-2001-05-06  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+-
+-	* configure.in: Remove warning about beta code.
+-	* configure: Rebuilt.
+-
+-2001-04-25  Hans Boehm <Hans_Boehm@hp.com>
+-
+-	* src/ia64/unix.S: Restore stack pointer when returning from
+-	ffi_closure_UNIX.
+-	* src/ia64/ffi.c: Fix typo in comment.
+-
+-2001-04-18  Jim Wilson  <wilson@redhat.com>
+-
+-	* src/ia64/unix.S: Delete unnecessary increment and decrement of loc2
+-	to eliminate RAW DV.
+-
+-2001-04-12  Bryce McKinlay  <bryce@albatross.co.nz>
+-
+-	* Makefile.am: Make a libtool convenience library.
+-	* Makefile.in: Rebuilt.
+-
+-2001-03-29  Bryce McKinlay  <bryce@albatross.co.nz>
+-
+-	* configure.in: Use different syntax for subdirectory creation.
+-	* configure: Rebuilt.
+-
+-2001-03-27  Jon Beniston  <jon@beniston.com>
+-
+-	* configure.in: Added X86_WIN32 target (Win32, CygWin, MingW).
+-	* configure: Rebuilt.
+-	* Makefile.am: Added X86_WIN32 target support.
+-	* Makefile.in: Rebuilt.
+-
+-	* include/ffi.h.in: Added X86_WIN32 target support.
+-
+-	* src/ffitest.c: Doesn't run structure tests for X86_WIN32 targets.
+-	* src/types.c: Added X86_WIN32 target support.
+-
+-	* src/x86/win32.S: New file. Based on sysv.S, but with EH
+-	stuff removed and made to work with CygWin's gas.
+-
+-2001-03-26  Bryce McKinlay  <bryce@albatross.co.nz>
+-
+-	* configure.in: Make target subdirectory in build dir.
+-	* Makefile.am: Override suffix based rules to specify correct output
+-	subdirectory.
+-	* Makefile.in: Rebuilt.
+-	* configure: Rebuilt.
+-
+-2001-03-23  Kevin B Hendricks  <khendricks@ivey.uwo.ca>
+-
+-	* src/powerpc/ppc_closure.S: New file.
+-	* src/powerpc/ffi.c (ffi_prep_args): Fixed ABI compatibility bug
+-	involving long long and register pairs.
+-	(ffi_prep_closure): New function.
+-	(flush_icache): Likewise.
+-	(ffi_closure_helper_SYSV): Likewise.
+-	* include/ffi.h.in (FFI_CLOSURES): Define on PPC.
+-	(FFI_TRAMPOLINE_SIZE): Likewise.
+-	(FFI_NATIVE_RAW_API): Likewise.
+-	* Makefile.in: Rebuilt.
+-	* Makefile.am (EXTRA_DIST): Added src/powerpc/ppc_closure.S.
+-	(TARGET_SRC_POWERPC): Likewise.
+-
+-2001-03-19  Tom Tromey  <tromey@redhat.com>
+-
+-	* Makefile.in: Rebuilt.
+-	* Makefile.am (ffitest_LDFLAGS): New macro.
+-
+-2001-03-02  Nick Clifton  <nickc@redhat.com>
+-
+-	* include/ffi.h.in: Remove RCS ident string.
+-	* include/ffi_mips.h: Remove RCS ident string.
+-	* src/debug.c: Remove RCS ident string.
+-	* src/ffitest.c: Remove RCS ident string.
+-	* src/prep_cif.c: Remove RCS ident string.
+-	* src/types.c: Remove RCS ident string.
+-	* src/alpha/ffi.c: Remove RCS ident string.
+-	* src/alpha/osf.S: Remove RCS ident string.
+-	* src/arm/ffi.c: Remove RCS ident string.
+-	* src/arm/sysv.S: Remove RCS ident string.
+-	* src/mips/ffi.c: Remove RCS ident string.
+-	* src/mips/n32.S: Remove RCS ident string.
+-	* src/mips/o32.S: Remove RCS ident string.
+-	* src/sparc/ffi.c: Remove RCS ident string.
+-	* src/sparc/v8.S: Remove RCS ident string.
+-	* src/sparc/v9.S: Remove RCS ident string.
+-	* src/x86/ffi.c: Remove RCS ident string.
+-	* src/x86/sysv.S: Remove RCS ident string.
+-
+-2001-02-08  Joseph S. Myers  <jsm28@cam.ac.uk>
+-
+-	* include/ffi.h.in: Change sourceware.cygnus.com references to
+-	gcc.gnu.org.
+-
+-2000-12-09  Richard Henderson  <rth@redhat.com>
+-
+-	* src/alpha/ffi.c (ffi_call): Simplify struct return test.
+-	(ffi_closure_osf_inner): Index rather than increment avalue
+-	and arg_types.  Give ffi_closure_osf the raw return value type.
+-	* src/alpha/osf.S (ffi_closure_osf): Handle return value type
+-	promotion.
+-
+-2000-12-07  Richard Henderson  <rth@redhat.com>
+-
+-	* src/raw_api.c (ffi_translate_args): Fix typo.
+-	(ffi_prep_closure): Likewise.
+-
+-	* include/ffi.h.in [ALPHA]: Define FFI_CLOSURES and
+-	FFI_TRAMPOLINE_SIZE.
+-	* src/alpha/ffi.c (ffi_prep_cif_machdep): Adjust minimal
+-	cif->bytes for new ffi_call_osf implementation.
+-	(ffi_prep_args): Absorb into ...
+-	(ffi_call): ... here.  Do all stack allocation here and
+-	avoid a callback function.
+-	(ffi_prep_closure, ffi_closure_osf_inner): New.
+-	* src/alpha/osf.S (ffi_call_osf): Reimplement with no callback.
+-	(ffi_closure_osf): New.
+-
+-2000-09-10  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* config.guess, config.sub, install-sh: Removed.
+-	* ltconfig, ltmain.sh, missing, mkinstalldirs: Likewise.
+-	* Makefile.in: Rebuilt.
+-
+-	* acinclude.m4: Include libtool macros from the top level.
+-	* aclocal.m4, configure: Rebuilt.
+-
+-2000-08-22  Alexandre Oliva  <aoliva@redhat.com>
+-
+-	* configure.in [i*86-*-freebsd*] (TARGET, TARGETDIR): Set.
+-	* configure: Rebuilt.
+-
+-2000-05-11  Scott Bambrough  <scottb@netwinder.org>
+-
+-	* libffi/src/arm/sysv.S (ffi_call_SYSV): Doubles are not saved to
+-	memory correctly.  Use conditional instructions, not branches where
+-	possible.
+-
+-2000-05-04  Tom Tromey  <tromey@cygnus.com>
+-
+-	* configure: Rebuilt.
+-	* configure.in: Match `arm*-*-linux-*'.
+-	From Chris Dornan <cdornan@arm.com>.
+-
+-2000-04-28  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* Makefile.am (SUBDIRS): Define.
+-	(AM_MAKEFLAGS): Likewise.
+-	(Multilib support.): Add section.
+-	* Makefile.in: Rebuilt.
+-	* ltconfig (extra_compiler_flags, extra_compiler_flags_value):
+-	New variables. Set for gcc using -print-multi-lib. Export them
+-	to libtool.
+-	(sparc64-*-linux-gnu*): Use libsuff 64 for search paths.
+-	* ltmain.sh (B|b|V): Don't throw away gcc's -B, -b and -V options
+-	for -shared links.
+-	(extra_compiler_flags_value, extra_compiler_flags): Check these
+-	for extra compiler options which need to be passed down in
+-	compiler_flags.
+-
+-2000-04-16  Anthony Green  <green@redhat.com>
+-
+-	* configure: Rebuilt.
+-	* configure.in: Change i*86-pc-linux* to i*86-*-linux*.
+-
+-2000-04-14  Jakub Jelinek  <jakub@redhat.com>
+-
+-	* include/ffi.h.in (SPARC64): Define for 64bit SPARC builds.
+-	Set SPARC FFI_DEFAULT_ABI based on SPARC64 define.
+-	* src/sparc/ffi.c (ffi_prep_args_v8): Renamed from ffi_prep_args.
+-	Replace all void * sizeofs with sizeof(int).
+-	Only compare type with FFI_TYPE_LONGDOUBLE if LONGDOUBLE is
+-	different than DOUBLE.
+-	Remove FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases (handled elsewhere).
+-	(ffi_prep_args_v9): New function.
+-	(ffi_prep_cif_machdep): Handle V9 ABI and long long on V8.
+-	(ffi_V9_return_struct): New function.
+-	(ffi_call): Handle FFI_V9 ABI from 64bit code and FFI_V8 ABI from
+-	32bit code (not yet cross-arch calls).
+-	* src/sparc/v8.S: Add struct return delay nop.
+-	Handle long long.
+-	* src/sparc/v9.S: New file.
+-	* src/prep_cif.c (ffi_prep_cif): Return structure pointer
+-	is used on sparc64 only for structures larger than 32 bytes.
+-	Pass by reference for structures is done for structure arguments
+-	larger than 16 bytes.
+-	* src/ffitest.c (main): Use 64bit rint on sparc64.
+-	Run long long tests on sparc.
+-	* src/types.c (FFI_TYPE_POINTER): Pointer is 64bit on alpha and
+-	sparc64.
+-	(FFI_TYPE_LONGDOUBLE): long double is 128 bit aligned to 128 bits
+-	on sparc64.
+-	* configure.in (sparc-*-linux*): New supported target.
+-	(sparc64-*-linux*): Likewise.
+-	* configure: Rebuilt.
+-	* Makefile.am: Add v9.S to SPARC files.
+-	* Makefile.in: Likewise.
+-	(LINK): Surround $(CCLD) into double quotes, so that multilib
+-	compiles work correctly.
+-
+-2000-04-04  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+-
+-	* configure: Rebuilt.
+-	* configure.in: (i*86-*-solaris*): New libffi target. Patch
+-	proposed by Bryce McKinlay.
+-
+-2000-03-20  Tom Tromey  <tromey@cygnus.com>
+-
+-	* Makefile.in: Hand edit for java_raw_api.lo.
+-
+-2000-03-08  Bryce McKinlay  <bryce@albatross.co.nz>
+-
+-	* config.guess, config.sub: Update from the gcc tree.
+-	Fix for PR libgcj/168.
+-
+-2000-03-03  Tom Tromey  <tromey@cygnus.com>
+-
+-	* Makefile.in: Fixed ia64 by hand.
+-
+-	* configure: Rebuilt.
+-	* configure.in (--enable-multilib): New option.
+-	(libffi_basedir): New subst.
+-	(AC_OUTPUT): Added multilib code.
+-
+-2000-03-02  Tom Tromey  <tromey@cygnus.com>
+-
+-	* Makefile.in: Rebuilt.
+-	* Makefile.am (TARGET_SRC_IA64): Use `ia64', not `alpha', as
+-	directory name.
+-
+-2000-02-25  Hans Boehm <boehm@acm.org>
+-
+-	* src/ia64/ffi.c, src/ia64/ia64_flags.h, src/ia64/unix.S: New
+-	files.
+-	* src/raw_api.c (ffi_translate_args): Fixed typo in argument
+-	list.
+-	(ffi_prep_raw_closure): Use ffi_translate_args, not
+-	ffi_closure_translate.
+-	* src/java_raw_api.c: New file.
+-	* src/ffitest.c (closure_test_fn): New function.
+-	(main): Define `rint' as long long on IA64.  Added new test when
+-	FFI_CLOSURES is defined.
+-	* include/ffi.h.in (ALIGN): Use size_t, not unsigned.
+-	(ffi_abi): Recognize IA64.
+-	(ffi_raw): Added `flt' field.
+-	Added "Java raw API" code.
+-	* configure.in: Recognize ia64.
+-	* Makefile.am (TARGET_SRC_IA64): New macro.
+-	(libffi_la_common_SOURCES): Added java_raw_api.c.
+-	(libffi_la_SOURCES): Define in IA64 case.
+-
+-2000-01-04  Tom Tromey  <tromey@cygnus.com>
+-
+-	* Makefile.in: Rebuilt with newer automake.
+-
+-1999-12-31  Tom Tromey  <tromey@cygnus.com>
+-
+-	* Makefile.am (INCLUDES): Added -I$(top_srcdir)/src.
+-
+-1999-09-01  Tom Tromey  <tromey@cygnus.com>
+-
+-	* include/ffi.h.in: Removed PACKAGE and VERSION defines and
+-	undefs.
+-	* fficonfig.h.in: Rebuilt.
+-	* configure: Rebuilt.
+-	* configure.in: Pass 3rd argument to AM_INIT_AUTOMAKE.
+-	Use AM_PROG_LIBTOOL (automake 1.4 compatibility).
+-	* acconfig.h: Don't #undef PACKAGE or VERSION.
+-
+-1999-08-09  Anthony Green  <green@cygnus.com>
+-
+-	* include/ffi.h.in: Try to work around messy header problem
+-	with PACKAGE and VERSION.
+-
+-	* configure: Rebuilt.
+-	* configure.in: Change version to 2.00-beta.
+-
+-	* fficonfig.h.in: Rebuilt.
+-	* acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define.
+-
+-	* src/x86/ffi.c (ffi_raw_call): Rename.
+-
+-1999-08-02  Kresten Krab Thorup  <krab@dominiq.is.s.u-tokyo.ac.jp>
+-
+-	* src/x86/ffi.c (ffi_closure_SYSV): New function.
+-	(ffi_prep_incoming_args_SYSV): Ditto.
+-	(ffi_prep_closure): Ditto.
+-	(ffi_closure_raw_SYSV): Ditto.
+-	(ffi_prep_raw_closure): More ditto.
+-	(ffi_call_raw): Final ditto.
+-
+-	* include/ffi.h.in: Add definitions for closure and raw API.
+-
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): Added case for
+-	FFI_TYPE_UINT64.
+-
+-	* Makefile.am (libffi_la_common_SOURCES): Added raw_api.c
+-
+-	* src/raw_api.c: New file.
+-
+-	* include/ffi.h.in (ffi_raw): New type.
+-	(UINT_ARG, SINT_ARG): New defines.
+-	(ffi_closure, ffi_raw_closure): New types.
+-	(ffi_prep_closure, ffi_prep_raw_closure): New declarations.
+-
+-	* configure.in: Add check for endianness and sizeof void*.
+-
+-	* src/x86/sysv.S (ffi_call_SYSV): Call fixup routine via argument,
+-	instead of directly.
+-
+-	* configure: Rebuilt.
+-
+-Thu Jul  8 14:28:42 1999  Anthony Green  <green@cygnus.com>
+-
+-	* configure.in: Add x86 and powerpc BeOS configurations.
+-	From Makoto Kato <m_kato@ga2.so-net.ne.jp>.
+-
+-1999-05-09  Anthony Green  <green@cygnus.com>
+-
+-	* configure.in: Add warning about this being beta code.
+-	Remove src/Makefile.am from the picture.
+-	* configure: Rebuilt.
+-
+-	* Makefile.am: Move logic from src/Makefile.am.  Add changes
+-	to support libffi as a target library.
+-	* Makefile.in: Rebuilt.
+-
+-	* aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh:
+-	Upgraded to new autoconf, automake, libtool.
+-
+-	* README: Tweaks.
+-
+-	* LICENSE: Update copyright date.
+-
+-	* src/Makefile.am, src/Makefile.in: Removed.
+-
+-1998-11-29  Anthony Green  <green@cygnus.com>
+-
+-	* include/ChangeLog: Removed.
+-	* src/ChangeLog: Removed.
+-	* src/mips/ChangeLog: Removed.
+-	* src/sparc/ChangeLog: Remboved.
+-	* src/x86/ChangeLog: Removed.
+-
+-	* ChangeLog.v1: Created.
++commit c860a992fef5d7cd7bb0975b1632d17a9fafe007
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 25 17:02:51 2014 -0400
++
++    Upgrade version to 3.1-rc1
++
++commit 9837073e6203048a162a226798c5d252600219ed
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 25 16:24:14 2014 -0400
++
++    Update copyright date and clean up README notes.
++
++commit 18d3baa9f597b026675baa1b4e5a5eeef7577a08
++Merge: afee537 f0c8a31
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 25 16:12:53 2014 -0400
++
++    Merge pull request #108 from joshtriplett/freebsd
++    
++    [3.1 blocker] Fix FreeBSD support
++
++commit afee53738a995e23bd2f89fd0f7b30b380566106
++Merge: 7d24785 b2d610e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 25 16:12:35 2014 -0400
++
++    Merge pull request #106 from joshtriplett/darwin-award
++    
++    [3.1 blocker] Update OS X build system to include win32.S on 32-bit
++
++commit 7d2478568ed9f03cbf57627f449a2d2cf4d1571c
++Merge: beab5f3 56be47f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 25 16:12:17 2014 -0400
++
++    Merge pull request #110 from joshtriplett/w64
++    
++    Fix 64-bit Windows support
++
++commit beab5f334d9ec5b8b91d1cc727d1029b40358e7e
++Merge: 28fb197 ef5890e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 25 16:07:47 2014 -0400
++
++    Merge pull request #105 from joshtriplett/win32-relocations
++    
++    [3.1 blocker] win32.S needs to handle relocations/GOT
++
++commit f0c8a31577172104049283f0a80c723084a5bd77
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Mon Mar 24 22:14:26 2014 -0700
++
++    Compile win32.S on FreeBSD
++
++commit b2d610e028b5ce48d1ad7e5d0debc9c321d891b2
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Fri Mar 21 11:10:13 2014 -0700
++
++    Compile win32.S on 32-bit Darwin as well
++
++commit be50b87a490e794362cb4a27ada2fbaab202adb8
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Mon Mar 24 21:44:13 2014 -0700
++
++    Always use configure to detect whether global symbols need underscores
++    
++    64-bit Windows already used this check; make it universal, and use it in
++    place of an ifdef on X86_WIN32, to handle non-Windows platforms that use
++    the underscore, such as Darwin.
++
++commit 56be47f87629e31afbcb0774aa65735f539ee972
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Mon Mar 24 21:24:53 2014 -0700
++
++    Fix a warning on 64-bit Windows
++    
++    When sizeof(size_t) != sizeof(unsigned), adding a size_t to cif->bytes
++    produces a "possible loss of data" warning.  However, the size_t in
++    question refers to the size of a single parameter.  Use a cast to avoid
++    the warning.
++
++commit 48a8eda74aad8a21b6f26df5df08fe64c043d208
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Mon Mar 24 21:21:12 2014 -0700
++
++    Avoid referencing undefined ABIs on 64-bit Windows builds
++    
++    64-bit Windows does not have FFI_STDCALL, FFI_THISCALL, or FFI_FASTCALL.
++
++commit f0f4138f90345d7d67dfa6783a7e1c7cc30d3c6f
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sat Mar 22 10:00:53 2014 -0700
++
++    win32.S: Add handling for position-independent code on Darwin
++    
++    Newer versions of Darwin generate the necessary stub functions
++    automatically and just need a call instruction, but accomodating older
++    versions as well requires adding the stub.
++
++commit ef5890ebafb7cd2fbf9acf161edb55fe1382871c
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Fri Mar 21 11:01:39 2014 -0700
++
++    win32.S: Use shifting for multiplication rather than repeated addition
++    
++    The jump table code added a register to itself twice to multiply by 4;
++    shift the register left by 2 instead.
++
++commit 4fca48901e7e4f53bf490ed22607b2d2d8f4bfcc
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Fri Mar 21 11:00:41 2014 -0700
++
++    win32.S: Make the jump tables position-independent
++    
++    Now that non-Windows platforms include win32.S, it needs to support
++    building as position-independent code.  This fixes build failures on
++    target platforms that do not allow text relocations.
++
++commit 2087dcf736274286f76c69d3988fb6d7cc4fd0f5
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Fri Mar 21 10:57:06 2014 -0700
++
++    win32.S: Make calls to ffi_closure_SYSV_inner position-independent
++    
++    Now that non-Windows platforms include win32.S, it needs to support
++    building as position-independent code.  This fixes one source of build
++    failures on target platforms that do not allow text relocations.
++
++commit 28fb197079cf1d11da4eef7c8c243ab05590c528
++Merge: c697472 c3dd0a1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Mar 18 12:19:36 2014 -0400
++
++    Merge pull request #107 from rvandermeulen/msvcc
++    
++    Various compatibility fixes and improvements to msvcc.sh.
++
++commit c3dd0a1a0245fc174361a70876e88ae24285f861
++Author: Ryan VanderMeulen <ryanvm@gmail.com>
++Date:   Tue Mar 18 12:09:45 2014 -0400
++
++    Various compatibility fixes and improvements to msvcc.sh.
++    
++    * Don't try to mix incompatible optimization flags in debug builds.
++    * Workaround ax_cc_maxopt.m4 not supporting MSVC and change -O3 to -O2.
++    * Fix MSVC warning by properly passing linker flags to compiler.
++    * Make msvcc.sh return 1 if invalid command line options are used rather than silently eating them.
++    * Add more comments.
++
++commit c697472fccfbb5b87b007c053cda9ef014b346b9
++Merge: 83fd2bc e48918e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Mar 17 00:32:42 2014 -0400
++
++    Merge pull request #102 from joshtriplett/test-generic
++    
++    Add ABIs to the test matrix; unify many bits of the testsuite
++
++commit e48918ecf876bc85d040fc50a232059c566553a8
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 20:29:27 2014 -0700
++
++    testsuite: Add ABIs to the test matrix; unify tests across ABIs
++    
++    This eliminates all the *_win32.c tests in favor of the tests they were
++    branched from, and expands test coverage to run many more tests on
++    stdcall, thiscall, and fastcall.
++    
++    This same mechanism also supports testing any other target that has
++    multiple ABIs.
++
++commit 4d4d368e5a55d9443c4c53b1b70d58ab6d8c941c
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 17:02:05 2014 -0700
++
++    testsuite: Replace ffitestcxx.h with ffitest.h
++    
++    ffitest.h contains a superset of the functionality of ffitestcxx.h;
++    make the C++ tests include ffitest.h instead, and remove ffitestcxx.h.
++
++commit 3f97cf3413c46caf2a79f32ac9cda4620972c2d7
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 16:53:42 2014 -0700
++
++    testsuite: Unify the C and C++ testsuites
++    
++    These two testsuites differ only in the source file glob and a couple of
++    additional compiler options; unify the remaining bits.
++
++commit 0d9cce8edb937bbe771a6cdd25f671edf06d2128
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 16:22:58 2014 -0700
++
++    testsuite: ffitest.h: Parenthesize the CHECK macro
++
++commit 5695ec1444c5323e48fe4314f8c8f027625e67df
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 16:04:58 2014 -0700
++
++    testsuite: Factor out a function to run a matrix of tests
++    
++    This commons up code from libffi.call/call.exp and
++    libffi.special/special.exp, unifies the optimization option matrix
++    between the two, and makes it easier to add more axes to the matrix
++    in the future.
++
++commit dfdb02cc869855d3b68571e5f7aa77ae8c9d254a
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 15:26:26 2014 -0700
++
++    testsuite: Introduce a __THISCALL__ compiler-specific macro
++
++commit 83fd2bce0456224483435d4b764063f4513fd464
++Merge: 3658a07 06ff924
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 22:03:29 2014 -0400
++
++    Merge pull request #99 from joshtriplett/gitignore
++    
++    .gitignore: Ignore more generated files
++
++commit 3658a0700a50d37a2fdba04fd9d79ad2f706d9f5
++Merge: d948d0a 46c5d3c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 21:37:42 2014 -0400
++
++    Merge pull request #100 from rvandermeulen/bug-756740
++    
++    Change double quotes in Makefile.am to single quotes.
++
++commit 46c5d3c30fdc2b43c076ad955078d7c5f1e75b37
++Author: Ryan VanderMeulen <ryanvm@gmail.com>
++Date:   Sun Mar 16 21:16:08 2014 -0400
++
++    Change double quotes in Makefile.am to single quotes.
++    
++    This was originally done in PR #84, except the change was made to Makefile.in instead of Makefile.am and was therefore reverted the next time the files were regenerated.
++
++commit 06ff924215a2f9739efa2c059dc595bc4ec1c851
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 16:19:46 2014 -0700
++
++    .gitignore: Ignore more generated files
++    
++    The build process generates doc/libffi.info and fficonfig.h.in, so add
++    them to .gitignore.
++
++commit bad8948346e9b8813023a0cc78a3b6eb8d9c14c6
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 15:16:18 2014 -0700
++
++    testsuite: Introduce a __STDCALL__ compiler-specific macro
++    
++    Several tests want to use stdcall, which differs in syntax by compiler,
++    so introduce a macro for it in ffitest.h.
++
++commit 98a793fa36a4ab3ba24d059cb80a2891cdb940e1
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 15:20:36 2014 -0700
++
++    testsuite: Common up the ifdef blocks for compiler-specific macros
++
++commit d948d0a729c934b0224749338a3ba0a2c8f51c45
++Merge: b61b472 a86bd31
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 10:53:48 2014 -0400
++
++    Merge pull request #98 from joshtriplett/unconfigure.host
++    
++    Merge configure.host into configure.ac
++
++commit a86bd318e2424d879d784ee7b29d6536d7a17c18
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 06:58:59 2014 -0700
++
++    Merge configure.host into configure.ac
++    
++    configure.host only has a single entry, and shows no signs of needing
++    more added.
++
++commit b61b472bd0647006d6685238721002017f1d119c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 09:45:55 2014 -0400
++
++    Update version to 3.1-rc0.  Clean up README.
++
++commit 7a64e7dbba54e6e9f69954adfb943be1856ff928
++Merge: 11a5c5c eef2e02
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 09:39:08 2014 -0400
++
++    Merge pull request #97 from joshtriplett/remove-more-generated-files
++    
++    Remove more generated files
++
++commit 11a5c5c39f5861011f6c5ddf795da3a32b5f0082
++Merge: 9a62a21 1c68c07
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 09:38:47 2014 -0400
++
++    Merge pull request #96 from joshtriplett/sawing-changelogs
++    
++    Generate ChangeLog from git in make dist; remove it from version control
++
++commit eef2e02a13d7d1c8145d47a64467f654406a3548
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 06:26:03 2014 -0700
++
++    doc: Remove autogenerated info file and stamp
++
++commit 9fb403d3c5d9643e0f561cab6d4a07b1e54907ff
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 06:25:52 2014 -0700
++
++    fficonfig.h.in: Remove, configure generates it
++
++commit 1c68c07217fda78a779778c1480fedef7a58d5b4
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 06:11:58 2014 -0700
++
++    Generate ChangeLog from git in make dist
++    
++    Archive the existing ChangeLog to ChangeLog.libffi-3.1
++
++commit c65ed55e655711e008282edbdd82ce95d008b4f6
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 05:52:00 2014 -0700
++
++    ChangeLog.v1: Fix typo in explanatory header.
++
++commit 9a62a21f5c3a8e1da463229f3170c8ab3031d920
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 09:03:57 2014 -0400
++
++    Add missing ChangeLog entry.  Clean up some entries.
++
++commit 9bc704c58cb7a049d867837e3a11e2e31886ec66
++Merge: 694447a e892e58
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 08:41:00 2014 -0400
++
++    Merge pull request #95 from joshtriplett/news
++    
++    README: Update news for 3.0.14
++
++commit e892e581d1838a06c18c7ecd50ebd79915cff92b
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 05:38:24 2014 -0700
++
++    README: Update news for 3.0.14
++
++commit 694447aa29deadd571efb4e9a26ee3f68ede1493
++Merge: fdc87f3 45a6c21
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 08:32:05 2014 -0400
++
++    Merge pull request #93 from joshtriplett/travis-dist
++    
++    Make Travis check "make dist"
++
++commit 45a6c21efa944b520842e631dc54919b04884744
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 05:29:08 2014 -0700
++
++    .travis.yml: Test "make dist" too.
++
++commit fdc87f3b2ea37b58a4a9ae6c35083f544909fe3c
++Merge: 7412b83 e1911f7
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 08:05:51 2014 -0400
++
++    Merge pull request #85 from joshtriplett/stdcall
++    
++    stdcall support on Linux
++
++commit e1911f78df113ca58738b66089a070d4cf747de7
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 03:25:53 2014 -0700
++
++    Add support for stdcall, thiscall, and fastcall on non-Windows x86-32
++    
++    Linux supports the stdcall calling convention, either via functions
++    explicitly declared with the stdcall attribute, or via code compiled
++    with -mrtd which effectively makes stdcall the default.
++    
++    This introduces FFI_STDCALL, FFI_THISCALL, and FFI_FASTCALL on
++    non-Windows x86-32 platforms, as non-default calling conventions.
++
++commit 7412b838d543aae4fa925862bd5702d3dacbc29a
++Merge: c0cc5fd 9531d05
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:58:16 2014 -0400
++
++    Merge pull request #90 from joshtriplett/win32-unifdef
++    
++    prep_cif.c: Remove unnecessary ifdef for X86_WIN32
++
++commit c0cc5fdaa237b67e86f22d2f6e13f3b42d9aae33
++Merge: 98b5296 b3a5da0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:57:59 2014 -0400
++
++    Merge pull request #89 from joshtriplett/travis32
++    
++    .travis.yml: Test on both 32-bit and 64-bit
++
++commit 9531d05f64c2a674e0197158ffad68d69f177bd0
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 01:50:02 2014 -0700
++
++    prep_cif.c: Remove unnecessary ifdef for X86_WIN32
++    
++    ffi_prep_cif_core had a special case for X86_WIN32, checking for
++    FFI_THISCALL in addition to the FFI_FIRST_ABI-to-FFI_LAST_ABI range
++    before returning FFI_BAD_ABI.  However, on X86_WIN32, FFI_THISCALL
++    already falls in that range, making the special case unnecessary.
++    Remove it.
++
++commit b3a5da068abd2f2983d9e67adbf41b0e0f34e37f
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sat Mar 15 23:27:56 2014 -0700
++
++    .travis.yml: Test on both 32-bit and 64-bit
++
++commit 98b52960485a261399f081915f36063de3854a5f
++Merge: 134ce4c f6dd184
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:51:33 2014 -0400
++
++    Merge pull request #94 from joshtriplett/esp-extra-stackery-perception
++    
++    ChangeLog: Document testsuite changes to remove fragile stack pointer checks
++
++commit f6dd1845434dd53e22129becdfa092c082df307c
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 04:49:36 2014 -0700
++
++    ChangeLog: Document testsuite changes to remove fragile stack pointer checks
++
++commit 134ce4c0266bf994f07518fc534de53f1d3c8de8
++Merge: 2680e9e 9c27932
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:47:17 2014 -0400
++
++    Merge pull request #91 from joshtriplett/esp-extra-stackery-perception
++    
++    testsuite: Remove fragile stack pointer checks
++
++commit 9c279328ee12fc869adff63ca81f1230977bd42b
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 02:31:19 2014 -0700
++
++    testsuite: Remove fragile stack pointer checks
++    
++    testsuite/libffi.call/closure_stdcall.c and
++    testsuite/libffi.call/closure_thiscall.c include inline assembly to save
++    the stack pointer before and after the call, and compare the values.
++    However, compilers can and do leave the stack in different states for
++    these two pieces of inline assembly, such as by saving a temporary value
++    on the stack across the call; observed with gcc -Os, and verified as
++    spurious through careful inspection of disassembly.
++
++commit 2680e9ea9b4c87ea8042a61e551bd667493d4bd3
++Merge: 071eab3 82f8cb2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:44:08 2014 -0400
++
++    Merge pull request #88 from joshtriplett/such-precision-many-fail-wow
++    
++    testsuite/libffi.call/many.c: Avoid spurious failure due to excess precision
++
++commit 82f8cb24a1d976db35ae31a4b86cec8926da327d
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 04:27:32 2014 -0700
++
++    ChangeLog: Document many.c and many_win32.c changes to avoid spurious failures
++
++commit 88d562a8b5912e99306063fe3bc289bab6ca6ebe
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sat Mar 15 22:08:19 2014 -0700
++
++    testsuite/libffi.call/many_win32.c: Avoid spurious failure due to excess precision
++    
++    The test case testsuite/libffi.call/many_win32.c can spuriously fail due
++    to excess floating-point precision.  Instrumenting it with some printf
++    calls shows differences well above FLT_EPSILON.  (Note when
++    instrumenting it that multiple computations of the difference, such as
++    one in a print and another in the conditional, may produce different
++    results.)
++    
++    Rather than complicating the test suite with architecture-specific flags
++    to avoid excess precision, just simplify the floating-point computation
++    to avoid a dependency on potential excess precision.
++
++commit c00a49ecd165b2d06c1c9b249d212dc843fa116f
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sat Mar 15 22:08:19 2014 -0700
++
++    testsuite/libffi.call/many.c: Avoid spurious failure due to excess precision
++    
++    The test case testsuite/libffi.call/many.c can spuriously fail due to
++    excess floating-point precision.  Instrumenting it with some printf
++    calls shows differences well above FLT_EPSILON.  (Note when
++    instrumenting it that multiple computations of the difference, such as
++    one in a print and another in the conditional, may produce different
++    results.)
++    
++    Rather than complicating the test suite with architecture-specific flags
++    to avoid excess precision, just simplify the floating-point computation
++    to avoid a dependency on potential excess precision.
++
++commit 071eab32a7f9fbbef46c0d8f37d9985bc9cceb37
++Merge: 2228c7a 2f44952
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:36:52 2014 -0400
++
++    Merge pull request #92 from joshtriplett/autogen
++    
++    Re-add libtool-ldflags
++
++commit 2f44952c95765c1486fad66f57235f8d459a9748
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sun Mar 16 04:35:12 2014 -0700
++
++    Re-add libtool-ldflags
++
++commit 2228c7ab190f3c529b9018495467b841fa21cba2
++Merge: 76d19d0 35634db
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 16 07:25:18 2014 -0400
++
++    Merge pull request #87 from joshtriplett/autogen
++    
++    Remove autogenerated files from the repository
++
++commit 35634dbceaac0a1544f7385addc01d21ef1ef6a8
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Sat Mar 15 18:11:16 2014 -0700
++
++    Remove autogenerated files from the repository
++    
++    Add an autogen.sh to regenerate them.
++
++commit 76d19d004e36e99d261ee78261e2f52cea5e4ab1
++Merge: c86d9b6 a1a6f71
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Mar 14 16:54:31 2014 -0400
++
++    Ensure the linker supports @unwind sections in libffi.
++
++commit c86d9b6cc6e16ee262844a33b40441374400758c
++Merge: 4efb7db f8cdf11
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Mar 14 16:51:20 2014 -0400
++
++    Fix merge
++
++commit 4efb7dbfd9427c478a948cd0d464210123db8de8
++Merge: 634a475 18eb81d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Mar 14 16:47:57 2014 -0400
++
++    Merge pull request #81 from rvandermeulen/bug-756740
++    
++    Allow building for mipsel with Android NDK r8.
++
++commit a1a6f71bfe4199293043b2e4cfb4c8d3cb1112f9
++Author: Ryan VanderMeulen <ryanvm@gmail.com>
++Date:   Mon Mar 10 15:12:47 2014 -0400
++
++    Remove stray hunk that shouldn't have been included in this patch.
++
++commit f8cdf11467181f2a9a6b7e748167569aa58e3a81
++Author: Ryan VanderMeulen <ryanvm@gmail.com>
++Date:   Mon Mar 10 15:04:58 2014 -0400
++
++    Replace double quotes with single quotes in Makefile.in to improve compatibility between some versions of MSYS and gmake. From Mozilla bug 943728.
++    https://bugzilla.mozilla.org/show_bug.cgi?id=943728
++
++commit dfa3738732e1bc3a7f4130395ae4bab55fcebb99
++Author: Ryan VanderMeulen <ryanvm@gmail.com>
++Date:   Mon Mar 10 14:53:48 2014 -0400
++
++    Ensure the linker supports @unwind sections in libffi. From Mozilla bug 756740.
++    https://bugzilla.mozilla.org/show_bug.cgi?id=778414
++    
++    Also tracked as issue #42.
++    https://github.com/atgreen/libffi/issues/42
++
++commit 18eb81d032f29d645d0498ba92bddfd651f009ae
++Author: Ryan VanderMeulen <ryanvm@gmail.com>
++Date:   Mon Mar 10 14:43:37 2014 -0400
++
++    Allow building for mipsel with Android NDK r8. From Mozilla bug 756740.
++    https://bugzilla.mozilla.org/show_bug.cgi?id=756740
++
++commit 634a475eaf1bee31c09f7d519e31c13b64cd24df
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 1 18:37:29 2014 -0500
++
++    Update Makefile for new darwin scripts
++
++commit c7b67e874bb89859f9a07d1cf9606052b6c0dcc1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 1 18:34:18 2014 -0500
++
++    Add README note
++
++commit a04e30ba3dc303133d459c1ac273ceefe4d49b32
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 17:20:59 2014 -0500
++
++    Add missing -DFFI_DEBUG flag
++
++commit 934dc1b5c8d6a9e727bedc72342831eb7d62c35f
++Merge: 11d7aa9 67fbef3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 01:10:17 2014 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 11d7aa9d7a4bbe642944edc0f07cf96db9b270b6
++Merge: b40aeda 3b44d41
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 01:06:48 2014 -0500
++
++    Merge pull request #46 from makotokato/android-clang
++    
++    Fix build failure when using clang for Android
++
++commit 67fbef3b56ff0ef88f9b1a7fe48cb77222fa6cec
++Merge: b40aeda 3b44d41
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 01:06:48 2014 -0500
++
++    Merge pull request #46 from makotokato/android-clang
++    
++    Fix build failure when using clang for Android
++
++commit b40aeda31a74d95a37c723b6243aabac466e67c4
++Merge: 20698ab 53ceaf1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 01:01:29 2014 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 53ceaf14c5eeb16ba09745f0ca87cca367d41a90
++Merge: 860fe66 cc9b518
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 01:01:02 2014 -0500
++
++    Merge pull request #40 from wojdyr/master
++    
++    Correct the -L flag in libffi.pc.in
++
++commit 20698abc6a00092fd7fd3e434a3a29dc0f048f1e
++Merge: 64bd069 1a0b01e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:56:27 2014 -0500
++
++    Merge pull request #66 from ppizarro/master
++    
++    BlackFin fixes - Fatal error when calling a function defined in a shared library from within the function called by FFI
++
++commit 860fe6646f5ae603e99a8d1d722ddddba8b75769
++Merge: 64bd069 1a0b01e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:56:27 2014 -0500
++
++    Merge pull request #66 from ppizarro/master
++    
++    BlackFin fixes - Fatal error when calling a function defined in a shared library from within the function called by FFI
++
++commit 64bd06990a7accf72271516a2110b86cdccd8df4
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:52:56 2014 -0500
++
++    Add ChangeLog entry for Josh's change
++
++commit edf29c5169b06fcfc241445e152e325bc3c50e0e
++Merge: 33c9954 3998d26
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:50:25 2014 -0500
++
++    Merge pull request #75 from joshtriplett/longdouble
++    
++    Fix build error on x86 without distinct long double
++
++commit 33c9954f2eec539011a0f93270aaf013318837ae
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:38:41 2014 -0500
++
++    Rebuilt with new libtool
++
++commit 926b6989fbd08488b9105943293353d45ac527e0
++Merge: 5a88c85 cc82051
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:26:57 2014 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++    
++    Conflicts:
++    	ChangeLog
++
++commit 5a88c85fde304052bed1581ed0b6452ac2c68838
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:23:04 2014 -0500
++
++    Fix spelling errors
++
++commit cc82051c7e80cea772c4b72da026eb7e68d598fc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:23:04 2014 -0500
++
++    Fix spelling errors
++
++commit 001aaf4b1b56349596bb6f6b5c1613dcbbd84ea8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:20:17 2014 -0500
++
++    When no VFP arguments are present the IP register is used
++    uninitialized. Initialize it to the value of FP.
++    
++    This fixes a number of testsuite failures when configured for
++    armv7l-unknown-linux-gnueabihf
++
++commit 49f7729c3ce697c12408c42ccb29cdf4eb66bb85
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 28 00:17:16 2014 -0500
++
++    aarch64 fix
++
++commit 447483d51c6aa9df7116f346a73fc1cf795f4c2b
++Merge: 51377bd b4df9cf
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 27 15:42:41 2014 -0500
++
++    Fix ChangeLog merge
++
++commit 3998d2604b5c0d45a098ff3119a9fd9710ef429d
++Author: Josh Triplett <josh@joshtriplett.org>
++Date:   Mon Feb 17 11:20:33 2014 -0800
++
++    Fix build error on x86 without distinct long double
++    
++    src/x86/ffi64.c: In function 'classify_argument':
++    src/x86/ffi64.c:205:5: error: duplicate case value
++         case FFI_TYPE_LONGDOUBLE:
++         ^
++    src/x86/ffi64.c:202:5: error: previously used here
++         case FFI_TYPE_DOUBLE:
++         ^
++
++commit 51377bda9aed0b2c1309c818460cab9d9ab3d46e
++Merge: f08da54 40927bd
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Feb 15 08:06:29 2014 -0500
++
++    Merge pull request #72 from heiher/devel
++    
++    MIPS N32: Fix call floating point va function
++
++commit f08da5465463e60a28f5e921f23ebf2ba984c148
++Merge: 3dc3f32 fa5f25c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Feb 15 08:06:11 2014 -0500
++
++    Merge pull request #68 from zeldin/master
++    
++    Linux/ppc64: Remove assumption on contents of r11 in closure
++
++commit 40927bd3e1e7c6007025ba10854fd8a0664e47df
++Author: Heiher <r@hev.cc>
++Date:   Tue Jan 21 23:18:27 2014 +0800
++
++    Fix call floating point va function
++    
++    I'm not sure floating-point arguments in GPR or FPR before calling
++    variable number arguments function. so, load all arguments to GPR and
++    FPR.
++
++commit b4df9cf9cc4a9a9401a53fd6bea1f3c2c283b97b
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Wed Feb 5 14:22:52 2014 -0500
++
++    AArch64: Fix void fall-through case when assertions are enabled
++
++commit f466aad0d91a117e42571d1d6fb434fa0433c930
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Tue Jan 21 16:38:31 2014 -0500
++
++    AArch64: Fix missing semicolons when assertions are enabled
++
++commit 7ea677733bd98917241852b8901a6b7580728895
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 20:58:31 2013 -0500
++
++    Remove build-ios from Makefile
++    
++    Conflicts:
++    	ChangeLog
++
++commit 6ae046cc59c12b2cd40158d6bcb96f4a59886159
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 21:06:51 2013 -0500
++
++    Mention Aarch64 on iOS
++
++commit bfc06b3fdb32abe90ce0749aedfec649df85a7ef
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 17:36:39 2013 -0500
++
++    Update ChangeLog
++
++commit 0a0f12ce1f7be81006b08a3c81a636926d283a9b
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:50:17 2014 -0500
++
++    AArch64: Remove duplicitous element_count call.
++    
++    This inhibits an analyzer warning by Clang.
++
++commit 4330fdcd92e67c816288d64ab230237065768206
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:53:30 2014 -0500
++
++    Darwin/aarch64: Respect iOS ABI re: stack argument alignment
++
++commit 0a333d6c3973935d4fe02aae76b10e39d3c88e07
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 14:03:29 2014 -0500
++
++    Darwin/aarch64: Fix size_t assumptions
++
++commit 2c18e3c76aad1b426617db05a4384e7c3a920176
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 16:14:02 2013 -0500
++
++    Darwin/aarch64: Fix "shadows declaration" warnings
++
++commit 1b8a8e20e344f3c55495ab6eb46bd14e843d4b3e
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:55:21 2014 -0500
++
++    Darwin/aarch64: Use Clang cache invalidation builtin
++
++commit 6030cdcae776f8fb5876a53168f7d1e75d28a242
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 15:45:51 2013 -0500
++
++    Darwin/aarch64: Account for long double being equal to double
++
++commit 5658b0892683d2e24e4d5842978c184a7ad33858
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 16:33:47 2013 -0500
++
++    Darwin/aarch64: Use CNAME, restrict .size like ARM
++
++commit 07175780802acec5dc49fdedd6d20a62409a6707
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 17:48:22 2013 -0500
++
++    Darwin/aarch64: Fix invalid reference in assembly
++
++commit 9da28b44277fea3aeb827c35dd63d609d2524a8b
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 16:23:21 2013 -0500
++
++    Darwin/x86_64: Fix 64-bit type shortening warnings
++
++commit 821d398f08bd1d540a5b235507812ffeee49b580
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:15:06 2014 -0500
++
++    Darwin: Merge build scripts, redo project, incl. arm64
++
++commit 6eff9ff9e72463b9783be2514f944b6f05692054
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 17:48:10 2013 -0500
++
++    Darwin/iOS: Improve unified syntax use for LLVM
++
++commit ba0ea99c82aadd5957386a031e3122011bd36d52
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 15:27:44 2013 -0500
++
++    Fix dlmalloc warnings due to set_segment_flags, sizeof(size_t)
++
++commit 994be3a5c1d0d17b19103396103e128517fd62f9
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 15:27:14 2013 -0500
++
++    Darwin/iOS: Fix mis-typing of vfp_reg_free
++
++commit a8e0a835ab1f62d03ad6391760e3e8b7732d24f8
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Mon Dec 30 15:26:20 2013 -0500
++
++    Darwin/ARM: Assert on NULL dereference
++    
++    This inhibits an analyzer warning by Clang on all platforms.
++
++commit 13675341581c489ed9df8ba390c8e08a732decb2
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:42:08 2014 -0500
++
++    Darwin/i386: Inhibit Clang previous prototype warnings
++
++commit 66469c381e2e2cc96e7d409266dea0ffe177eeca
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:41:45 2014 -0500
++
++    Darwin/ARM: Inhibit Clang previous prototype warnings
++
++commit 5bfe62a00d2d659eec9f19b39802b6e69844fc27
++Author: Zachary Waldowski <zach@waldowski.me>
++Date:   Thu Jan 9 13:41:27 2014 -0500
++
++    Darwin/AArch64: Inhibit Clang previous prototype warnings
++
++commit fa5f25c20f76a6ef5e950a7ccbce826672c8a620
++Author: Marcus Comstedt <marcus@mc.pp.se>
++Date:   Sat Jan 4 19:00:08 2014 +0100
++
++    Linux/ppc64: Remove assumption on contents of r11 in closure
++
++commit 1a0b01e171e9c750437cef2f18917f5a6e32c498
++Author: Paulo Pizarro <paulo.pizarro@gmail.com>
++Date:   Thu Jan 2 16:17:59 2014 -0200
++
++    When the function called by the ffi called a function defined in a shared library generate a fatal error
++    The correction was to take into consideration the GOT.
++
++commit 3dc3f32c35db5ab995a835225f6815369735ceb7
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Dec 5 16:23:25 2013 -0500
++
++    Undo iOS ARM64 changes.
++
++commit 356b2cbc304bfe5bdc28b8d1c68d1ff084e9ec37
++Merge: 484a758 07345a3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 22:38:13 2013 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 484a7584260e2fbb399ce90083046834271bf9ff
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 21:06:51 2013 -0500
++
++    Mention Aarch64 on iOS
++
++commit 07345a30ec0a2fa45a7c363d301f57723690cfa0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 21:06:51 2013 -0500
++
++    Mention Aarch64 on iOS
++
++commit d4b931c1b872378c35f12ddbb9a6d55e7f17c65e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 20:58:31 2013 -0500
++
++    Remove build-ios from Makefile
++
++commit dfbf236d70fc1ec68e6ff193584a154353508e2f
++Merge: 852ac3b bb9740e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 20:54:54 2013 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++    Add ChangeLog entry.
++
++commit bb9740e545205f93a525c77aa6d1cbf4ca9371f3
++Merge: ac75368 4d701e0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 30 17:54:39 2013 -0800
++
++    Merge pull request #60 from zwaldowski/ios-redo
++    
++    Mac/iOS support, including aarch64 port
++
++commit 4d701e03faa475a5eb3b54b90046114a1e27b813
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 13:25:27 2013 -0500
++
++    Darwin: Properly export headers from Xcode project
++
++commit 022f12eb9ad2264e838fa5fb453733f5177888f4
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 12:21:38 2013 -0500
++
++    Darwin: Freshen gen scripts, remove old build-ios.sh
++
++commit e820fe2025d7ad3df7584407946dfaad2af69599
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 12:03:51 2013 -0500
++
++    Darwin/iOS: Include x86_64+aarch64 pieces in library
++
++commit 0278284e470ec91db7cdc15ac3dcd64683305848
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 03:03:37 2013 -0500
++
++    Darwin/aarch64: size_t assumptions
++
++commit 9775446b6441c91cd9059215c106aa3bcf949767
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:39:34 2013 -0500
++
++    Darwin/aarch64: Fix “shadows declaration” warnings
++
++commit 4260badc37705d3618e774dfe61184ac709881c1
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:08:14 2013 -0500
++
++    Darwin/aarch64: Use Clang cache invalidation builtin
++
++commit 9fa7998d5f9250908cbf12a671479852ebadf9d1
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:07:48 2013 -0500
++
++    Darwin/aarch64: Inhibit Xcode warning
++
++commit 0e832048a93830575b0976406444e134e649a4f7
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:07:34 2013 -0500
++
++    Darwin/aarch64: double == long double
++
++commit 602dc22d76931092610234cf063f9f1b8dbc1a51
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:06:00 2013 -0500
++
++    Darwin/iOS prep script: try and compile for arm64
++
++commit b513dfe79de4725e8a717325a9e3b5b9f69f63dc
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:05:22 2013 -0500
++
++    Darwin/aarch64: Restrict .size to ELF like arm32.
++
++commit bc978099bf2812de755c076b67ef9c2547607572
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:04:57 2013 -0500
++
++    Darwin/aarch64: Potentially(?) fix compile error
++
++commit d6bb9314467c6e0683156559d23ca341c43fa3c8
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:04:22 2013 -0500
++
++    Darwin/aarch64: Use CNAME refs
++
++commit 33c46ce5680eea28d3437c8771ec1d137e226b45
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 04:13:42 2013 -0500
++
++    Darwin/Mac: Fix 64/32 shortening warnings
++
++commit 0612081e6c161d9d820742f995975d35da2adbc2
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 03:03:00 2013 -0500
++
++    Darwin: Misc size_t warnings
++
++commit 6a6247d179ec3859311c2d8775841b884f309f66
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 02:55:48 2013 -0500
++
++    Darwin: Fix dlmalloc warnings due to sizeof(size_t)
++
++commit 4d60d9e1e32de6166ffd63bbe9ce54cf961c78fc
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 04:09:30 2013 -0500
++
++    Darwin: Rebuild Xcode project
++
++commit cb719a5c1c2eb391d6a5f5e02484ba4aa990a51b
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 04:09:18 2013 -0500
++
++    Darwin/iOS: Fix LLVM 3.3 warning re: memcpy.
++
++commit 21bde92c9abb378f9c456a9d95e6f9b99ef8c920
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 03:43:42 2013 -0500
++
++    Darwin: Clean up, modernize generator scripts
++
++commit fd54eab74cef7891e4acaaafb71e783142ecb69e
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Sat Nov 30 03:38:02 2013 -0500
++
++    Darwin/Mac: Also exclude OS X generated source
++
++commit 953b6f14c655141f9e7d82550a312c3eeb961091
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Tue Apr 24 11:16:20 2012 -0400
++
++    Darwin/iOS: More unified syntax support w/ Clang.
++    
++    Signed-off-by: Zachary Waldowski <zwaldowski@gmail.com>
++
++commit c713a55379481c339877f2e0003d97cb8d9ed80e
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Tue Apr 24 10:25:29 2012 -0400
++
++    Darwin/iOS: Simplify RETLDM arguments for LLVM 3.1
++    
++    Signed-off-by: Zachary Waldowski <zwaldowski@gmail.com>
++
++commit 16ba1b80028db5cb71cf86e5f79f5e48317f83c8
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Wed Apr 11 23:26:04 2012 -0400
++
++    Darwin: Silence Clang warnings.
++
++commit 852ac3bd302d6ed97b1ef65f4cbed69c258a48df
++Merge: ab79d6e ac75368
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Nov 21 21:25:44 2013 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++    
++    Conflicts:
++    	ChangeLog
++
++commit ab79d6e21992dd86139ba07530ff888833b78a04
++Author: Alan Modra <amodra@gmail.com>
++Date:   Thu Nov 21 06:12:35 2013 -0500
++
++    This separates the 32-bit sysv/linux/bsd code from the 64-bit linux
++    code, and makes it possible to link code compiled with different
++    options to those used to compile libffi.  For example, a
++    -mlong-double-128 libffi can be used with -mlong-double-64 code.
++    
++    Using the return value area as a place to pass parameters wasn't such
++    a good idea, causing a failure of cls_ulonglong.c.  I didn't see this
++    when running the mainline gcc libffi testsuite because that version of
++    the test is inferior to the upstreamm libffi test.
++    
++    Using NUM_FPR_ARG_REGISTERS rather than NUM_FPR_ARG_REGISTERS64 meant
++    that a parameter save area could be allocated before it was strictly
++    necessary.  Wrong but harmless.  Found when splitting apart ffi.c
++    into 32-bit and 64-bit support.
++
++commit ac7536889334d4be50709006d7e23536364d7891
++Author: Alan Modra <amodra@gmail.com>
++Date:   Thu Nov 21 06:12:35 2013 -0500
++
++    This separates the 32-bit sysv/linux/bsd code from the 64-bit linux
++    code, and makes it possible to link code compiled with different
++    options to those used to compile libffi.  For example, a
++    -mlong-double-128 libffi can be used with -mlong-double-64 code.
++    
++    Using the return value area as a place to pass parameters wasn't such
++    a good idea, causing a failure of cls_ulonglong.c.  I didn't see this
++    when running the mainline gcc libffi testsuite because that version of
++    the test is inferior to the upstreamm libffi test.
++    
++    Using NUM_FPR_ARG_REGISTERS rather than NUM_FPR_ARG_REGISTERS64 meant
++    that a parameter save area could be allocated before it was strictly
++    necessary.  Wrong but harmless.  Found when splitting apart ffi.c
++    into 32-bit and 64-bit support.
++
++commit 69df91cfb4fa6bcb644350a80bff970f27478a6a
++Merge: 2f45082 aa1f62c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Nov 18 06:34:04 2013 -0800
++
++    Merge pull request #59 from iains/powerpc-darwin-unwind-fix
++    
++    Fix PowerPC Darwin FDE encodings to use pcrel correctly.  Modernise the picbase labels.
++
++commit aa1f62c0a093c30325dff1d4d2b6b4b22eb96929
++Author: Iain Sandoe <iain@codesourcery.com>
++Date:   Mon Nov 18 13:11:56 2013 +0000
++
++    Fix PowerPC Darwin FDE encodings to use pcrel correctly.  Modernise the picbase labels.
++
++commit 2f450822a8698ba88441c56d152c7dc8924b127f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Nov 18 06:52:29 2013 -0500
++
++    Clean up code to appease modern GCC compiler.
++
++commit 16d56c51aded374730920a4acde76ff3d2860ae1
++Author: Alan Modra <amodra@gmail.com>
++Date:   Mon Nov 18 06:36:03 2013 -0500
++
++    An #endif in the wrong place would cause compile failure on powerpcle.
++    Using bl instead of b doesn't cause runtime failures as you might think,
++    but does mess the processor branch prediction.
++
++commit 34f878a5ef28663f6b1d7fd26fb099429ea1579e
++Merge: 83f65b6 1fd0457
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 16 06:57:54 2013 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++    
++    Conflicts:
++    	ChangeLog
++    	src/powerpc/ffi.c
++
++commit 83f65b63d9764a9cc7688fc5cda5ee2bd23faf54
++Author: Alan Modra <amodra@gmail.com>
++Date:   Sat Nov 16 06:53:50 2013 -0500
++
++    Finally, this adds _CALL_ELF == 2 support.  ELFv1 objects can't be
++    linked with ELFv2 objects, so this is one case where preprocessor
++    tests in ffi.c are fine.  Also, there is no need to define a new
++    FFI_ELFv2 or somesuch value in enum ffi_abi.  FFI_LINUX64 will happily
++    serve both ABIs.
++
++commit 1fd045784cac874b5d76b7fa931f67209a8280d3
++Author: Alan Modra <amodra@gmail.com>
++Date:   Sat Nov 16 06:53:50 2013 -0500
++
++    Finally, this adds _CALL_ELF == 2 support.  ELFv1 objects can't be
++    linked with ELFv2 objects, so this is one case where preprocessor
++    tests in ffi.c are fine.  Also, there is no need to define a new
++    FFI_ELFv2 or somesuch value in enum ffi_abi.  FFI_LINUX64 will happily
++    serve both ABIs.
++
++commit 362851379a49ce07d3e36e82c4e5c7b6cc16a352
++Author: Alan Modra <amodra@gmail.com>
++Date:   Sat Nov 16 06:52:43 2013 -0500
++
++    Andreas' 2013-02-08 change reverted some breakage for struct return
++    values from 2011-11-12, but in so doing reintroduced string
++    instructions to sysv.S that are not supported on all powerpc variants.
++    This patch properly copies the bounce buffer to destination in C code
++    rather than in asm.
++    
++    I have tested this on powerpc64-linux, powerpc-linux and
++    powerpc-freebsd.  Well, the last on powerpc-linux by lying to
++    configure with
++    
++    CC="gcc -m32 -msvr4-struct-return -mlong-double-64" \
++    CXX="g++ -m32 -msvr4-struct-return -mlong-double-64" \
++    /src/libffi-current/configure --build=powerpc-freebsd
++    
++    and then
++    
++    make && make CC="gcc -m32" CXX="g++ -m32" \
++    RUNTESTFLAGS=--target_board=unix/-m32/-msvr4-struct-return/-mlong-double-64\
++     check
++
++commit 1c06515d927d9de1582438d4eb5953890e79c5c7
++Author: Alan Modra <amodra@gmail.com>
++Date:   Sat Nov 16 06:41:36 2013 -0500
++
++    The powerpc64 ABIs align structs passed by value, a fact ignored by
++    gcc for quite some time.  Since gcc now does the correct alignment,
++    libffi needs to follow suit.  This ought to be made selectable via
++    a new abi value, and the #ifdefs removed from ffi.c along with many
++    other #ifdefs present there and in assembly.  I'll do that with a
++    followup patch sometime.
++    
++    This is a revised version of
++    https://sourceware.org/ml/libffi-discuss/2013/msg00162.html
++
++commit a97cf1fae575d8bfd5259c5c422025ad43911326
++Author: Alan Modra <amodra@gmail.com>
++Date:   Sat Nov 16 06:40:13 2013 -0500
++
++    This patch prepares for ELFv2, where sizes of these areas change.  It
++    also makes some minor changes to improve code efficiency.
++
++commit 164283f4ac5972ce2ab5e015cc2ab1014c23276c
++Author: Alan Modra <amodra@gmail.com>
++Date:   Sat Nov 16 06:38:55 2013 -0500
++
++    The powerpc64 support opted to pass floating point values both in the
++    fpr area and the parameter save area, necessary when the backend
++    doesn't know if a function argument corresponds to the ellipsis
++    arguments of a variadic function.  This patch adds powerpc support for
++    variadic functions, and changes the code to only pass fp in the ABI
++    mandated area.  ELFv2 needs this change since the parameter save area
++    may not exist there.
++    
++    This also fixes two faulty tests that used a non-variadic function
++    cast to call a variadic function, and spuriously reasoned that this is
++    somehow necessary for static functions..
++
++commit 31257b3189f81a199bc2902c22bc5f2d7c54ccde
++Author: Andrew Haley <aph@redhat.com>
++Date:   Sat Nov 16 06:35:51 2013 -0500
++
++    Fix sample closure code
++
++commit db0ace3a38496af73eae3df02ef353736d16909f
++Author: Andrew Haley <aph@redhat.com>
++Date:   Sat Nov 16 06:29:25 2013 -0500
++
++    Fix broken test cases
++
++commit de10f5039ed7a53382ddcc95c368d03e535edb98
++Merge: 58c2577 f3657da
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Nov 14 10:56:29 2013 -0500
++
++    Merge branch 'master' of https://github.com/bivab/libffi
++    
++    Conflicts:
++    	ChangeLog
++
++commit f3657da278dd63afcdd8762894a9bdaea8ef028a
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Thu Nov 14 13:02:16 2013 +0100
++
++    update Changelog
++
++commit 58c2577a3ff80e7416ef0434769e2af23365719c
++Author: Alan Modra <amodra@gmail.com>
++Date:   Wed Nov 13 16:55:36 2013 -0500
++
++    This enshrines the current testsuite practice of using ffi_arg for
++    returned values.  It would be reasonable and logical to use the actual
++    return argument type as passed to ffi_prep_cif, but this would mean
++    changing a large number of tests that use ffi_arg and all backends
++    that write results to an ffi_arg.
++
++commit 8af42f9944f7ed72c81ae360aac6a84dc11f89dc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Nov 13 16:40:28 2013 -0500
++
++    Respect HAVE_ALLOCA_H
++
++commit cdf405d574f479b782454516366bd4f4b9b3415e
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Wed Nov 13 15:50:21 2013 +0100
++
++    add a testcase for the double/float issue on ARMHF
++
++commit 77f823e31ffb557a466b24f7fba845fbf7831798
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Wed Nov 13 14:26:57 2013 +0100
++
++    stop trying to assing vfp regs once we are done with the registers
++
++commit 37067ec5036f2a6ed7a4799f83f8f53160460344
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Tue Nov 12 19:49:01 2013 +0100
++
++    mark all vfp registers as used when done.
++    
++    To avoid assigning registers the would fit, once arguments have been on
++    the stack, we mark all registers as used once we do not find a free
++    register for the first time.
++
++commit 2f5b7ce545473a7f6e41193edc29407cbebe82d5
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 9 06:16:32 2013 -0500
++
++    UltraSPARC IIi fix.  Update README and build configury.
++
++commit becd754434173032f426d22ffcbfe24f55b3c137
++Author: Mark Kettenis <kettenis@gnu.org>
++Date:   Wed Nov 6 06:43:49 2013 -0500
++
++    Align the stack pointer to 16-bytes.
++
++commit 05c31093409f7b3e6d795fac21d2c954313d8162
++Author: Konstantin Belousov <kib@freebsd.org>
++Date:   Wed Nov 6 06:40:58 2013 -0500
++
++    Mark executable as not requiring executable stack.
++
++commit cf6bf9818e8394cfcdb07a40c6a5e2ee6b01d333
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 2 17:23:59 2013 -0400
++
++    Fix up docs
++
++commit 02177176854d16fc0f1a5958aa34da2f306630ee
++Merge: c242217 c265b4c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 2 17:11:22 2013 -0400
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit c2422174b3edc0de0b148dfd6b67087bb881c4a6
++Merge: f4b843f d918d47
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 2 14:08:23 2013 -0700
++
++    Merge pull request #45 from foss-for-synopsys-dwc-arc-processors/arc_support
++    
++    arc: Fix build error
++
++commit c265b4cacb9130f042699a85de9c7242b3f49cc3
++Merge: f4b843f d918d47
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 2 14:08:23 2013 -0700
++
++    Merge pull request #45 from foss-for-synopsys-dwc-arc-processors/arc_support
++    
++    arc: Fix build error
++
++commit f4b843f83710ac378c48abd87fe66bb519d30d2e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 2 17:01:15 2013 -0400
++
++    Don't align stack for win32
++
++commit f3cd39345713db8e414cf642b6cb65a4cfe6018c
++Merge: 666f3e7 6aa1590
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 2 13:17:57 2013 -0700
++
++    Merge pull request #51 from vbudovski/for_upstream
++    
++    Don't use 16 byte aligned stack for WIN32
++
++commit 666f3e71b56d92c49fcd2d7f349b8f8ebca0f8a3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Oct 26 09:12:42 2013 -0400
++
++    Add more credits to README.  Tidy up.
++
++commit 73ada14e756bad97fad0e6915a821a3c7e079f81
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Oct 26 09:09:45 2013 -0400
++
++    Update README
++
++commit d3372c54ce7117e80d389ba875dc5b6b2213c71e
++Author: Mark H Weaver <mhw@netris.org>
++Date:   Sat Oct 26 08:30:06 2013 -0400
++
++    Fix N32 ABI issue for MIPS.
++
++commit d6716aba8118eb0513885cfe557bedebb7016e8b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 15 15:42:49 2013 -0400
++
++    Update travis-ci build dependencies to include texinfo
++
++commit 16b93a211bcfbe4bd0efdcf94de225a71aa0ee02
++Author: Sandra Loosemore <sandra@codesourcery.com>
++Date:   Tue Oct 15 15:33:59 2013 -0400
++
++    Add nios2 port.
++
++commit 2f5626ce02fce8267ab48ceb6d7d0ed7d672a75e
++Author: Sandra Loosemore <sandra@codesourcery.com>
++Date:   Tue Oct 15 15:32:16 2013 -0400
++
++    Fix testsuite bug
++
++commit f64e4a865557e440774436b4c2b2fd7374290e97
++Author: Marcus Shawcroft <marcus.shawcroft@arm.com>
++Date:   Tue Oct 15 15:20:14 2013 -0400
++
++    Fix many.c testcase for Aarch64
++
++commit 128cd1d2f358f26d9fa75a27cf2b30356f5dd903
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 8 06:45:51 2013 -0400
++
++    Fix spelling errors
++
++commit ff06269d707cafbfef2a88afb07a79c9d1480c5f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 8 06:32:18 2013 -0400
++
++    Update README for M88K and VAX
++
++commit d2fcbcdfbea750d1f6a9f493e2e6c4d5ffa71b34
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 8 06:27:46 2013 -0400
++
++    Add m88k and VAX support. Update some configury bits.
++
++commit 6aa15900accc0a648cdebf11ec11d11697ebfffd
++Author: Vitaly Budovski <vbudovski@gmail.com>
++Date:   Thu Sep 5 12:05:06 2013 +1000
++
++    Don't use 16 byte aligned stack for WIN32
++    
++    This fixes a crash when accessing __stdcall functions in Python ctypes.
++
++commit 3b44d41156149af8da2a58825fefdfa23274ae7a
++Author: Makoto Kato <m_kato@ga2.so-net.ne.jp>
++Date:   Wed Jul 10 15:34:53 2013 +0900
++
++    Fix build failure when using clang for Android
++    
++    clang for Android generates __gnu_linux__ define, but gcc for Android doesn't.  So we should add check it for Android
++
++commit d918d47809c174d62283306b282749f8db93661f
++Author: Mischa Jonker <mjonker@synopsys.com>
++Date:   Mon Jul 8 15:51:36 2013 +0200
++
++    arc: Fix build error
++    
++    One part of the patch for ARC support was missing in the upstreamed
++    version.
++    
++    Signed-off-by: Mischa Jonker <mjonker@synopsys.com>
++
++commit d3d099b40c122550279789200263346f120f6909
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jul 2 16:11:38 2013 -0400
++
++    little-endian ppc64 support
++
++commit 0f8690a84c874ec09a090c8c6adfb93c594acac6
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jul 2 15:54:40 2013 -0400
++
++    Rebuild for ARC additions
++
++commit f88118b345f27c46f5445d6e4832c498ff9a6d85
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jul 2 15:51:27 2013 -0400
++
++    Revert "Merge pull request #36 from abergmeier/emscripten_fix"
++    
++    This reverts commit 6a4d901dde7b3f87984c563505717cde3113d16e, reversing
++    changes made to b50a13b9c07ec09af4b9697e482acdad571e6961.
++
++commit 6a4d901dde7b3f87984c563505717cde3113d16e
++Merge: b50a13b 587002c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jul 2 12:12:34 2013 -0700
++
++    Merge pull request #36 from abergmeier/emscripten_fix
++    
++    Fixes for building with Emscripten
++
++commit b50a13b9c07ec09af4b9697e482acdad571e6961
++Merge: 767f1f9 b082e15
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jul 2 12:10:26 2013 -0700
++
++    Merge pull request #44 from foss-for-synopsys-dwc-arc-processors/arc_support
++    
++    Add ARC support
++
++commit 767f1f96e5282da44d7340e6815e9820a3f78e39
++Merge: c3c40e0 b8a91d8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jul 2 12:08:04 2013 -0700
++
++    Merge pull request #43 from JensTimmerman/__m128
++    
++    added include for xmmintrin.h
++
++commit b8a91d81be77d479327fdb6bdd9fdae6d18e6e63
++Author: Jens Timmerman <jens.timmerman@ugent.be>
++Date:   Tue Jul 2 10:57:37 2013 +0200
++
++    added include for xmmintrin.h
++
++commit b082e15091961373c03d10ed0251f619ebb6ed76
++Author: Mischa Jonker <mjonker@synopsys.com>
++Date:   Mon Jun 10 16:19:33 2013 +0200
++
++    Add ARC support
++    
++    This adds support for the ARC architecture to libffi. DesignWare ARC
++    is a family of processors from Synopsys, Inc.
++    
++    This patch has been tested on a little-endian system and passes
++    the testsuite.
++    
++    Signed-off-by: Mischa Jonker <mjonker@synopsys.com>
++
++commit cc9b518687e46b0d1acafdd4bc3f3b281c25a3d9
++Author: Marcin Wojdyr <wojdyr@gmail.com>
++Date:   Tue May 14 15:01:23 2013 +0200
++
++    Update libffi.pc.in
++    
++    use -L${toolexeclibdir} instead of -L${libdir}
++    to be consistent with Makefile.am
++
++commit 587002c092cffe6e7a8d7028f246c241d03b738c
++Author: Andreas Bergmeier <andreas.bergmeier@gmx.net>
++Date:   Fri Apr 19 17:12:24 2013 +0200
++
++    Enable disabling of libtool on platforms where it does not work (e.g. LLVM).
++    Build libraries normally then.
++
++commit c3c40e0290377d7cf948b072eedd8317c4bf215e
++Merge: ede96e4 4750e3c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 30 05:24:14 2013 -0700
++
++    Merge pull request #34 from davidsch/armhf
++    
++    Fix ARM hard-float support for large numbers of VFP arguments
++
++commit 4750e3c662fd9569cb3e2d28f539685fd1ca8caf
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Thu Mar 28 16:56:36 2013 +0100
++
++    update changelog
++
++commit 9708e7cf09f1bf815f4d6485eb1f180fabb35804
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Wed Mar 27 19:31:04 2013 +0100
++
++    folow the ARM hard-float ABI in ffi_prep_incoming_args_VFP
++
++commit b41120981e5e49ca2da10b94b154775f50da5f36
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Wed Mar 27 16:38:35 2013 +0100
++
++    create separated versions of ffi_prep_incoming_args_* for SYSV and VFP ABIs.
++    
++    The different versions will be called depending on the value of cif->abi
++
++commit dd26f1f39c54861c5b91931f0f37a72942c2a072
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Thu Mar 28 15:39:01 2013 +0100
++
++    add a failing test for closures on ARM hardfloat
++
++commit 3c1608613ab3c2184222b98c5482cddedd6b559b
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Tue Mar 26 19:24:47 2013 +0100
++
++    extend ffi_prepare_args for FFI_VFP (hard-float ABI), fixing an issue with passing VFP arguments in VFP registers and the stack, while at the same time not using all core registers.
++
++commit 0f2ff2d4c92719be8936179f9ab674f4d1a3fd14
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Tue Mar 26 19:22:02 2013 +0100
++
++    separate ARM ffi_prepare_args in a version implementing the simple SYSV calling convention and one for the hard-float calling convention
++
++commit 3a352b8a8252400a83de22c7c424bf1887b4a2ef
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Tue Mar 26 14:24:04 2013 +0100
++
++    move the hardfloat specific argument copying code to the helper function
++
++commit 5df6b7944a4225b6eb329f3886be64e04e966f29
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Tue Mar 26 14:02:21 2013 +0100
++
++    extract setting of arguments to be passed to a helper function
++
++commit 7d1048c471bb4b1f9d67a9e9f8e95f9a1d2e6d45
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Tue Mar 26 11:33:33 2013 +0100
++
++    extract code to align the argument storage pointer to a helper function
++
++commit b9f013788f0f384c423ad963475aaacb55598135
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Mon Mar 25 13:27:36 2013 +0100
++
++    add a testcase, that on ARM hardfloat needs more than the 8  VFP argument registers to pass arguments to a call
++
++commit 2fbdb0f231cafdb77b025d3cd8afe90cda99b3ba
++Author: David Schneider <david.schneider@bivab.de>
++Date:   Mon Mar 25 13:26:02 2013 +0100
++
++    use the absolute value to check the test result against an epsilon
++
++commit ede96e4eb660bbf3e0fe048135efa8106f48af5d
++Merge: f22ab3c 9e34992
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 17 18:38:21 2013 -0400
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit f22ab3c6877cbdd07f058b68816b0086b1cb0e1e
++Merge: 12b1886 d08124b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 17 18:34:54 2013 -0400
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 9e34992a5ea2fda1dba5875bf96dc91a7230f51f
++Merge: 12b1886 d08124b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 17 18:34:54 2013 -0400
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 12b1886d7b1f8aa264b1d348bfa47a0e14712df4
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 17 18:32:12 2013 -0400
++
++    cygwin fix & updates for 3.0.13
++
++commit d08124bedf2c6d61874fe215404783aeb9f6f1ac
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 17 18:32:12 2013 -0400
++
++    cygwin fix & updates for 3.0.13
++
++commit cb32c812d04d1dfa72002cc04924e7e4fef89e02
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Mar 17 09:27:55 2013 -0400
++
++    Fix lib install dir
++
++commit efd7866a361a6f636bae8400d26c6811e56ca207
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 08:35:57 2013 -0400
++
++    2.0.13rc1
++
++commit ff647ad4dff2f07dd153f295a1f70b1d906cd6ca
++Merge: 4acf005 d9dd417
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 08:20:40 2013 -0400
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++    
++    Conflicts:
++    	ChangeLog
++
++commit 4acf0056f55c757490dae6c29a65b0321327ea8a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 08:18:45 2013 -0400
++
++    Build fix for soft-float power targets
++
++commit 675c9839224e4268187f1ec6f512127f9db555d0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 08:12:38 2013 -0400
++
++    Documentation fix
++
++commit 8a286f570ccd41db81f74ea7f248da62241d898a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 08:01:19 2013 -0400
++
++    Fix for m68000 systems
++
++commit d9dd417b09566af55b7b3000bb53ccaf2e1d6c92
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 08:01:19 2013 -0400
++
++    Fix for m68000 systems
++
++commit 215763d012a944d95406b394d6013b80d220e870
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 07:57:35 2013 -0400
++
++    Update configury.
++
++commit 9180d8f39c9b6afe17b78277c2711a5d9948e824
++Merge: 2fb527a 7e1b326
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 07:46:55 2013 -0400
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 2fb527a017a4943e176a489ff103231b86464b59
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 07:46:38 2013 -0400
++
++    Add Meta processor support
++
++commit 211a9ebf4d1a9801e15e103566aed2b8c42790be
++Merge: f308faf ee18766
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 04:24:40 2013 -0700
++
++    Merge pull request #32 from alex/patch-1
++    
++    Fix for a crasher due to misaligned stack on x86-32.
++
++commit 7e1b32649efd24814e86172e196f390566f9e970
++Merge: f308faf ee18766
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 16 04:24:40 2013 -0700
++
++    Merge pull request #32 from alex/patch-1
++    
++    Fix for a crasher due to misaligned stack on x86-32.
++
++commit ee18766b169811426c14b011fbb46d81e344f926
++Author: Alex Gaynor <alex.gaynor@gmail.com>
++Date:   Thu Mar 14 15:00:33 2013 -0700
++
++    Fix for a crasher due to misaligned stack on x86-32.
++    
++    Full information on reproduction (using Python's ctypes available here: http://bugs.python.org/issue17423)
++
++commit f308faf1eabaf8dc24966ab17fbf94368f46b9c7
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Feb 11 14:25:13 2013 -0500
++
++    Add moxie support.  Release 3.0.12.
++
++commit 4ea22e54e3b143fe05c413f6dddd236af6bcbfb2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Feb 10 08:48:38 2013 -0500
++
++    Update README
++
++commit 10e77227b6ae85f46f28590bfb09ca3608554358
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Feb 10 08:47:26 2013 -0500
++
++    mend
++
++commit a9521411a53d58f2bf88199242200ceb0d4dae3a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Feb 9 06:54:40 2013 -0500
++
++    sparc v8 and testsuite fixes
++
++commit 70b11b47eea93bf43627588d494d0b3b0d062481
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 16:12:19 2013 -0500
++
++    Fix small struct passing on ppc
++
++commit 63ba1fa79f7c4ce42de848debe233aab31aecb51
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 15:18:19 2013 -0500
++
++    Remove xfail for arm*-*-*.
++
++commit 24fbca4c1d57d4ea628c0a8ba643684daf54a37e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 14:19:56 2013 -0500
++
++    Fix typo
++
++commit b0fa11cb0a94ce6baca058eab9b10e40475e71d6
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 14:17:13 2013 -0500
++
++    More man page cleanup
++
++commit 8bd15d139a58a6e46dc90a1cb2d89f59f32f06c7
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 13:56:37 2013 -0500
++
++    Fix many.c testcase for ppc
++
++commit 7aab825cf198be85490d3cd80e778d415d85ad9b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 13:26:21 2013 -0500
++
++    Add missing files to dist
++
++commit cb03ea8f4eb08024e44abe4392edc77b89fbfbad
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 12:25:18 2013 -0500
++
++    sparc v9 fixes for sun tools
++
++commit 35ee8d44f31dd3d3b88083c837dc351593e13cc2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 8 07:12:41 2013 -0500
++
++    Fix microblaze big-endian struct issue
++
++commit 9db7e1a958fc484ba149efe027008b9a170395fb
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 21:06:08 2013 -0500
++
++    Fix botched sparc patch. Update version.
++
++commit ce0138e61455f268af326e26908b9680ec2c4bea
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 18:04:01 2013 -0500
++
++    Update bug report address. rc2.
++
++commit fd07c9e40451e0ec1d0475cd54a83d45ccaea2c0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 18:00:36 2013 -0500
++
++    Add cache flushing routine for sun compiler on sparc solaris 2.8
++
++commit ed6ae9501b2bab45daf93b4935eb0c977635b763
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 16:43:36 2013 -0500
++
++    Add libtool-ldflags. Define toolexeclibdir for non-GCC builds.
++
++commit ffef2e046aaec853be356f0b8770a335185ea9cf
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 15:47:01 2013 -0500
++
++    x32 and libtool fixes
++
++commit 95eecebb2858dc6f1495a61072ff36d0a8127144
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 15:32:46 2013 -0500
++
++    Remove a.out cruft from dist
++
++commit 176aa9d2e23d9cd57d6f250692d910b408f9a651
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 15:29:22 2013 -0500
++
++    Fix GCC usage test and update README
++
++commit f3a4f3fdde89b04d66983a42a25d09161c5d4d54
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 7 09:57:20 2013 -0500
++
++    Fixes for AIX xlc compiler.
++
++commit 522f8fef49848927482bc63c94afaea5b84e5ec1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 6 20:31:31 2013 -0500
++
++    Fix man page. Clean out junk.
++
++commit c4dfa259eb4e8e6f4c397868d7fee80aa0bb6a12
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 6 17:43:24 2013 -0500
++
++    Bump soversion
++
++commit f62bd63fe6123cadedb8b2b2c72eb549c40fbce9
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 6 17:38:32 2013 -0500
++
++    Release candidate 1
++
++commit f7cd61e9e68a4a51147df04d75bfe5b91b9d9286
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 6 17:38:04 2013 -0500
++
++    Fix pkgconfig install bits
++
++commit 6a790129427121f7db2d876e7218a3104e6d2741
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 6 17:37:15 2013 -0500
++
++    Work around LLVM ABI problem on x86-64
++
++commit 370112938e705128fd5dd4017fc1a1210bd0271a
++Merge: bada2e3 bcc0c28
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Jan 27 05:09:04 2013 -0800
++
++    Merge pull request #28 from jralls/master
++    
++    Reorder x86_64 checks
++
++commit bcc0c28001b6d427d5cd8037d2e3c892babc6b4c
++Author: John Ralls <jralls@ceridwen.us>
++Date:   Sat Jan 26 15:21:14 2013 -0800
++
++    Reorder x86_64 tests
++    
++    So that darwin and cygwin/mingw are tested before the generic check --
++    which allows them to actually be set.
++
++commit bada2e326d9a9acf3ae40cfa4f5d7a9ba97b2ea8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 08:02:07 2013 -0500
++
++    Update README
++
++commit 655bb8f3690feba8e840a5f1854b1d78ed08f692
++Merge: 1035ffb 840f975
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 08:01:24 2013 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit 1035ffb2f468e1a1c401d58cff7e7abb69838e68
++Merge: aeb8719 4086024
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 07:55:53 2013 -0500
++
++    Update README
++
++commit 840f975866052fdd91b2c224d56e01ae5900b60d
++Merge: aeb8719 4086024
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 07:55:53 2013 -0500
++
++    Merge branch 'master' of github.com:/atgreen/libffi
++
++commit aeb8719a34756969970603fca4568530d56708af
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 07:37:30 2013 -0500
++
++    New microblaze support
++
++commit 40860245a4fd91a1b88adc9171ec993c549e45d5
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 07:37:30 2013 -0500
++
++    New microblaze support
++
++commit 20cae32b152b43679ae65a85db9a1c6bb8a143dd
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 07:07:38 2013 -0500
++
++    Xtensa support
++
++commit 9742f91782faef4a15941508a22c408fb7d1d227
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 21 07:03:41 2013 -0500
++
++    Mention IBM XL compiler support on AIX.
++
++commit f03eab08248f122ce3b623a18df9e19fae1b6e98
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 11 17:14:11 2013 -0500
++
++    Remove obsolete inline test functions
++
++commit 05fbe1faedc7b2580d5f14010d00e9e3cee73951
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 11 16:54:40 2013 -0500
++
++    xlc compiler support
++
++commit 0b4986a7889ed1864674192228f1162c1b5770a8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 11 11:19:52 2013 -0500
++
++    [travis] install dejagnu with sudo
++
++commit 3c337eef51ab9a4993fc875bfa26289dd6a08881
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 11 11:18:14 2013 -0500
++
++    [travis] install dejagnu
++
++commit 90720962ce1baf9fc35d1bde1738102bcd5bd5ed
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 11 10:57:30 2013 -0500
++
++    Add first travis config file
++
++commit bff052d9cd5be41ba9e47c76114054af487d3c30
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 11 10:24:32 2013 -0500
++
++    32-bit x86 fix and more
++
++commit cd41aeab6176f839167955c016ecc19f65f75df3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 17:25:45 2013 -0500
++
++    Add compiler column to table
++
++commit 8bf987d4df7c4d21435b9211f6cc86abf5904b42
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 17:24:51 2013 -0500
++
++    Fix for sunpro compiler on Solaris
++
++commit 3ee74fd6dc8ccd32b608bbff73526838fc34f70b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 17:15:03 2013 -0500
++
++    Update documentation version.
++
++commit 13e2d7b92557a9511a0414df82bf2df3edc55cba
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 10:52:02 2013 -0500
++
++    Handle both 32 and 64-bit x86 builds regardless of target triple
++
++commit 5141543000fc86a3d49a907a2313713ee79e504d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 07:35:53 2013 -0500
++
++    Don't run EH tests with non-GNU compiler
++
++commit 56ba8d86f47937a0afb81a2b9e77c9d235d9db45
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 07:25:10 2013 -0500
++
++    Don't use warning checking macro with sun compiler
++
++commit 6a028caec1b2c7904feb4c4f9cb7e1125e1d1b60
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Jan 10 01:19:43 2013 -0500
++
++    Don't use GCCisms to define types when
++    +       building with the SUNPRO compiler.
++
++commit 2d9b3939751b3ef9739049509d353ade10b32a8f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 9 21:14:54 2013 -0500
++
++    Fix for closures with sunpro compiler
++
++commit 8308984e479e3274a36e98e8272b5adbb6b774c2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jan 8 15:14:21 2013 -0500
++
++    Make sure we're running dejagnu tests with the right compiler.
++
++commit f26c7ca67147450db2fe25ea932944e6cf145d5c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jan 8 14:47:05 2013 -0500
++
++    Make compiler options in dejagnu runs compiler specific
++
++commit 74c776e21907fc2e59257c021f23077f8b7966cb
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jan 8 12:25:54 2013 -0500
++
++    Switch x86 Solaris to X86 from X86_64
++
++commit 8962c8c8d06803e310bac0ffc8e84ea15daeff3f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jan 8 12:22:24 2013 -0500
++
++    Fix read-only eh_frame test
++
++commit 35ddb69c2b49746d940e919ca226ecc1be94f14a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jan 8 07:53:37 2013 -0500
++
++    Only emit DWARF unwind info when building with GCC
++
++commit f7879bc3f3a8d0bbfcc38771732c160a58ba9cd8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Jan 8 07:30:28 2013 -0500
++
++    Testsuite fix for Solaris vendor compiler
++
++commit 67cea90fc0897021466fd102671019d30db474cd
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 7 06:30:24 2013 -0500
++
++    mend
++
++commit 0de3277b18cf54be3b81d509b9be9b47d9bc1e82
++Author: Thorsten Glaser <tg@mirbsd.de>
++Date:   Mon Dec 3 00:02:31 2012 +0000
++
++    Testsuite fixes (was Re: [PATCH] Fix libffi on m68k-linux-gnu, completely)
++    
++    Dixi quod…
++    
++    >although I believe some 3.0.11 checks to be broken:
++    
++    And indeed, with a few minor changes on top of git master,
++    I still get a full run of PASS plus one XPASS on amd64-linux!
++    
++    With the other patches (from this message’s parent) and
++    these applied, I get a full PASS on m68k-linux as well.
++    
++    So, please git am these three diffs ☺
++    
++    bye,
++    //mirabilos
++    --
++    FWIW, I'm quite impressed with mksh interactively. I thought it was much
++    *much* more bare bones. But it turns out it beats the living hell out of
++    ksh93 in that respect. I'd even consider it for my daily use if I hadn't
++    wasted half my life on my zsh setup. :-) -- Frank Terbeck in #!/bin/mksh
++    From 5cb15a3bad1f0fb360520dd48bfc938c821cdcca Mon Sep 17 00:00:00 2001
++    From: Thorsten Glaser <tg@mirbsd.org>
++    Date: Sun, 2 Dec 2012 23:20:56 +0000
++    Subject: [PATCH 1/2] Fix tests writing to a closure retval via pointer casts
++    
++    As explained in <Pine.BSM.4.64L.1212022014490.23442@herc.mirbsd.org>
++    all other tests that do the same cast to an ffi_arg pointer instead.
++    
++    PASS on amd64-linux (Xen domU) and m68k-linux (ARAnyM)
++    
++    Signed-off-by: Thorsten Glaser <tg@mirbsd.org>
++
++commit 8f4772f383abd71cfa141c8a70ba11c1aa4ebe2c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 7 06:14:53 2013 -0500
++
++    m68k fixes for signed 8 and 16-bit calls.
++
++commit ea7f8440d58afbebb181e295ff564fdf3d6590a0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jan 4 09:09:32 2013 -0500
++
++    remove gcc-ism
++
++commit f06c0f10377ac04eeba5e632dbe5c62c629df4e6
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 09:39:17 2013 -0500
++
++    Add missing ChangeLog entry and generated files.
++
++commit 1f8675d4c101d19d67ca0a55ff2ba973349558ad
++Merge: 335f419 f6b58d2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 06:34:38 2013 -0800
++
++    Merge pull request #26 from rofl0r/master
++    
++    fix build error on ppc when long double == double
++
++commit 335f419a86090cda9f215d149572f9481c3ad034
++Merge: 53236d5 6d6f711
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 06:30:03 2013 -0800
++
++    Merge pull request #23 from rurban/master
++    
++    cygwin/mingw shared libs need libtool LDFLAGS = -no-undefined
++
++commit 53236d5061034cc0a7f4647fc1bd05ba1aeb3d2a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 09:24:55 2013 -0500
++
++    Regenerate files
++
++commit 72222ca3fbe560e13c8dc89ca441b28b7cc74daf
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 09:06:38 2013 -0500
++
++    Update texinfo.tex
++
++commit 1e326c95431fc9896422fa36659f3e833852579c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 09:05:02 2013 -0500
++
++    Update config.guess and config.sub
++
++commit cb6671f5b8a9596ff968c6b6c304f70adf71b368
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:56:07 2013 -0500
++
++    Missing .gitignore changes for xcode support
++
++commit ebbe77966855395a2a47ed2c09a38f93eb0481cf
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:54:05 2013 -0500
++
++    missed x32 libtool patch.
++
++commit 4394096da0aca0dd422b479a043c18b4f05c5770
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:51:35 2013 -0500
++
++    missed trampoline_table patch. Move to GCC.
++
++commit ed7a59c3ff7c84bd95c374a5aff21599f705e6dc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:48:01 2013 -0500
++
++    Windows symbol export fix.  Move to GCC.
++
++commit ccee09a4ff843b11c7d8b6819776f57d187305c7
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:41:55 2013 -0500
++
++    +2012-03-21  Peter Rosin  <peda@lysator.liu.se>
++    +
++    +       * testsuite/lib/target-libpath.exp [*-*-cygwin*, *-*-mingw*]
++    +       (set_ld_library_path_env_vars): Add the library search dir to PATH
++    +       (and save PATH for later).
++    +       (restore_ld_library_path_env_vars): Restore PATH.
++
++commit 089dbce7cc0889eb26444d89ae062c73c69f26f0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:37:35 2013 -0500
++
++    med
++
++commit 980a334c42b4b0eff32e55929ec6727d1326b05d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 07:36:42 2013 -0500
++
++    Test GCC update
++
++commit 8bad679ade5000e57cdc9cacde22e8b99840930f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 08:28:35 2013 -0500
++
++    New stand-alone patch
++
++commit 981c32ee115e9f0d6546a74592875e138222a9d1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Jan 2 07:34:03 2013 -0500
++
++    Merge with GCC.  Eliminate quilt bits.
++
++commit 61a054929517fb80c437ba71c91f3e20cfff581a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Nov 28 06:07:41 2012 -0500
++
++    Refresh config.guess and config.sub
++
++commit f6b58d2bdc0a24ce94dedce59802f091979df265
++Author: rofl0r <retnyg@gmx.net>
++Date:   Thu Nov 22 16:26:21 2012 +0100
++
++    fix build on ppc when long double == double
++
++commit 69da33a0761aeac73f9e9646269da61c906d6020
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Nov 12 15:25:47 2012 -0500
++
++    Pull in config.sub for aarch64 support and more
++
++commit f680b598b7bdde325ac9349e8c35151c228bf2df
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Nov 6 16:00:40 2012 -0500
++
++    Add missing aarch64 configury bits
++
++commit dfadfb19853c57c8623c436d0ef2bdafab24b433
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Oct 31 06:46:41 2012 -0400
++
++    Rebase for ppc64 fix
++
++commit e944b8c7eb1e2eeb9c0f3b9742b4d7f476860ce1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 30 14:06:09 2012 -0400
++
++    Add PaX work-around
++
++commit 9ccd51be1fdeb99f8b4f42f905166c2abbba8ac0
++Merge: f342996 fa5d747
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 30 13:37:37 2012 -0400
++
++    Fix commit conflicts
++
++commit f342996cb50eb23b868afcff5ac0cdbb6b505d63
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 30 07:42:27 2012 -0400
++
++    Darwin12 fix
++
++commit 58e8b66f70cef2e3c9b0e5a707b45d634cbbf5d9
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 30 07:07:19 2012 -0400
++
++    AArch64 port
++
++commit fa5d747905472571fd472c07d4726017624f66b3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 30 07:07:19 2012 -0400
++
++    AArch64 port
++
++commit 6993a6686f43f2313b18142c1e96189a27db2aa3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Oct 30 06:59:32 2012 -0400
++
++    Fix autoconf macros
++
++commit 70084e70ddb13b29dd05c751b1904de206bbe790
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Oct 12 23:55:06 2012 -0400
++
++    Update Tile* port info
++
++commit 9c00a3f6742d61404b31268cc773e7130ff43331
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Oct 12 16:46:06 2012 -0400
++
++    TILE-Gx/TILEPro support
++
++commit 048d2f41c3a6664b4b64bf21e804686662da4160
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Oct 11 10:55:25 2012 -0400
++
++    Rebase
++
++commit 6d6f71108064f5069edd7bf771059d3b82640135
++Author: Reini Urban <rurban@cpanel.net>
++Date:   Sat Jul 7 12:42:00 2012 -0500
++
++    cygwin/mingw shared libs need libtool LDFLAGS = -no-undefined
++    
++    otherwise only static libs are created.
++
++commit d330f19292da8f39a78a9e2b0ba08df8094e3bc5
++Author: Nicolas Lelong <rotoglup>
++Date:   Sat May 5 09:37:02 2012 -0400
++
++    iOS build fixes.
++
++commit 09b23cfc1d6d15361eee18818851fd3cacb26559
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 27 08:29:48 2012 -0400
++
++    Update README with Blackfin/uClinux support
++
++commit 213ed15c70e72d666154c08e2b41dae3f61f20d3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 27 01:34:15 2012 -0400
++
++    Add blackfin supprt from Alexandre Keunecke.
++
++commit ff3d76fd427382ce7d2b2ed54acdd0bce470ca4f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Apr 11 23:16:48 2012 -0400
++
++    3.0.11
++
++commit 7e0a412c4fd9cbe77b467a9bf86f56aea62632c3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Apr 11 22:47:44 2012 -0400
++
++    Update files to ship
++
++commit 39e6a5860416f7bad992149817e1da1ba7c460d4
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Wed Apr 11 22:39:46 2012 -0400
++
++    More mac/ios build improvements
++
++commit 853cc722a16f8d1254573ef3bb73c7b8f3d8a110
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Apr 10 06:33:33 2012 -0400
++
++    Fix typo for darwin targets
++
++commit 3f5023068cda07a3dd6dacbaa875a5b5fc96d4bb
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 6 20:34:51 2012 -0400
++
++    mend
++
++commit ebb8e8945681ce0af7a5c47a980287e8ece84b84
++Author: Mike Lewis <mikelikespie@gmail.com>
++Date:   Fri Apr 6 20:02:08 2012 -0400
++
++    Build iOS library with xcode
++
++commit a098b44f4c592c2192fcdef4fad6108eb3f4301c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 6 17:04:35 2012 -0400
++
++    Reapply missing testsuite changes for arm
++
++commit 10d1e51393f08c14045db85843208f44f9f1e9ba
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 6 11:57:14 2012 -0400
++
++    Update to rc4.  Upgrade autoconf version.
++
++commit 9bcc884276dc0a807b2605e510b11b1740dd9aa2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 6 11:53:07 2012 -0400
++
++    Fix Linux/x32 reference in README
++
++commit a044a56b1cd2a0924f5ec0d6b5a5089d14fcd1a1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 6 10:39:10 2012 -0400
++
++    Linux/x32 libtool fix
++
++commit 59bb61a36661b972e8443531d3b7bc736e131a4b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Apr 6 08:26:14 2012 -0400
++
++    Update libtool version, README, tests dists
++
++commit f2981454cbe25cf9411b710f46c5f5552003a123
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Apr 5 15:45:19 2012 -0400
++
++    Revert debug code changes
++
++commit 39dccddb606f6fdb8dcb177d416e884041da6e30
++Author: Zachary Waldowski <zwaldowski@gmail.com>
++Date:   Thu Apr 5 12:32:41 2012 -0400
++
++    Fix building with Clang for Darwin (OS X 10.6+ and iOS
++     4.0+)
++
++commit 3afaa9a34a81a305227ae8cf4f12b9d0484d055e
++Author: Peter Rosin <peda@lysator.liu.se>
++Date:   Tue Apr 3 07:40:31 2012 -0400
++
++    Fix return_uc.c test case on windows.
++
++commit 65f40c35a2873d8328359ec4512bd0736dbe32c7
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Apr 3 07:35:59 2012 -0400
++
++    Repair ppc build regression.
++
++commit 0a1ab12a8d15caa894116a82249551f23ef65612
++Author: Peter Rosin <peda@lysator.liu.se>
++Date:   Fri Mar 30 08:14:08 2012 -0400
++
++    Various MSVC-related changes.
++
++commit e1539266e6c6dde3c99832323586f33f977d1dc0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Mar 30 00:40:18 2012 -0400
++
++    ARM VFP fix for old toolchains
++
++commit 7c5e60b5f47d725036a72162f136272bc407e3a1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Mar 29 08:48:22 2012 -0400
++
++    Rebase on fixed GCC sources
++
++commit e72ed5eeaa9cfb0fdc86f6b3422734177b659f96
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Mar 21 09:52:28 2012 -0400
++
++    Fix vararg float test
++
++commit bd78c9c3311244dd5f877c915b0dff91621dd253
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Mar 21 08:09:30 2012 -0400
++
++    More cygwin fixes
++
++commit 84d3253f86dad6b4f261231935675d35fd964b05
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Mar 19 23:07:35 2012 -0400
++
++    Rebase post GCC merge
++
++commit 964c5b93f80dcaacf73056b7d15a4d2b4b7a217c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 3 14:46:20 2012 -0500
++
++    abi check fixes and Linux/x32 support
++
++commit 6c194233a5f6f1d274669afc5924a9e1f69d4876
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Mar 3 14:17:54 2012 -0500
++
++    Add -no-undefined for both 32- and 64-bit x86
++    windows-like hosts.
++
++commit 8360bf1cd0aba8db5582266da70467de7e89a57a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 23 07:01:13 2012 -0500
++
++    Ensure that users don't include ffitarget.h directly
++
++commit d578b89619cf3d2baff027b203619dc307fc12e3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 15 00:18:18 2012 -0500
++
++    Fix ABI check regression
++
++commit dee20f8e45c486f5018f31e09bb362992aa498c3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 10 13:06:46 2012 -0500
++
++    Rebased from gcc
++
++commit 4130e1972d001143e5e9f3c6b65f2a6f9524169e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 3 13:18:27 2012 -0600
++
++    Refresh autoconf-archive m4 scripts
++
++commit 1ff9c604bb214b5a305064af1049577ef783730a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 1 16:34:30 2012 -0600
++
++    Rebase from GCC
++
++commit 211060eb8f714af0e935430efa6bb45e8e3ffc5d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 14:24:01 2012 -0500
++
++    Alpha fix
++
++commit 78d9c638ba0de6edfbc603fd65d19c6562663248
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 14:17:24 2012 -0500
++
++    mend
++
++commit afaf3381604bd81803d8a5f3bf4d462299f1aac3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 14:17:13 2012 -0500
++
++    mend
++
++commit 9e9c4aeb77de5608d602109f22100c1c0c79faad
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 14:11:23 2012 -0500
++
++    Add Amiga support
++
++commit 8efc0b1f4027d5a3cbf205e55d422d94e60f3226
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 13:47:38 2012 -0500
++
++    Unlikely fixes
++
++commit 1df51398ae183dc208ba4599ee867278b04d13d3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 13:43:59 2012 -0500
++
++    mend
++
++commit cd2277cc796b96b149cd284ae85326529fe7fb9c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 13:43:38 2012 -0500
++
++    mend
++
++commit 164e6fe04b189746c8bd5810c6e3e919770bb9d4
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 12:41:06 2012 -0500
++
++    m68k fixes
++
++commit c365ee7577bef00cb3c2c0b5224147aea04138d8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jan 23 11:13:18 2012 -0500
++
++    Refresh
++
++commit f22c38bbd93bcc0c04bf26c3e414556b3177c385
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Nov 18 15:13:41 2011 -0500
++
++    Update variadic patch
++
++commit 03e9ee321a3c208f88d2432587ce40b2bb2430ba
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Nov 18 15:13:00 2011 -0500
++
++    Fix cls_double_va.c and update docs
++
++commit 95f31151ec792809cfb80d385350f9f56d95aa25
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 23:46:05 2011 -0500
++
++    Rerun automake
++
++commit 198ed1ef85cf18342627f8d44bc3f12c9975a49d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 23:45:20 2011 -0500
++
++    Update version number
++
++commit 4f17e1f142e805b13959ba2594ee735eae439f4e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 17:22:24 2011 -0500
++
++    Fix last patch
++
++commit ff9454da44859716a5bd4eaa344499288c79694f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 17:18:51 2011 -0500
++
++    Add David Gilbert's variadic function call support
++
++commit ea14ae85e8f54ff046b7fb8a9cfe349475272044
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 16:36:59 2011 -0500
++
++    clean up
++
++commit 52891f8a93f9b8de801cca4cf05639422dc9773e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 16:35:55 2011 -0500
++
++    Add powerpc soft float support
++
++commit c8f1bde8e2566c5a87474b4d08aa934d6d28ee75
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 16:21:02 2011 -0500
++
++    Remove junk file
++
++commit 6a6e7f862f3cc677e19131587caa619e7f9c7ffd
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 16:20:42 2011 -0500
++
++    Fix kfreebsd
++
++commit d52fbed05ccbdee9ed8b9c911cbb4f85b0ff0f2a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 16:13:41 2011 -0500
++
++    Add missing ChangeLog entry
++
++commit 322052ce65c4fdac85bedc24726fd0e0094ba521
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 16:11:49 2011 -0500
++
++    Fix arm wince alignment issue
++
++commit af18df2bc2f52df81e7b5c619bd86db8489dc873
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 15:52:08 2011 -0500
++
++    Remove use of ppc string instructions
++
++commit 236c9391321f83ad40daf03f40c35c9ebc1da6b3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 07:37:40 2011 -0500
++
++    Fix darwin11 build problem
++
++commit c411f140f305ebb00d33c92b7cb2742bcd241b6a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 07:32:36 2011 -0500
++
++    Fix ax_enable_builddir macro on BSD systems
++
++commit 3d56106b07735abef6ae9f032e94f560a0ed2f30
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Nov 12 07:20:24 2011 -0500
++
++    Rebase
++
++commit 8c01954c50bf8ef2e00a3db166060a1b8f83a20d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Sep 6 14:26:32 2011 -0400
++
++    Build assembly files with debug info
++
++commit fed646a2078969f4ce89c29107f1e72e03f4a977
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Sep 6 09:50:20 2011 -0400
++
++    Regenerate configury with missing m4 macros
++
++commit d76441cf71216f8f1e62e7ec852a7f4e21371ec8
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Aug 24 10:14:23 2011 -0400
++
++    Update list of supported OpenBSD systems
++
++commit ee6696fdf4768ba6dd037fb6dd99435afa13816e
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Aug 23 12:30:29 2011 -0400
++
++    3.0.11-rc1. soname bump.
++
++commit c6265c36a91eab8175d0e72db84d8225418f2379
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Aug 23 10:31:33 2011 -0400
++
++    Version 3.0.10
++
++commit cc5e41bf32d18a14dbdd653d52eacdbdc934c392
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Aug 22 16:34:24 2011 -0400
++
++    Fix use of autoconf macros
++
++commit 049d8386ff52399e69a530b55b9feedc8a2589d2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Aug 22 14:50:10 2011 -0400
++
++    Many new patches
++
++commit 3b7efa4e74f0dcebf70b447391987aedd3473306
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Aug 15 13:25:13 2011 -0400
++
++    Revert remove-debug-code patch temporarily (for ARM Fedora release)
++
++commit d992ac54a2a9e7e064ffebcb91e05e7cb86185c7
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jul 29 17:32:53 2011 -0400
++
++    Refresh from GCC
++
++commit 2d3fb36420e09304220ee6c0652bae5eccdb965d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Mar 30 16:54:42 2011 -0400
++
++    Fix darwin EH
++
++commit 30ff28e1d8cd9ed5319f1fbe9c7cccacc8161fb3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Feb 28 15:36:23 2011 -0500
++
++    Fix permissions
++
++commit 09f8f310f4f53a24289682d3d28f4399d7bafc3b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Feb 28 15:36:07 2011 -0500
++
++    More AIX fixes. rc9.
++
++commit 53d7b165642c220aa5166ba350b490802f359b54
++Merge: 18dd85d 3000dc2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Feb 28 15:23:31 2011 -0500
++
++    Merge branch 'master' of https://github.com/landonf/libffi-ios
++
++commit 18dd85d6cb9f3f3eea2a3b70eb4e150045905c55
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 25 16:23:04 2011 -0500
++
++    rc8. fix last patch.
++
++commit 74ee6ea8b42e60d44a3ae8938b1e42a38c1e66b4
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 25 15:52:14 2011 -0500
++
++    rc7.  More AIX fixes.
++
++commit 2541679dbd3db0014890f42192dbf8008ab923fa
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 25 15:09:13 2011 -0500
++
++    Fix ppc32 bug
++
++commit cbb062cc35c518004f1ab45c847f8ec4f66069ad
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Feb 17 20:39:21 2011 -0500
++
++    Another non-GCC configury fix
++
++commit 8cf8878425e9971866fa6b27a3e4914729ad3960
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 15 15:19:49 2011 -0500
++
++    Fix ax_cc_maxopt.m4
++
++commit 24b72070c0937f9000744c77a636f07e04786b6a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Feb 14 15:30:57 2011 -0500
++
++    Fix warning and msvcc patches
++
++commit d72c49e556a8c516e97f6722d1be2f1209c21207
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Feb 13 11:41:05 2011 -0500
++
++    Add missing msvcc.sh
++
++commit 3000dc237f6017a7445d8404097a4f46b73fdd29
++Merge: 55e4a5a 1fbf9dc
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Feb 13 08:55:53 2011 -0500
++
++    Merge remote branch 'upstream/master'
++
++commit 1fbf9dc44feea564e84ad7406d17c5d5906ce0e0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Feb 13 08:06:39 2011 -0500
++
++    Fix bad_abi test. rc5.
++
++commit 90af15ef5c1614b76370c4d13954586fabf9e8e3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Feb 12 12:29:36 2011 -0500
++
++    iOS fixes
++
++commit 55e4a5aa1568558a04aa40f16fc022e459af53e3
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 12:13:46 2011 -0500
++
++    Add support for building a full armv6/armv7/i386 universal iOS library
++
++commit a0c80f279b8733d001cb5e5c5a3289ecb7a6e56a
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 11:43:49 2011 -0500
++
++    Update my e-mail address.
++
++commit 8195e0e11df7a53fa474caa9375f73ca1136ed66
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 11:27:00 2011 -0500
++
++    Fix symbol prefixes on Darwin.
++
++commit 56b3f8cef0f28cefaa0f40fe0cf7c524adef131d
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 11:14:54 2011 -0500
++
++    Modify the ffi_closure structures to hold table/table entry pointers instead of a code buffer.
++    
++    This re-integrates commit da2773e02ab26cc11a7f.
++
++commit 28a00f61ff3f64c4eb2269ce2aea3d493274469e
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 11:01:48 2011 -0500
++
++    Apple assembler support; fixed most gas/ELF-isms.
++
++commit 7f2ea33a80bfced5e48ed7292f3b8f057d54ff8f
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 10:39:18 2011 -0500
++
++    Replace RETLDM macro.
++    
++    The macro is incompatible with Apple's assembler; switch to
++    a simple inline version.
++
++commit 92ff23e77fa586455b427b71f49e1d9502470e6e
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 10:24:49 2011 -0500
++
++    Switch to the current iOS 4.2 SDK.
++
++commit 58fb8ca2dfb89ad70284bb9678d3d4dbb658c8a7
++Merge: cc3fbd9 71c792f
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 10:23:19 2011 -0500
++
++    Merge remote branch 'upstream/master'
++
++commit cc3fbd975ce9366d4c40a6ff6c108f664867bd7c
++Merge: e449a43 f6ab3ed
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 10:21:02 2011 -0500
++
++    Merge branch 'master' of github.com:landonf/libffi-ios
++
++commit e449a43bbe12f8119399928db1ae26adc71dde14
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Feb 12 10:20:42 2011 -0500
++
++    Allow specification of the minimum supported iOS version.
++
++commit 71c792f51bcf3e2f334e5ea1fb1a8b667cb3aedb
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Feb 12 09:33:11 2011 -0500
++
++    rc4
++
++commit 7c7c9f327299331022f6000603a35f2310dfe308
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Feb 12 09:29:29 2011 -0500
++
++    ungccify parts of the build
++
++commit ed62e48b95a0fa60b685f647cb73c9e190eec35c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 11 12:23:58 2011 -0500
++
++    Fix permissions
++
++commit 17d9e9e68ddb1b915a0b9751713033861b598575
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 11 12:23:20 2011 -0500
++
++    Use newer autotools.  Only build debug.c when --enable-debug.
++
++commit 6972a4ffda75761eaab7dfbe0fb1516b255e8e0c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 11 07:32:51 2011 -0500
++
++    Fix xlc build on AIX
++
++commit 1833aa0fb9831eb0725b63e35886c0f6d35df480
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Feb 11 07:11:04 2011 -0500
++
++    sparc ABI test fix.
++
++commit f1fb139b4e283fffdcf205a903943d5e9d2bb2a2
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 18:30:02 2011 -0500
++
++    Fix tests
++
++commit 5cb470331d181c84d5d621e88868327a324a5898
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 15:23:06 2011 -0500
++
++    Fix permissions
++
++commit 269deef6dbbb426695919d3398357fada3bb288c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 15:22:23 2011 -0500
++
++    rc3
++
++commit 42695e72504f647444b8e8e9b90bd24f1e3220e1
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 15:12:35 2011 -0500
++
++    Fix IRIX support
++
++commit a6e56b97f62a3feeb3301c24a2e4cae55e546021
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 15:00:42 2011 -0500
++
++    Add powerpc64-*-darwin* support
++
++commit 747d6c32d4abb07c10c3a1f93579c3929aaa2487
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 14:56:23 2011 -0500
++
++    Add Interix support
++
++commit eab6e41cde382aa07de6c011d514a14c0d62eb47
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 10:15:02 2011 -0500
++
++    Remove README.markdown form libffi-ios
++
++commit 69dbe845f4ee3e6ce8999f17a1e4f2179ef7da89
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 07:38:43 2011 -0500
++
++    Fix xfails
++
++commit f498318c07b95137fe259d86bdbe15347588b84a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 06:26:46 2011 -0500
++
++    Update README for iOS again
++
++commit 630b9c0ac43c7edcbfd892e23c09fb26724f4ac0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 06:24:23 2011 -0500
++
++    Update to rc2
++
++commit 0cad4386fa4c9ea5f8ca88b16247db4e5c8fea90
++Author: Anthony Green <green@moxielogic.com>
++Date:   Wed Feb 9 06:11:46 2011 -0500
++
++    Add ChangeLog entry.  Fix copyright headers.
++
++commit 09cb76f2645bd2c151846e9249d8ea707ba01e8c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 20:39:51 2011 -0500
++
++    Add missing change
++
++commit 2e3a48ccdd54340983c46a29a0b41985e3e789ac
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 20:37:26 2011 -0500
++
++    Fix make dist
++
++commit 5e4814d9928e236a2a4afe84d6e1d4fdaa473206
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 19:46:28 2011 -0500
++
++    fix permissions
++
++commit 5c0cc6f1536aa1738795a97303810a823c7fa2cb
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 19:45:59 2011 -0500
++
++    3.0.10rc1
++
++commit 857fe3de46d2286afa2fe772920ecf4aefa1688f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 19:39:20 2011 -0500
++
++    Clean ups
++
++commit e2214f8adb5577c247452e2cc9f4cbe304d7ca9f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 19:22:56 2011 -0500
++
++    Update README
++
++commit 1106229a5721a659da5c231ec0e8211119615394
++Merge: bc9d0be f6ab3ed
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 19:20:09 2011 -0500
++
++    Add iOS support
++
++commit bc9d0be2958ce475757f34dd2c878948aa77a39f
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 17:04:26 2011 -0500
++
++    3.0.10rc0 changes
++
++commit 3b836249feae6d08d3e6887486e4b9961ddafa09
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 14:28:59 2011 -0500
++
++    Rebase from GCC
++
++commit a26e3940619faeba6de54824c9540c90b1aab513
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 13:56:12 2011 -0500
++
++    copyright updates patch
++
++commit b8099539f00e224107594101e9760b6dc081a056
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 13:50:43 2011 -0500
++
++    Fix msvcc.sh botch
++
++commit dc411e8f99113a34656bfd2d3ae51259972488cc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:49:29 2011 -0500
++
++    Fix HP-UX build
++
++commit 404585d1348e30ac58203bbd876d9131e5aed874
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:44:36 2011 -0500
++
++    Fix sparc v8 aggregate type returns for sun's compiler
++
++commit 19ce713188e193e4522740d24c20170411883d2d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:34:23 2011 -0500
++
++    grammar fix
++
++commit 89284fe55f1a8ad3bddbea796ee00d0e3ba411ce
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:19:19 2011 -0500
++
++    Fix AIX build with IBM XLC
++
++commit ba022c338af97cb18d9f8ed5a607fd483a61c09c
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:12:48 2011 -0500
++
++    fix win64-underscore patch
++
++commit 097e5f3924ee92a3ba6cd72f787da8a3eb14fea3
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:11:00 2011 -0500
++
++    x86 pcrel test part 2
++
++commit ed2c518d960b91d444be74e5a55779a9c4602f3b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 10:10:07 2011 -0500
++
++    x86 pcrel test
++
++commit 0e5843995f46900ef212531281e08b224464f413
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Feb 8 07:52:40 2011 -0500
++
++    Refresh from GCC
++
++commit 5b9cd52784339a42e417174a55e310e214d435f9
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Nov 22 15:19:57 2010 -0500
++
++    win64-underscore patch
++
++commit 2db72615b50eb5c0f29725c02c740a2f0d7fc7d9
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Nov 21 10:50:56 2010 -0500
++
++    Rebase
++
++commit f6ab3edc23dc8fc7c47a31c896044150c23f04b5
++Author: Landon Fuller <landonf@plausible.coop>
++Date:   Wed Oct 27 19:34:51 2010 -0400
++
++    Include the license header in the generated output.
++
++commit cef619462887fa0f360e3ee702d1e04f112b5b38
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Wed Oct 27 13:59:30 2010 -0400
++
++    Add missing copyright/license header.
++
++commit 53f387b203413c9aa6e31f49dbb70d37d816330b
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 19:57:17 2010 -0700
++
++    Minor README fix.
++
++commit 4fbcb5b5fbce11f4b168060e00639db33c85b75b
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 19:50:37 2010 -0700
++
++    Minor README fix.
++
++commit 8e7652ef6acab5db7a29f786686a54f05cdbdc7d
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 19:49:39 2010 -0700
++
++    Add a libffi-ios-specific github README.
++
++commit 83038cf24aa1a92b62b91ffee1dcc25d79243484
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 14:36:45 2010 -0700
++
++    Implement FFI_EXEC_TRAMPOLINE_TABLE allocator for iOS/ARM.
++    
++    This provides working closure support on iOS/ARM devices where
++    PROT_WRITE|PROT_EXEC is not permitted. The code passes basic
++    smoke tests, but requires further review.
++
++commit b00ff3e98fdde622cef617030e14d5356dff988f
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 14:22:26 2010 -0700
++
++    Rename the generated symbol
++
++commit da2773e02ab26cc11a7fe87e985599f35cdf0649
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 14:21:37 2010 -0700
++
++    Modify the ffi_closure structures to hold table/table entry pointers instead of a code buffer.
++
++commit 01d71b7bed41844f80cb9feef20dcc5ece5ba2d0
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 14:21:14 2010 -0700
++
++    Regenerated the autoconf script
++
++commit 19afda0069c42e51c81dca7b10a5cf884b4cdce0
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 14:20:52 2010 -0700
++
++    Enable AC_SUBST for FFI_EXEC_TRAMPOLINE_TABLE
++
++commit 9e1196444e78aef20028c18891f44ebe39a815fd
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 10:43:06 2010 -0700
++
++    Add a hard-coded FFI_EXEC_TRAMPOLINE_TABLE arm implementation.
++    
++    This implements support for re-mapping a shared table of executable
++    trampolines directly in front of a writable configuration page, working
++    around PROT_WRITE restrictions for sandboxed applications on Apple's
++    iOS.
++    
++    This implementation is for testing purposes; a proper allocator is still
++    necessary, and ARM-specific code needs to be moved out of
++    src/closures.c.
++
++commit f38364b399184e682fc3e785084bd497827bc5af
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 10:42:36 2010 -0700
++
++    Fix symbol prefix for ffi_closure_SYSV_inner on Darwin.
++
++commit 36849e7716b77aa25e4175d1f4be1b93dbf47aac
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 09:35:04 2010 -0700
++
++    Whitespace/comment fixes.
++
++commit b764162526854686e579a48b6ac5981f4eb886a3
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 09:04:34 2010 -0700
++
++    Fix the script name (build-iphone.sh -> build-ios.sh)
++
++commit a3d9aa85013341451ea97766485b7a11852d32b2
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 09:03:52 2010 -0700
++
++    Update the autogenerated autoconf/automake files.
++
++commit c71480eaf839f26bbdfcd8965f65ac4d8defddc0
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 09:02:05 2010 -0700
++
++    Update automake/autoconf to conditionally build src/arm/trampoline.S if FFI_EXEC_TRAMPOLINE_TABLE is enabled.
++
++commit 9af9291b73bc5e27ecd949bec8157f20426d65b8
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 08:52:33 2010 -0700
++
++    Add the trampoline table generated by gentramp.sh
++
++commit 68ce0c383ece84f69945d1c8c3fed03f7f9cb5d6
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sun Sep 19 08:38:19 2010 -0700
++
++    Add a shell script that generates the ARM trampoline page.
++    
++    This generates a page of 340 trampolines, aligned within one page. The
++    trampolines use pc-relative addressing to reference config data
++    (context, jump address) from a page placed directly prior to the
++    trampoline page. This can be used on systems -- such as iOS -- that do not
++    support writable, executable memory by remapping the executable page
++    containing the trampolines directly above a newly allocated writable
++    config page.
++
++commit 75af086be8830a8eafe9b1ebda199d788bcb0c62
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 18:12:19 2010 -0700
++
++    Update autoconf files
++
++commit 1ac92cca9b02ef8d6a769f0de1adccd5c9630355
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 18:08:14 2010 -0700
++
++    Add autoconf check for W^X platforms that require a trampoline table.
++    
++    This adds the FFI_EXEC_TRAMPOLINE_TABLE. The flag is enabled for
++    arm-apple-darwin, where PROT_EXEC on writable (or formerly writable) pages is
++    not permitted for sandboxed binaries.
++
++commit be72fbab29b7190c702d8e1ac3d149855e95879d
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 18:02:25 2010 -0700
++
++    Use the correct host triple for arm/darwin
++
++commit 70150bdf4509269965c72f2032bf74f285767afe
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 16:38:03 2010 -0700
++
++    Add missing UNWIND entry; disables .pad on non-EABI targets.
++
++commit 6b452bafaec498df975ba8ac4c99de174e5f74f7
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 16:21:32 2010 -0700
++
++    Apple assembler support; fixed most gas/ELF-isms.
++
++commit 8ddac835b6f8b54ede764d0ea977dee4c82e2d67
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 15:38:06 2010 -0700
++
++    Fix placement of the __APPLE__ macro.
++
++commit 69043d02936bb0579ac59b4ee1ed8dec38c38db7
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 15:32:08 2010 -0700
++
++    Work-around libffi's FP ABI detection.
++    
++    On iOS, we must use the AAPCS floating point return value calling
++    conventions. libffi's ARM implementation will only use these conventions
++    if __SOFTFP__ is defined, which is not the case when GCC's
++    -mfloat-abi defaults to 'softfp' instead of 'soft'. To work around this
++    we manually define __SOFTFP__ for Apple platforms in the ARM-specific
++    sysv.S.
++    
++    See also:
++      http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iPhoneOSABIReference/Introduction/Introduction.html
++      http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf
++
++commit a82e6c354ea805114642a6e440abd0832cb1d23f
++Author: Landon Fuller <landonf@bikemonkey.org>
++Date:   Sat Sep 18 14:44:24 2010 -0700
++
++    Add a stub iOS build script to drive autoconf
++
++commit 84e8de6e9fc19388f6f1102c013b7d0d52940ecc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Aug 6 01:35:12 2010 -0400
++
++    Restore execute permissions
++
++commit 3aeecc9eb1a6feba6549849cdd335c926415a4fc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Aug 5 15:19:00 2010 -0400
++
++    Fix win64-struct-args patch
++
++commit 00d0b59cd13f89ab8b44bd894eb7f0a131fcb472
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Aug 5 14:56:53 2010 -0400
++
++    Fix debug build for windows
++
++commit bda487e87064f27965155459a62dc52a744778d0
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Aug 5 09:02:41 2010 -0400
++
++    Don't use -safeseh with ml64
++
++commit c1d28ba8d5029795af313ffeb81c97efc6d4c847
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Aug 5 08:48:16 2010 -0400
++
++    stdcall-x86-closure-fix
++
++commit 5feacad4a56c85b3f23a267a30b2cf424cd59548
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Aug 5 08:30:04 2010 -0400
++
++    define generic symbols carefully
++
++commit 10ea848900bc3018ac213cef52b44cacbe5cbebc
++Author: Anthony Green <green@moxielogic.com>
++Date:   Thu Aug 5 08:24:27 2010 -0400
++
++    don't copy win64 struct args
++
++commit d14178be4c49c3ada44a9fe9efe11d444372ddab
++Author: Anthony Green <green@moxielogic.com>
++Date:   Fri Jul 23 09:14:00 2010 -0400
++
++    FFI_LAST_ABI fix
++
++commit 3f5b1375ab1e2b8e3d593e21b27097a4a50f9b83
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Jul 12 14:39:18 2010 -0400
++
++    rebase
++
++commit eaf444eabc4c78703c0f98ac0197b1619c1b1bef
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sat Jul 10 08:59:09 2010 -0400
++
++    Fix selinux test
++
++commit 630974152247f100ece4d44f10c3721bb4599fbf
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Wed May 5 20:14:56 2010 -0400
++
++    Micharl Kohler's spelling fixes
++
++commit 9dc9a293f3d4589fcaf02dd4288c8cebaefa508e
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Apr 13 10:33:52 2010 -0400
++
++    Rebase to latest GCC sources
++
++commit f2c2a4fce9b3eca9f39b4f3545118bc256da4a73
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Apr 13 10:19:28 2010 -0400
++
++    Remove warnings and add OS/2 support
++
++commit c0b69e57d529e33d18b658cc5572a21e3663247c
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Mar 30 08:30:22 2010 -0400
++
++    Dan Witte's windows build fixes.
++
++commit 59a259f4d348f593b45f452309f4d020a28051c4
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Mon Mar 15 05:57:51 2010 -0400
++
++    Remove junk file
++
++commit 3de1eb36d37a66829e606421939874d0d60d816d
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Mon Mar 15 05:57:24 2010 -0400
++
++    fix-comments patch
++
++commit c3813b6d7f8a777700f4c5862190c0db148d4de8
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Jan 26 16:48:56 2010 -0500
++
++    Rebuild Makefiles with automake 1.11.1 for CVE-2009-4029.
++
++commit 8d27f68baa365bf883b6053c5f6bc819646d5434
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jan 15 11:35:37 2010 -0500
++
++    Mention recent changes in README
++
++commit ff3cd68b8cf2d9a28cad7aa9beff46236eacec8c
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jan 15 11:27:24 2010 -0500
++
++    Add msvc.sh wrapper
++
++commit cadeba6cb53414a1253582f1719c286665de7b6c
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jan 15 10:46:51 2010 -0500
++
++    Microsoft Visual C port
++
++commit 0739e7dc00db766eb64f502ec4137b817638c9a1
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jan 15 09:48:33 2010 -0500
++
++    Add x86 Sun Studio compiler support
++
++commit edfdfd2e85b8d01d2455934f1d7f4d7eb2f3cf1c
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Wed Jan 13 02:56:19 2010 -0500
++
++    Add closure example doc
++
++commit 7b7a42f221cf171e8d09df34cac6dc1fd8458cc3
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Jan 12 09:14:14 2010 -0500
++
++    Rebase from GCC
++
++commit 4b18d1f73dc7733137869e4ab5725cb90c1c8fde
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jan 1 10:24:27 2010 -0500
++
++    Add x86-64 MingW to README
++
++commit c3042afaf3f84abbbe9c91bf9bc9896b0d9eb003
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Jan 1 08:08:02 2010 -0500
++
++    Reset quilt patches post 3.0.9 merge with GCC
++
++commit b0304e9679bdfec6ac45a57b5c96542697249418
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Thu Dec 31 11:32:40 2009 -0500
++
++    Update version
++
++commit 2e7e03d014d9c9bf40e97ce75cba089ad052fa6b
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Thu Dec 31 07:43:22 2009 -0500
++
++    Final updates before 3.0.9
++
++commit aea706c52825c8eee677ffa7fdbdd3aed1725492
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Dec 29 10:09:31 2009 -0500
++
++    really 3.0.9rc12
++
++commit 0cfe60e9d13f132b88995cfee41f2156344f6fa2
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Tue Dec 29 10:06:04 2009 -0500
++
++    3.0.9rc12
++
++commit 14e2e92e8645804b6940b3e96c98e9f7f384a6b2
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sun Dec 27 21:03:33 2009 -0500
++
++    3.0.9rc11
++
++commit 884402787bf8eaf7ec207085037cf8ace2f660ec
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 12:57:23 2009 -0500
++
++    HPUX support and avr32 test fixes.
++
++commit 01c78756aff22efb1f122f8e93e068d7bf2185c7
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 10:05:18 2009 -0500
++
++    3.0.9rc9
++
++commit 70868464651320268d79c6894db5a50fdc11032a
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 09:58:03 2009 -0500
++
++    Remove xfails for mips and arm
++
++commit 838d4ad920ec85cf5ca3b511221d67f6d9a99024
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 09:57:27 2009 -0500
++
++    Remove a bunch of xfails.
++
++commit 7e37eaaf772f48906e69618c773b0a36c3927de9
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 07:46:50 2009 -0500
++
++    Fix huge_struct for solaris
++
++commit 07cc7a37194bc34064ebed7f2724333a798411c8
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 07:23:04 2009 -0500
++
++    3.0.9rc8
++
++commit 2b9be16ffabc81326128bc1bbdddff8ddc5d13d3
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 07:04:45 2009 -0500
++
++    3.0.9rc8
++
++commit 9458d88f676e9a21ab8993a54e16754b11687419
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 07:02:27 2009 -0500
++
++    Rebase from GCC
++
++commit 6a3412417593f068a04dc6163f4269cb295ad5ca
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Sat Dec 26 06:51:33 2009 -0500
++
++    Add Andreas Schwab's powerpc fix
++
++commit 39c8792ece1043f41f4c395a2ce71f4cf0ff4674
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 21:52:28 2009 -0500
++
++    3.0.9rc7
++
++commit 1d04af52e3e24db69f742064694c22f8df5cc70e
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 09:50:36 2009 -0500
++
++    Updated some mips XFAILs
++
++commit 26e9509c9b7929bc4fcf697071699051a652b1fd
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 02:19:23 2009 -0500
++
++    Clean up ChangeLog.libffi for older patches.
++
++commit 9c157d3215e4393777f83eb6fa801df6528f40d7
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 02:15:40 2009 -0500
++
++    Clean up undefine_AC_ARG_VAR_PRECIOUS patch.
++
++commit d22de05b0bfc480766bc1240615ce2830eee71b8
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 02:04:23 2009 -0500
++
++    Fix patches
++
++commit 1fe3dc7c20dc4dbd8fed0d19c8618027d44ed971
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 01:39:00 2009 -0500
++
++    Add windows support patch.
++
++commit f7c0bc613a88f7dbc2d18b345c10fa438833c170
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Fri Dec 25 01:22:11 2009 -0500
++
++    3.0.9rc6
++
++commit c7fa2da8260258c11ab1dc7ac06fb611a2c1b50f
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Thu Dec 24 07:22:44 2009 -0500
++
++    3.0.9rc6
++
++commit da11bece0fde66fc0268db3a01207dda857e25d2
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Thu Dec 24 05:34:46 2009 -0500
++
++    Release 3.0.9rc5
++
++commit e3399b11edeab546b066bfc18574f3edb905d0dc
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Thu Dec 24 01:09:32 2009 -0500
++
++    Update README
++
++commit 115ab36fceee69740a01ce49bc27e1908cc237b1
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Thu Dec 24 00:22:00 2009 -0500
++
++    Update missing changes for 3.0.9r4.
++
++commit f8c7a245bf5a80bd7e730ec03fcad17c8dcfcb07
++Author: Anthony Green <green@gmachine.(none)>
++Date:   Wed Dec 23 23:46:22 2009 -0500
++
++    Switch to quilt. Rebase to latest GCC.
++
++commit ce806772f02387b9a74f6496a263a368bccd5d59
++Merge: cd98813 dcc1f6b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Oct 5 00:41:35 2009 -0400
++
++    Merge branch 'master' of git@github.com:atgreen/libffi
++
++commit dcc1f6b4f1ffd2713bf68b791a13f85d455c8b1b
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Oct 5 00:29:33 2009 -0400
++
++    More clean up.
++
++commit 2829f5941a223b9d851d8ab6318318e6197d7e01
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Oct 5 00:28:03 2009 -0400
++
++    Clean up
++
++commit cd98813de517ea64041637e3e78d27a001d6d3b4
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Oct 5 00:25:29 2009 -0400
++
++    From Jens Rehsack.  Fix for 64-bit AIX.
++
++commit e4a91de766acc47f6c50f13cc11719a65e23ecba
++Author: Anthony Green <green@moxielogic.com>
++Date:   Mon Oct 5 00:16:17 2009 -0400
++
++    From Abdulaziz Ghuloum.  Adds special case for Snow Leopard.
++
++commit 3425a763bcdaadb8b430226f427ec833afdcc96a
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Oct 4 23:57:29 2009 -0400
++
++    Fix detection of free/openbsd.  From Alexis Ballier.
++
++commit 2340e7a777902de61499d47823ad8d5e0eeb6203
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Oct 4 23:53:17 2009 -0400
++
++    AVR support
++
++commit 5cbe2058c128e848446ae79fe15ee54260a90559
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Oct 4 23:53:11 2009 -0400
++
++    Initial stand-alone patch.
++
++commit c6dddbd02bad9654ed58cdb0feb360934d105dec
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Oct 4 08:11:33 2009 -0400
++
++    Initial commit
++
++commit 5ffc0c37486fb1538bccc0ca7acc807d4f1af932
++Author: Anthony Green <green@moxielogic.com>
++Date:   Sun Oct 4 07:58:22 2009 -0400
++
++    Update version to 3.0.9rc1.  Add more useful things to .gitignore.
++
++commit bd29f83ee9f6fa6b65adee9d3f57834f364d9887
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Sep 29 12:07:26 2009 -0400
++
++    Add .gitignore
++
++commit 9474f853f83e3f0167c1b306177321bfcc93e56d
++Author: Anthony Green <green@moxielogic.com>
++Date:   Tue Sep 29 11:13:02 2009 -0400
++
++    Remove old CVSROOT files.
++
++commit 0c25275ec24bfe2c2c25a000465f0950ef9dd51b
++Author: twall <twall>
++Date:   Wed Aug 19 12:57:34 2009 +0000
++
++    Apply Dave Korn's cygwin/GCC changes
++
++commit 39228c27ed3f677a95b46380a8d31602b5777e1a
++Author: aph <aph>
++Date:   Tue Jun 16 18:00:47 2009 +0000
++
++    2009-06-16  Wim Lewis  <wiml@hhhh.org>
++    
++    	* src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are
++    	supposed to be callee-saved.
++    	* src/powerpc/sysv.S (small_struct_return_value): Fix overrun of
++    	return buffer for odd-size structs.
++
++commit 5e93cc704d127c2c8ae7f5d2cef621145d43e777
++Author: aph <aph>
++Date:   Tue Jun 16 17:41:47 2009 +0000
++
++    2009-06-16  Andreas Tobler  <a.tobler@schweiz.org>
++    
++    	PR libffi/40444
++    	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Add
++    	allow_stack_execute for Darwin.
++
++commit b509af8959dc371b92392c623522ea6f4946a71d
++Author: aph <aph>
++Date:   Tue Jun 16 16:17:52 2009 +0000
++
++    2009-06-16  Andrew Haley  <aph@redhat.com>
++    
++    	* configure.ac (TARGETDIR): Add missing blank lines.
++    	* configure: Regenerate.
++
++commit d57e96dc56ee76fbbb9b59d73aeaa92354db5ecb
++Author: aph <aph>
++Date:   Tue Jun 16 09:59:02 2009 +0000
++
++    2009-06-16  Andrew Haley  <aph@redhat.com>
++    
++            * testsuite/libffi.call/cls_align_sint64.c,
++            testsuite/libffi.call/cls_align_uint64.c,
++            testsuite/libffi.call/cls_longdouble_va.c,
++            testsuite/libffi.call/cls_ulonglong.c,
++            testsuite/libffi.call/return_ll1.c,
++            testsuite/libffi.call/stret_medium2.c: Fix printf format
++            specifiers.
++            * testsuite/libffi.call/huge_struct.c: Ad x86 XFAILs.
++            * testsuite/libffi.call/float2.c: Fix dg-excess-errors.
++            * testsuite/libffi.call/ffitest.h,
++            testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define.
++
++commit b01d6d1982c9e020507029bfd5a58a8c60d111fa
++Author: aph <aph>
++Date:   Tue Jun 16 09:44:54 2009 +0000
++
++    2009-06-16  Andrew Haley  <aph@redhat.com>
++    
++    	* testsuite/libffi.call/err_bad_typedef.c: xfail everywhere.
++    	* testsuite/libffi.call/err_bad_abi.c: Likewise.
++
++commit 35b6ded138591900a88055a8a8ac1fadc29a76d6
++Author: aph <aph>
++Date:   Fri Jun 12 15:29:20 2009 +0000
++
++    2009-06-11  Kaz Kojima  <kkojima@gcc.gnu.org>
++    
++            * testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*.
++            * testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*.
++            * testsuite/libffi.call/err_bad_typedef.c: Likewise.
++
++commit acc46605f2d95d67d69398e7644610f10a157ce3
++Author: aph <aph>
++Date:   Fri Jun 12 14:21:28 2009 +0000
++
++    2009-06-12  Andrew Haley  <aph@redhat.com>
++    
++            * ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c,
++            testsuite/libffi.call/cls_align_uint64.c,
++            testsuite/libffi.call/cls_ulonglong.c,
++            testsuite/libffi.call/return_ll1.c,
++            testsuite/libffi.call/stret_medium2.c: Fix printf format
++            specifiers.
++            testsuite/libffi.special/unwindtest.cc: include stdint.h.
++
++commit 16d1996ed0797bd7c11aca2b0fe7e7748751aaf6
++Author: twall <twall>
++Date:   Thu Jun 11 14:27:42 2009 +0000
++
++    update changelog
++
++commit 92a515c33efe91be3cb0258f01c63aff208489c7
++Author: twall <twall>
++Date:   Thu Jun 11 14:27:28 2009 +0000
++
++    use ffi_closure_alloc instead of stack-based closure
++
++commit e4363160ba9e50167f9ca0a7399d537a1d2cd0ce
++Author: twall <twall>
++Date:   Thu Jun 11 14:26:23 2009 +0000
++
++    remove unused extern
++
++commit 1dc2781d2ba38f5f000ff70069d617fb21e1d2af
++Author: twall <twall>
++Date:   Thu Jun 11 11:36:16 2009 +0000
++
++    remove not-yet-applied changelog entries
++
++commit bb27735fe689dac97ec0dc847ed8d3d519620109
++Author: twall <twall>
++Date:   Wed Jun 10 10:42:36 2009 +0000
++
++    add win64 support
++
++commit b2a54c100c74854a409820817d54617fdda39eb8
++Author: aph <aph>
++Date:   Mon Jun 8 16:50:49 2009 +0000
++
++    2009-06-08  Andrew Haley  <aph@redhat.com>
++    
++    	* testsuite/libffi.call/err_bad_abi.c: Add xfails.
++    	* testsuite/libffi.call/cls_longdouble_va.c: Add xfails.
++    	* testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*.
++    	* testsuite/libffi.call/err_bad_typedef.c: Add xfails.
++    
++    	* testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args.
++    	* testsuite/libffi.call/stret_medium.c: Likewise.
++    	* testsuite/libffi.call/stret_large2.c: Likewise.
++    	* testsuite/libffi.call/stret_large.c:  Likewise.
++
++commit 25723e7141f73d3736d7244b980c89d97db852b6
++Author: aph <aph>
++Date:   Fri Jun 5 13:03:40 2009 +0000
++
++    2009-06-05  Andrew Haley  <aph@redhat.com>
++    
++            * src/x86/win32.S (_ffi_closure_STDCALL): Import from gcc.
++
++commit 70758199c7cd41f411987360ccb302b497a56dc9
++Author: aph <aph>
++Date:   Thu Jun 4 16:29:58 2009 +0000
++
++     2009-06-04  Andrew Haley  <aph@redhat.com>
++    
++            * src/powerpc/ffitarget.h: Fix misapplied merge from gcc.
++
++commit e8bb12563f9aa23ddf36fa6a5b92b16b5c3e1a7f
++Author: aph <aph>
++Date:   Thu Jun 4 14:59:18 2009 +0000
++
++    2009-06-04  Andrew Haley  <aph@redhat.com>
++    
++    	* src/mips/o32.S,
++    	src/mips/n32.S: Fix licence formatting.
++
++commit d66a8e32c3671479e3ce0f6819673e5932ba6b7f
++Author: aph <aph>
++Date:   Thu Jun 4 14:43:40 2009 +0000
++
++    2009-06-04  Andrew Haley  <aph@redhat.com>
++    
++    	* src/x86/darwin.S: Fix licence formatting.
++    	src/x86/win32.S: Likewise.
++    	src/sh64/sysv.S: Likewise.
++    	src/sh/sysv.S: Likewise.
++
++commit 7c3b7fd6b5db746b5b09a718f3044f811372f941
++Author: aph <aph>
++Date:   Thu Jun 4 14:39:20 2009 +0000
++
++    2009-06-04  Andrew Haley  <aph@redhat.com>
++    
++    	* src/sh64/ffi.c: Remove lint directives.  Was missing from merge
++    	of Andreas Tobler's patch from 2006-04-22.
++
++commit 1a2f93a8b362db13638afd9fcb3f2650180bfa17
++Author: aph <aph>
++Date:   Thu Jun 4 10:45:51 2009 +0000
++
++    2009-06-04  Andrew Haley  <aph@redhat.com>
++    
++            * src/sh/ffi.c: Apply missing hunk from Alexandre Oliva's patch of
++            2007-03-07.
++
++commit 944c95cf7aaaaf7c5fa368cda4673dd38f45020e
++Author: aph <aph>
++Date:   Wed Jun 3 17:42:56 2009 +0000
++
++    2009-05-22  Dave Korn  <dave.korn.cygwin@gmail.com>
++    
++           * src/x86/win32.S (_ffi_closure_STDCALL):  New function.
++           (.eh_frame):  Add FDE for it.
++    
++    2009-05-22  Dave Korn  <dave.korn.cygwin@gmail.com>
++    
++           * configure.ac:  Also check if assembler supports pc-relative
++           relocs on X86_WIN32 targets.
++           * configure:  Regenerate.
++           * src/x86/win32.S (ffi_prep_args):  Declare extern, not global.
++           (_ffi_call_SYSV):  Add missing function type symbol .def and
++           add EH markup labels.
++           (_ffi_call_STDCALL):  Likewise.
++           (_ffi_closure_SYSV):  Likewise.
++           (_ffi_closure_raw_SYSV):  Likewise.
++           (.eh_frame):  Add hand-crafted EH data.
++    
++    2008-11-21  Eric Botcazou  <ebotcazou@adacore.com>
++    
++           * src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for
++           signed/unsigned int8/16 return values.
++           * src/sparc/v8.S (ffi_call_v8): Likewise.
++           (ffi_closure_v8): Likewise.
++    
++    2008-03-26  Kaz Kojima  <kkojima@gcc.gnu.org>
++    
++           * src/sh/sysv.S: Add .note.GNU-stack on Linux.
++           * src/sh64/sysv.S: Likewise.
++    
++    2008-03-26  Daniel Jacobowitz  <dan@debian.org>
++    
++           * src/arm/sysv.S: Fix ARM comment marker.
++
++commit 00fa972430bb1535a4b34bf029ebcad500027b0c
++Author: twall <twall>
++Date:   Sat Dec 27 16:59:05 2008 +0000
++
++    properly glob-match
++
++commit f5179e6794ac35af26fe86e468b8508a7a570c55
++Author: twall <twall>
++Date:   Fri Dec 26 19:06:28 2008 +0000
++
++    Mark XFAIL on longdouble tests for x86_64/mingw
++
++commit 80e2b5a749208c8a18f994ec5bee84594d051cc8
++Author: twall <twall>
++Date:   Mon Dec 22 15:21:15 2008 +0000
++
++    clean up tests for win64 use
++
++commit 7063d9996f742576095c7b0eb5016c0f9a670aec
++Author: green <green>
++Date:   Fri Dec 19 16:13:46 2008 +0000
++
++    Version 3.0.8 with x86-solaris support
++
++commit bdfeb13f0df0a63b19d62597517237b54d92228b
++Author: green <green>
++Date:   Fri Dec 19 15:47:44 2008 +0000
++
++    Bump to 3.0.7
++
++commit 69205de17d6ac4c11d4ba92d6a5b40a0c5f246b2
++Author: green <green>
++Date:   Thu Jul 24 18:03:48 2008 +0000
++
++    Many test fixes (failures due to excessive compiler warnings).
++
++commit 260d513fea00b3613fe957a44a157fe72c4ca29e
++Author: green <green>
++Date:   Thu Jul 17 13:13:52 2008 +0000
++
++    Version 3.0.6.  sh/sh64 fixes.
++
++commit 3704031875feabb74e3655ed03cff4c2b3c76ac6
++Author: green <green>
++Date:   Thu Apr 3 18:57:57 2008 +0000
++
++    Rev 3.0.5.
++
++commit 8406f5f48f7f58a1c982a93a95d521cf82b3241f
++Author: green <green>
++Date:   Thu Apr 3 18:57:34 2008 +0000
++
++    3.0.5
++
++commit 23a9e73212b62f9684cedb0ce70e92c59cfdaffa
++Author: green <green>
++Date:   Wed Mar 5 00:07:02 2008 +0000
++
++    2008-03-04  Anthony Green  <green@redhat.com>
++                Blake Chaffin
++                hos@tamanegi.org
++    
++            * testsuite/libffi.call/cls_align_longdouble_split2.c
++              testsuite/libffi.call/cls_align_longdouble_split.c
++              testsuite/libffi.call/cls_dbls_struct.c
++              testsuite/libffi.call/cls_double_va.c
++              testsuite/libffi.call/cls_longdouble.c
++              testsuite/libffi.call/cls_longdouble_va.c
++              testsuite/libffi.call/cls_pointer.c
++              testsuite/libffi.call/cls_pointer_stack.c
++              testsuite/libffi.call/err_bad_abi.c
++              testsuite/libffi.call/err_bad_typedef.c
++              testsuite/libffi.call/huge_struct.c
++              testsuite/libffi.call/stret_large2.c
++              testsuite/libffi.call/stret_large.c
++              testsuite/libffi.call/stret_medium2.c
++              testsuite/libffi.call/stret_medium.c: New tests from Apple.
++
++commit 429e37d3ad653e52e75bf725c883ab79e859f89a
++Author: green <green>
++Date:   Thu Feb 28 04:50:19 2008 +0000
++
++    clicky
++
++commit 51e79c428348c033314f54bcb30f7e388c59e347
++Author: green <green>
++Date:   Thu Feb 28 04:47:35 2008 +0000
++
++    getclicky
++
++commit affcab04e280efeace45a72c4dc6152c0e4f1b7f
++Author: green <green>
++Date:   Tue Feb 26 19:01:53 2008 +0000
++
++    2008-02-26  Jakub Jelinek  <jakub@redhat.com>
++                Anthony Green  <green@redhat.com>
++    
++            * src/alpha/osf.S: Add .note.GNU-stack on Linux.
++            * src/s390/sysv.S: Likewise.
++            * src/powerpc/linux64.S: Likewise.
++            * src/powerpc/linux64_closure.S: Likewise.
++            * src/powerpc/ppc_closure.S: Likewise.
++            * src/powerpc/sysv.S: Likewise.
++            * src/x86/unix64.S: Likewise.
++            * src/x86/sysv.S: Likewise.
++            * src/sparc/v8.S: Likewise.
++            * src/sparc/v9.S: Likewise.
++            * src/m68k/sysv.S: Likewise.
++            * src/ia64/unix.S: Likewise.
++            * src/arm/sysv.S: Likewise.
++
++commit 59689d5522c159a3ac967adb6b891cf5f22c890f
++Author: green <green>
++Date:   Tue Feb 26 17:40:51 2008 +0000
++
++    2008-02-26  Anthony Green  <green@redhat.com>
++                Thomas Heller  <theller@ctypes.org>
++    
++            * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C
++            comment.
++
++commit b13c84cf4668828ff8429ba4a2f94cd1eb574ae0
++Author: green <green>
++Date:   Tue Feb 26 17:38:15 2008 +0000
++
++    2008-02-26  Anthony Green  <green@redhat.org>
++                Thomas Heller <theller@ctypes.org>
++    
++            * include/ffi.h.in: Change void (*)() to void (*)(void).
++
++commit 265289f679ffd24a88ae1aa2cef0e4aa14703cd8
++Author: green <green>
++Date:   Tue Feb 26 17:34:36 2008 +0000
++
++    2008-02-26  Anthony Green  <green@spindazzle.org>
++    
++            * src/alpha/ffi.c: Change void (*)() to void (*)(void).
++            src/alpha/osf.S, src/arm/ffi.c, src/frv/ffi.c, src/ia64/ffi.c,
++            src/ia64/unix.S, src/java_raw_api.c, src/m32r/ffi.c,
++            src/mips/ffi.c, src/pa/ffi.c, src/pa/hpux32.S, src/pa/linux.S,
++            src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/raw_api.c,
++            src/s390/ffi.c, src/sh/ffi.c, src/sh64/ffi.c, src/sparc/ffi.c,
++            src/x86/ffi.c, src/x86/unix64.S, src/x86/darwin64.S,>         src/x86/ffi64.c: Ditto.
++
++commit fb5036cd6d0f909918e90f7d2d9fd80d46682d5d
++Author: green <green>
++Date:   Sun Feb 24 17:25:25 2008 +0000
++
++    fix date
++
++commit 40bec108e7d0181e6c9928aa7a33187bcc0f3d6f
++Author: green <green>
++Date:   Sun Feb 24 17:25:02 2008 +0000
++
++    New release
++
++commit b922048fa82ea109a4af269ee47bbc2a586bbac2
++Author: green <green>
++Date:   Sun Feb 24 17:24:00 2008 +0000
++
++    2008-02-24  Anthony Green  <green@spindazzle.org>
++    
++            * configure.ac: Accept openbsd*, not just openbsd.
++            Bump version to 3.0.4.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++            * libtool-version: Increment revision.
++            * README: Update for new release.
++
++commit affca4b92d06e5554784c7e9b233029ef83f7d8a
++Author: green <green>
++Date:   Fri Feb 22 21:53:29 2008 +0000
++
++    sync readme with web page.
++
++commit 3e53d8752ea74859b4c64fbbf935e62a937c4d78
++Author: green <green>
++Date:   Fri Feb 22 21:52:38 2008 +0000
++
++    New release
++
++commit 4d92f6c8e78fe084be65f3e8b58b859901ba796d
++Author: green <green>
++Date:   Fri Feb 22 21:49:46 2008 +0000
++
++    2008-02-22  Anthony Green  <green@redhat.com>
++    
++            * configure.ac: Bump version to 3.0.3.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++            * libtool-version: Increment revision.
++            * README: Update for new release.  Clean up test docs.
++
++commit 0e185fa11a01f816824ba2687ed3715ab6219bef
++Author: green <green>
++Date:   Fri Feb 22 21:43:18 2008 +0000
++
++    Update configure script.
++
++commit f73986bd211cfbbaa593d1309504d0dc68626191
++Author: green <green>
++Date:   Fri Feb 22 21:40:53 2008 +0000
++
++    2008-02-22  Bjoern Koenig  <bkoenig@alpha-tierchen.de>
++                Andreas Tobler  <a.tobler@schweiz.org>
++    
++            * configure.ac: Add amd64-*-freebsd* target.
++            * configure: Regenerate.
++
++commit 0208f68fe5de30c33e7f70ebc281635917013f5a
++Author: green <green>
++Date:   Fri Feb 22 21:15:44 2008 +0000
++
++    2008-02-22  Thomas Heller <theller@ctypes.org>
++    
++            * configure.ac: Add x86 OpenBSD support.
++            * configure: Rebuilt.
++
++commit 01adb0e638a86cf0d5e668ed8e08be9b0cd2505f
++Author: green <green>
++Date:   Thu Feb 21 16:17:26 2008 +0000
++
++    Fix README.
++
++commit 1edd4563225981a14f7d4fb9919b1ed88e38082f
++Author: green <green>
++Date:   Thu Feb 21 13:39:01 2008 +0000
++
++    3.0.2
++
++commit c9b542800864e2204db6e83f3843a17813ba6165
++Author: green <green>
++Date:   Thu Feb 21 13:36:43 2008 +0000
++
++    add missing file
++
++commit d5fa5633d5c8d3c212a2267cfa38fba4091baa2c
++Author: green <green>
++Date:   Thu Feb 21 13:36:19 2008 +0000
++
++    2008-02-21  Anthony Green  <green@redhat.com>
++    
++            * configure.ac: Bump version to 3.0.2.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++            * libtool-version: Increment revision.
++            * README: Update for new release.
++    
++    2008-02-21  Björn König <bkoenig@alpha-tierchen.de>
++    
++            * src/x86/freebsd.S: New file.
++            * configure.ac: Add x86 FreeBSD support.
++            * Makefile.am: Ditto.
++
++commit ac35bfc6fcadd8880c1efce36724820f9074b318
++Author: green <green>
++Date:   Sat Feb 16 01:03:56 2008 +0000
++
++    Updated
++
++commit f7942975fee7b0162647dd79e2652615b737e98e
++Author: green <green>
++Date:   Sat Feb 16 01:02:00 2008 +0000
++
++    2008-02-15  Anthony Green  <green@redhat.com>
++    
++            * configure.ac: Bump version to 3.0.1.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++            * libtool-version: Increment revision.
++            * README: Update for new release.
++    
++    2008-02-15  David Daney  <ddaney@avtrex.com>
++    
++            * src/mips/ffi.c: Remove extra '>' from include directive.
++            (ffi_prep_closure_loc): Use clear_location instead of tramp.
++
++commit 59aa6bb1bfc86a610ac1a8b123443efd75854dd1
++Author: green <green>
++Date:   Fri Feb 15 20:52:26 2008 +0000
++
++    Add more platforms.
++
++commit 45a45ab99074448be0ae1a8d2ade50d28b60f8de
++Author: green <green>
++Date:   Fri Feb 15 19:16:36 2008 +0000
++
++    3.0 notes
++
++commit 4db74cbea888c9f1251b85baf00d99b83d3b994d
++Author: green <green>
++Date:   Fri Feb 15 19:10:26 2008 +0000
++
++    Update
++
++commit c3e1101ffabf44d8a2ee46e03ba9ab582050a825
++Author: green <green>
++Date:   Fri Feb 15 18:43:40 2008 +0000
++
++    2008-02-15  Anthony Green  <green@redhat.com>
++    
++            * configure.ac: Bump version to 3.0.0,
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++    
++    2008-02-15  David Daney  <ddaney@avtrex.com>
++    
++            * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE):
++            Define (conditionally), and use it to include cachectl.h.
++            (ffi_prep_closure_loc): Fix cache flushing.
++            * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define.
++
++commit 7e0cc12e9233ad285db41ce8dbdda61ed2a7fb06
++Author: green <green>
++Date:   Fri Feb 15 15:51:03 2008 +0000
++
++    New release
++
++commit 2d7dc885ec40d53866f29984d595511942c8b686
++Author: green <green>
++Date:   Fri Feb 15 15:30:26 2008 +0000
++
++            * man/ffi_call.3, man/ffi_prep_cif.3, man/ffi.3:
++            Update dates and remove all references to ffi_prep_closure.
++            * configure.ac: Bump version to 2.99.9.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++
++commit a0525f03eeaaed33b1eac80e0c016455cee3615d
++Author: green <green>
++Date:   Fri Feb 15 15:14:30 2008 +0000
++
++    New release.
++
++commit 2b30dfb3146ee26ad956d00ee05eb835ca1a95b4
++Author: green <green>
++Date:   Fri Feb 15 15:12:43 2008 +0000
++
++            * man/ffi_prep_closure.3: Delete.
++            * man/Makefile.am (EXTRA_DIST): Remove ffi_prep_closure.3.
++            (man_MANS): Ditto.
++            * man/Makefile.in: Rebuilt.
++            * configure.ac: Bump version to 2.99.8.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++
++commit bf41e64840ebcb6cc31a6f028253c1fde82705d8
++Author: green <green>
++Date:   Fri Feb 15 01:56:50 2008 +0000
++
++    Update.
++
++commit 4d39ddee677bbb61d621893b91e11eac5e7c4af7
++Author: green <green>
++Date:   Fri Feb 15 01:24:06 2008 +0000
++
++    * configure.ac: Bump version to 2.99.7.
++            * configure, doc/stamp-vti, doc/version.texi: Rebuilt.
++            * include/ffi.h.in LICENSE src/debug.c src/closures.c
++              src/ffitest.c src/s390/sysv.S src/s390/ffitarget.h
++              src/types.c src/m68k/ffitarget.h src/raw_api.c src/frv/ffi.c
++              src/frv/ffitarget.h src/sh/ffi.c src/sh/sysv.S
++              src/sh/ffitarget.h src/powerpc/ffitarget.h src/pa/ffi.c
++              src/pa/ffitarget.h src/pa/linux.S src/java_raw_api.c
++              src/cris/ffitarget.h src/x86/ffi.c src/x86/sysv.S
++              src/x86/unix64.S src/x86/win32.S src/x86/ffitarget.h
++              src/x86/ffi64.c src/x86/darwin.S src/ia64/ffi.c
++              src/ia64/ffitarget.h src/ia64/ia64_flags.h src/ia64/unix.S
++              src/sparc/ffi.c src/sparc/v9.S src/sparc/ffitarget.h
++              src/sparc/v8.S src/alpha/ffi.c src/alpha/ffitarget.h
++              src/alpha/osf.S src/sh64/ffi.c src/sh64/sysv.S
++              src/sh64/ffitarget.h src/mips/ffi.c src/mips/ffitarget.h
++              src/mips/n32.S src/mips/o32.S src/arm/ffi.c src/arm/sysv.S
++              src/arm/ffitarget.h src/prep_cif.c: Update license text.
++
++commit d58b032b41a12bd3d72148da6822ab59dd698ff9
++Author: green <green>
++Date:   Fri Feb 15 00:59:25 2008 +0000
++
++    New release
++
++commit 91e5478df6d5ac63efbb10f025807b4606afab56
++Author: green <green>
++Date:   Fri Feb 15 00:50:30 2008 +0000
++
++    Update supported platforms.  Bump version.
++
++commit bd0768f877c8f7fd0d36af2191b203d4d057b1ce
++Author: green <green>
++Date:   Fri Feb 15 00:45:33 2008 +0000
++
++    * configure.ac: Bump version to 2.99.5.
++            * configure: Rebuilt.
++            * Makefile.am (EXTRA_DIST): Add darwin64.S
++            * Makefile.in: Rebuilt.
++            * testsuite/lib/libffi-dg.exp: Remove libstdc++ bits from GCC tree.
++            * LICENSE: Update WARRANTY.
++
++commit 49d345f767bd2cfee951bceaab6a1a07986cf293
++Author: green <green>
++Date:   Thu Feb 14 23:43:27 2008 +0000
++
++    update license reference
++
++commit 12ac48fc79b515db7c9accd9fcaa87b0dcefccdb
++Author: green <green>
++Date:   Thu Feb 14 23:42:08 2008 +0000
++
++    Update WARRANTY
++
++commit 6b91c41da87e78552f2990dfc504a0a3349f340b
++Author: green <green>
++Date:   Thu Feb 14 23:38:27 2008 +0000
++
++    fix tarball reference
++
++commit 2b59579e3533334bee4788e076b4e520c2ab518c
++Author: green <green>
++Date:   Thu Feb 14 23:35:58 2008 +0000
++
++    First update in 5 years!
++
++commit 6cbdf3f3a3777a93382a2d508ddef1c353ff0955
++Author: green <green>
++Date:   Thu Feb 14 22:44:06 2008 +0000
++
++    Fix .pc file bug and bump version
++
++commit 1d1dc81104b209df3cfef0840735c59efae2f655
++Author: green <green>
++Date:   Thu Feb 14 22:03:37 2008 +0000
++
++    Add man files and info file. Update README.  Tag as 2.99.3.
++
++commit f045a2367f793fa8b01534cf2e25bcc46afc8fa1
++Author: tromey <tromey>
++Date:   Thu Feb 14 20:46:57 2008 +0000
++
++    Move entry from ChangeLog to ChangeLog.libffi
++
++commit 6257f07d1a9efd27fa83639cfba281f5d3188731
++Author: tromey <tromey>
++Date:   Thu Feb 14 20:33:17 2008 +0000
++
++    	* aclocal.m4, Makefile.in, configure, fficonfig.h.in: Rebuilt.
++    	* mdate-sh, texinfo.tex: New files.
++    	* Makefile.am (info_TEXINFOS): New variable.
++    	* doc/libffi.texi: New file.
++    	* doc/version.texi: Likewise.
++
++commit 4232af563c5509c3760a33e3684a2b958be755e1
++Author: green <green>
++Date:   Thu Feb 14 16:19:21 2008 +0000
++
++            * Makefile.am (AM_CFLAGS): Don't compile with -D.
++            (lib_LTLIBRARIES): Define.
++            (toolexeclib_LIBRARIES): Undefine.
++            * Makefile.in: Rebuilt.
++            * configure.ac: Reset version to 2.99.1.
++            * configure.in: Rebuilt.
++
++commit 961543615c31f092b578a4b4cda914db64f9d0fa
++Author: green <green>
++Date:   Thu Feb 14 15:57:40 2008 +0000
++
++    Fix typo.
++
++commit aeb0abab87222f637fbf352d4effd3b76b52ed26
++Author: green <green>
++Date:   Thu Feb 14 15:54:27 2008 +0000
++
++          * libffi.pc.in: Usse @PACKAGE_NAME@ and @PACKAGE_VERSION@.
++            * configure.ac: Reset version to 2.99.1.
++            * configure.in: Rebuilt.
++            * Makefile.am (EXTRA_DIST): Add ChangeLog.libffi.
++            * Makefile.in: Rebuilt.
++            * LICENSE: Update copyright notice.
++
++commit 77fe243556433eae119d8bd7469bfccdd5bd8a1a
++Author: green <green>
++Date:   Thu Feb 14 15:37:00 2008 +0000
++
++    Fix make dist again
++
++commit d4970cf4529459bf0f0e43c602cac396786c6802
++Author: green <green>
++Date:   Thu Feb 14 15:18:56 2008 +0000
++
++    Fix make dist
++
++commit f0b1462f2d3024922ad71421bd5c4311fcb16da5
++Author: green <green>
++Date:   Thu Feb 14 15:01:41 2008 +0000
++
++    Use pkgconfig.  Increment libtool CURRENT version.
++
++commit 27e52f33baa069012a5adb2a3807f9ca1f2165ab
++Author: green <green>
++Date:   Sun Feb 3 13:59:48 2008 +0000
++
++    Fix header installs when using DESTDIR.
++
++commit fadab28eb6e33fb6dcdd7b9323e147142216d548
++Author: twall <twall>
++Date:   Sun Feb 3 12:32:22 2008 +0000
++
++    update changelog
++
++commit b5e44c8dfa92c87b99762c303cf5574a16db8f27
++Author: twall <twall>
++Date:   Sun Feb 3 01:12:32 2008 +0000
++
++    offset from code base address, not data base address
++
++commit f359848d1a995c0e44566d815f218729dc996e22
++Author: green <green>
++Date:   Fri Feb 1 21:29:43 2008 +0000
++
++    Fix header installs.
++
++commit c30df49e157c7bfc8e19e3f8a72b9464fe225e54
++Author: green <green>
++Date:   Fri Feb 1 21:13:55 2008 +0000
++
++    Revert my broken changes to twall's patch.
++
++commit 675561bb9aa0732c76698df10dd3007b5d0ec759
++Author: green <green>
++Date:   Thu Jan 31 13:44:25 2008 +0000
++
++    Fix make dist .
++
++commit abc0bbf3813dc43e23d4c23e6fe794dbf287639b
++Author: green <green>
++Date:   Thu Jan 31 11:58:57 2008 +0000
++
++    Add Tim Wall's x86 windows patch.
++
++commit e332366d15a31198735b593ec8f7fc0558d783b8
++Author: green <green>
++Date:   Wed Jan 30 13:21:02 2008 +0000
++
++    Add HJ's -fomit-frame-pointer struct return fix
++
++commit d4204240392af5b7750a08671b08e9c22dff5e93
++Author: green <green>
++Date:   Wed Jan 30 12:42:34 2008 +0000
++
++    Clean up for new automake.
++
++commit f4932dd020df574637c9fb3fc1bb18e5a8f304cc
++Author: green <green>
++Date:   Wed Jan 30 12:40:25 2008 +0000
++
++    Fixes to run testsuite
++
++commit 085520ddc8db6a916bfc416b871fcb2d00074d40
++Author: green <green>
++Date:   Tue Jan 29 15:16:43 2008 +0000
++
++    New files from gcc tree.
++
++commit 77175b3f7234e4875a4ef554ed1fe9fdc4133794
++Author: green <green>
++Date:   Tue Jan 29 15:15:20 2008 +0000
++
++    Latest gcc svn sources
++
++commit 2544e45a0b2b634053df02da3a2ed9680eeed2a1
++Author: green <green>
++Date:   Tue Jan 29 14:28:13 2008 +0000
++
++    Install ffitarget.h in $prefix/include.
++
++commit 6002211b1cc4daeb587d054b4f83968bda2c981e
++Author: green <green>
++Date:   Tue Jan 29 12:30:10 2008 +0000
++
++    Add new files.
++
++commit ccabd2b16be883cd03e5f0cd88ccfdd6ca39239d
++Author: green <green>
++Date:   Tue Jan 29 12:28:15 2008 +0000
++
++    Merge from gcc
++
++commit e680ecfbfca1da8d1823e48bc89b8375e66e128b
++Author: tromey <tromey>
++Date:   Sun Dec 24 23:12:15 2006 +0000
++
++    Pulled in libffi from gcc trunk.
++    Fixed build and install for standalone use.
++
++commit e7ba08965942ce872fdbc69f70f9848cc3d0bad6
++Author: root <root>
++Date:   Sun Jun 4 23:22:24 2006 +0000
++
++    sourcware.org
++
++commit 0cd4aa24e21aaa964dfbdebc25ec5c8188049375
++Author: root <root>
++Date:   Sun May 30 01:51:57 2004 +0000
++
++    Add LockDir
++
++commit 5826120fbd940d26cca76ed2522187505581e1ed
++Author: green <green>
++Date:   Tue Nov 4 06:09:08 2003 +0000
++
++    Add link to Gianni's web site.
++
++commit 220aa4b27db42d7ffaac5056000d5179f00d5ea3
++Author: jsm <jsm>
++Date:   Tue Jan 21 08:07:42 2003 +0000
++
++    Newer, better, increased from before!  (list of acceptable anon usernames)
++
++commit 1c3adc892cc1403dc4d3d7003a2385899836612e
++Author: green <green>
++Date:   Fri Dec 6 01:28:03 2002 +0000
++
++    Fixed Cygnus references.
++
++commit 4af66bb62fab9a8e318af3bf01e5486596a0c8d4
++Author: green <green>
++Date:   Sun Oct 21 19:18:42 2001 +0000
++
++    Testsuite fixes.
++
++commit 5435965f9015ce40584c98d3816c3d05e7de1d21
++Author: green <green>
++Date:   Mon Apr 23 00:32:03 2001 +0000
++
++            * include/ffi_common.h: Delete, after moving contents to...
++            * include/ffi_private.h: Subsume contents of ffi_common.h.
++            * include/Makefile.am (noinst_HEADERS): Remove ffi_common.h.
++            * include/Makefile.in: Rebuilt.
++            * arm/ffi.c, m68k/ffi.c, mips/ffi.c, powerpc/ffi.c, s390/ffi.c,
++            ia64/ffi.c: Include ffi_private.h, not ffi_common.h.
++            * alpha/ffi.c, sparc/ffi.c, x86/ffi.c: Don't include ffi_common.h.
++            * types.c, raw_api.c, java_raw_api.c, prep_cif.c: Don't include
++            ffi_common.h.
++            * debug.c: Include ffi_private.h instead of ffi_common.h.
++    
++            * mips/ffi.c (calc_n32_struct_flags): Make static.
++            (FIX_ARGP): Remove call to debugging routine ffi_stop_here.
++    
++            * mips/n32.S: Include ffi_private.h.
++            * mips/o32.S: Include ffi_private.h.
++
++commit 6fdb7de0fe3b7385e1fd78812ae69d9b3069d994
++Author: green <green>
++Date:   Sun Apr 22 19:38:34 2001 +0000
++
++            * README: Update some comments.
++    
++            * Makefile.am (SUBDIRS): Add include so ffi.h gets installed.
++            * Makefile.in: Rebuilt.
++    
++            * include/ffi.h: Change ALPHA to __alpha__ and SPARC to __sparc__.
++            * types.c: Ditto.
++            * prep_cif.c (ffi_prep_cif): Ditto.
++    
++            * alpha/ffi.c, alpha/osf.S, sparc/ffi.c, sparc/v8.S, sparc/v9.S:
++            Include ffi_private.h.
++    
++            * include/ffi_private.h (FFI_TYPE_LAST): Define.
++
++commit bc7144b01b9707ef35f1a2e3e6996e005e82953a
++Author: green <green>
++Date:   Sun Apr 22 18:28:36 2001 +0000
++
++    Moved files from old home
++
++commit e57279831e20368c1aa1d2b35462b8629be73959
++Author: green <green>
++Date:   Sun Apr 22 18:23:47 2001 +0000
++
++    These are dead.
++
++commit 7247436b5fe71767b29dc02b4da0fe18b08082e6
++Author: green <green>
++Date:   Sun Apr 22 18:22:43 2001 +0000
++
++    All these files live somewhere else now.
++
++commit a8b0d40ff908e275028f676870c31d0d70274a98
++Author: green <green>
++Date:   Sun Apr 22 18:17:14 2001 +0000
++
++    Many changes.  Not quite there yet.
++
++commit f893d2273355710a290a26faebf5f12c3a34d0e3
++Author: green <green>
++Date:   Sun Apr 22 18:13:22 2001 +0000
++
++    Moved m68k files
++
++commit 688ddfeced89cbb9d37b53005e1f7f2b9c78a8d7
++Author: green <green>
++Date:   Sun Apr 22 18:12:33 2001 +0000
++
++    New, target indepentent, header
++
++commit f9e40776d488d5ecf43b3ae21444a1a2f6eca528
++Author: green <green>
++Date:   Sun Apr 22 18:11:57 2001 +0000
++
++    Many changes.
++
++commit 8c1d2eb47f6bc314c431b75c85c107e8e43c4a76
++Author: green <green>
++Date:   Sun Apr 22 18:10:47 2001 +0000
++
++    Many changes
++
++commit 1359dfc6582680a158b3caa3efb7a368da4aa12d
++Author: green <green>
++Date:   Sun Apr 22 18:10:20 2001 +0000
++
++    Moved ia64 files
++
++commit 6e2de5eee316a4579869aff50c7c5f6f478582d8
++Author: green <green>
++Date:   Sun Apr 22 18:08:11 2001 +0000
++
++    Moved arm files
++
++commit 8807355af34cba8ffe87aee51152dfccec2771fa
++Author: green <green>
++Date:   Mon Apr 9 00:58:38 2001 +0000
++
++    Many many updates.  Merge from gcc and then some.
++
++commit f7e9f91adec4ff1c2e7a13b3de81d2c5a3f55e7e
++Author: green <green>
++Date:   Mon Apr 17 03:32:37 2000 +0000
++
++    Mnay fixes.
++
++commit c4860de618f4956283f5c8230a2544e403dfe390
++Author: green <green>
++Date:   Mon Apr 17 03:18:46 2000 +0000
++
++    Merge from libgcj.  Merged patches from net.  See ChangeLog for details.
++
++commit c578b58314990c3853429297c38ba14015fec5fa
++Author: jsm <jsm>
++Date:   Sat Oct 9 20:18:16 1999 +0000
++
++    1999-10-09  Jason Molenda  (jsm@bugshack.cygnus.com)
++    
++    	* CVSROOT/auto_checkout, CVSROOT/commit_prep, CVSROOT/log_accum:
++    	Deleted; generic versions now used for all repositories.
++    
++    	* CVSROOT/commitinfo, CVSROOT/loginfo:  Change pathnames to
++    	generic versions.
++    
++            * CVSROOT/checkoutlist:  Don't try to check out the removed
++            files any longer.
++
++commit acdb20051207fed7652dd9f122f65de5458c474c
++Author: jsm <jsm>
++Date:   Sat Oct 9 20:18:15 1999 +0000
++
++    1999-10-09  Jason Molenda  (jsm@bugshack.cygnus.com)
++    
++    	* CVSROOT/auto_checkout, CVSROOT/commit_prep, CVSROOT/log_accum:
++    	Deleted; generic versions now used for all repositories.
++    
++    	* CVSROOT/commitinfo, CVSROOT/loginfo:  Change pathnames to
++    	generic versions.
++    
++            * CVSROOT/checkoutlist:  Don't try to check out the removed
++            files any longer.
++
++commit e75be655ceedf7ab24c4e99d75eec9efeb979bc7
++Author: green <green>
++Date:   Sun Aug 8 13:16:41 1999 +0000
++
++    New configury
++
++commit d6669a0dd5b266005325bbf6d5a8ff34574d809e
++Author: green <green>
++Date:   Sun Aug 8 13:05:12 1999 +0000
++
++    	* include/ffi.h.in: Try to work around messy header problem
++    	with PACKAGE and VERSION.
++    
++    	* configure: Rebuilt.
++    	* configure.in: Change version to 2.00-beta.
++    
++            * fficonfig.h.in: Rebuilt.
++    	* acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define.
++    
++    	* src/x86/ffi.c (ffi_raw_call): Rename.
++
++commit 4819d52b007934a40d6d29a75ee30e857c4a93ae
++Author: green <green>
++Date:   Wed Aug 4 18:02:34 1999 +0000
++
++    New file for Kresten's closure work
++
++commit 2dbf801eb427cbf5021a9e1e512b5fc523524700
++Author: green <green>
++Date:   Wed Aug 4 18:00:05 1999 +0000
++
++    Kresten's closure work. Initial checkin.
++
++commit d170961701b0f2bf7e824d7caba2ebe10002ed84
++Author: green <green>
++Date:   Thu Jul 8 14:36:52 1999 +0000
++
++    	* configure.in: Add x86 and powerpc BeOS configurations.
++    	From Makoto Kato <m_kato@ga2.so-net.ne.jp>.
++
++commit c7747d976924ec6f2229cbcfbbdb98d364e10de9
++Author: jsm <jsm>
++Date:   Wed May 12 23:32:16 1999 +0000
++
++    1999-05-12  Jason Molenda  (jsm@bugshack.cygnus.com)
++            * index.html: Add links to libffi* mail list archives.
++
++commit dd2aa9a8de22e26df3bbc85d068358641f6202f7
++Author: green <green>
++Date:   Thu May 6 05:34:36 1999 +0000
++
++    	* configure.in: Add warning about this being beta code.
++    	Remove src/Makefile.am from the picture.
++    	* configure: Rebuilt.
++    	* Makefile.am: Move logic from src/Makefile.am.  Add changes
++    	to support libffi as a target library.
++    	* Makefile.in: Rebuilt.
++    	* aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh:
++    	Upgraded to new autoconf, automake, libtool.
++    	* README: Tweaks.
++    	* LICENSE: Update copyright date.
++    	* src/Makefile.am, src/Makefile.in: Removed.
++
++commit 4e9452abed58a3058ccdb446f96a29d50dda1f34
++Author: green <green>
++Date:   Wed May 5 22:06:13 1999 +0000
++
++    Updated to new automake, libtool, autoconf - nothing works :-)
++
++commit 6d3b2bddaf4967fba8b8656c01bfc77ec0f2800c
++Author: jsm <jsm>
++Date:   Mon Apr 26 15:55:28 1999 +0000
++
++    1999-04-26  Jason Molenda  (jsm@bugshack.cygnus.com)
++            * index.html: Missed a reference to libffi-discuss@cygnus.com.  Fixed.
++
++commit ebc6a9c28af831d3d187af8ff17319f0f309bd98
++Author: jsm <jsm>
++Date:   Mon Apr 26 15:53:29 1999 +0000
++
++    1999-04-26  Jason Molenda  (jsm@bugshack.cygnus.com)
++            * index.html: Change links to ftp directory to point to sourceware
++            directory.
++            Change mailing list subscription forms to point to sourceware lists.
++
++commit 78ffc52a8b257061348c576ccb6fbbf8b48b0fff
++Author: jsm <jsm>
++Date:   Sun Apr 18 01:33:21 1999 +0000
++
++    Standard sourceware setup.
++
++commit b4d77e827d7ebef7e57ebcd71e71c15c62f1e0a8
++Author: jsm <jsm>
++Date:   Mon Nov 30 11:11:25 1998 +0000
++
++    Small typeo.  (I wouldn't bother except that it made the sentence hard
++    for me to parse on a casual read.)
++
++commit bfb73f08fdc987e37070c5fb0b196fbd28872888
++Author: jsm <jsm>
++Date:   Mon Nov 30 10:44:55 1998 +0000
++
++    A few cleanups.  Most notably, point to the correct subscribe cgi-bin
++    script.
++
++commit af8b7f037ccee3b7939ee226a1a2bbc2f057b35c
++Author: green <green>
++Date:   Mon Nov 30 06:20:05 1998 +0000
++
++    	* index.html: Reformatted and updated to reflect hosting on
++    	sourceware.cygnus.com (new mailing lists, etc).
++
++commit 334f0b060942aff8d26badaf7dde7830450dc5da
++Author: green <green>
++Date:   Sun Nov 29 16:56:12 1998 +0000
++
++    initial snapshot of documentation
++
++commit 3ab5cb4a1dcc7ecd7e773c97582b0099976c4753
++Author: green <green>
++Date:   Sun Nov 29 16:56:10 1998 +0000
++
++    Initial revision
++
++commit d2a9eb5a8b7cbc8b769809cad59c82b975c178e2
++Merge: d3782ec bc75c54
++Author: green <green>
++Date:   Sun Nov 29 16:48:16 1998 +0000
++
++    This commit was generated by cvs2svn to compensate for changes in r7, which
++    included commits to RCS files with non-trunk default branches.
++
++commit bc75c54bd311658005b065f1bf201b204c81cbca
++Author: green <green>
++Date:   Sun Nov 29 16:48:16 1998 +0000
++
++    Import of v1 code.
++
++commit d3782ec8160c644421dcea17b605fec6e328f14e
++Author: jsm <jsm>
++Date:   Fri Nov 20 20:18:00 1998 +0000
++
++    Send commit messages to mailing lists.
++
++commit 8d8d3843c484c2bb70d8375b2b799f75eb03f709
++Author: jsm <jsm>
++Date:   Thu Oct 1 22:08:36 1998 +0000
++
++    initial checkin
++
++commit 49634f3bf221cc1939abafc788f7e4e31293fe73
++Author: jsm <jsm>
++Date:   Thu Oct 1 22:08:35 1998 +0000
++
++    Add standard setup.
++
++commit c64a84c7693f8cd400fb94bba3c9bcfd9ad1fc36
++Author: jsm <jsm>
++Date:   Thu Oct 1 22:08:34 1998 +0000
++
++    Add readers and standard modules file.
++
++commit 9813273b07fd082da573b3b6bfb8d23809b59eea
++Author: jsm <jsm>
++Date:   Thu Oct 1 22:08:33 1998 +0000
++
++    initial checkin
+diff --git a/js/src/ctypes/libffi/ChangeLog.libffi b/js/src/ctypes/libffi/ChangeLog.libffi
+--- a/js/src/ctypes/libffi/ChangeLog.libffi
++++ b/js/src/ctypes/libffi/ChangeLog.libffi
+@@ -1,40 +1,11 @@
+-2010-01-15  Anthony Green  <green@redhat.com>
++2011-02-08  Andreas Tobler  <andreast@fgznet.ch>
+ 
+-	* README: Add notes on building with Microsoft Visual C++.
+-
+-2010-01-15  Daniel Witte  <dwitte@mozilla.com>
+-
+-	* msvcc.sh: New file.
+-
+-	* src/x86/win32.S: Port assembly routines to MSVC and #ifdef.
+-	* src/x86/ffi.c: Tweak function declaration and remove excess
+-	parens.
+-	* include/ffi.h.in: Add __declspec(align(8)) to typedef struct
+-	ffi_closure.
+-
+-	* src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new
+-	function ffi_call_win32 on X86_WIN32.
+-	* src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32.
+-	(ffi_call_STDCALL): Remove.
+-
+-	* src/prep_cif.c (ffi_prep_cif): Move stack space allocation code
+-	to ffi_prep_cif_machdep for x86.
+-	* src/x86/ffi.c (ffi_prep_cif_machdep): To here.
+-
+-2010-01-15  Oliver Kiddle  <okiddle@yahoo.co.uk>
+-
+-	* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
+-	Sun Studio compiler compatibility. 
+-
+-2010-01-12  Conrad Irwin <conrad.irwin@gmail.com>
+-
+-	* doc/libffi.texi: Add closure example.
+-	* doc/libffi.info: Rebuilt.
++	* testsuite/lib/libffi.exp: Tweak for stand-alone mode.
+ 
+ 2009-12-25  Samuli Suominen  <ssuominen@gentoo.org>
+ 
+ 	* configure.ac: Undefine _AC_ARG_VAR_PRECIOUS for autoconf 2.64.
+ 	* configure: Rebuilt.
+ 	* fficonfig.h.in: Rebuilt.
+ 
+ 2009-06-16  Andrew Haley  <aph@redhat.com>
+@@ -598,16 +569,16 @@ 2008-01-30  H.J. Lu <hongjiu.lu@intel.co
+ 	* testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer"
+ 	tests.
+ 
+ 2008-01-30  Anthony Green  <green@redhat.com>
+ 
+ 	* Makefile.am, include/Makefile.am: Move headers to
+ 	libffi_la_SOURCES for new automake.
+ 	* Makefile.in, include/Makefile.in: Rebuilt.
+-	
+-	* testsuite/lib/wrapper.exp: Copied from gcc tree to allow for 
++
++	* testsuite/lib/wrapper.exp: Copied from gcc tree to allow for
+ 	execution outside of gcc tree.
+ 	* testsuite/lib/target-libpath.exp: Ditto.
+ 
+ 	* testsuite/lib/libffi-dg.exp: Many changes to allow for execution
+ 	outside of gcc tree.
+ 
+diff --git a/js/src/ctypes/libffi/ChangeLog.libffi-3.1 b/js/src/ctypes/libffi/ChangeLog.libffi-3.1
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/ChangeLog.libffi-3.1
+@@ -0,0 +1,6000 @@
++2014-03-16  Josh Triplett  <josh@joshtriplett.org>
++
++	* ChangeLog: Archive to ChangeLog.libffi-3.1 and delete.  Future
++	changelogs will come from git, with autogenerated snapshots shipped in
++	distributed tarballs.
++
++2014-03-16  Josh Triplett  <josh@joshtriplett.org>
++
++	Add support for stdcall, thiscall, and fastcall on non-Windows
++	x86-32.
++
++	Linux supports the stdcall calling convention, either via
++	functions explicitly declared with the stdcall attribute, or via
++	code compiled with -mrtd which effectively makes stdcall the
++	default.
++
++	This introduces FFI_STDCALL, FFI_THISCALL, and FFI_FASTCALL on
++	non-Windows x86-32 platforms, as non-default calling conventions.
++
++	* Makefile.am: Compile in src/x86/win32.S on non-Windows x86-32.
++	* src/x86/ffitarget.h: Add FFI_STDCALL, FFI_THISCALL, and
++	FFI_FASTCALL on non-Windows x86-32.  Increase trampoline size to
++	accomodate these calling conventions, and unify some ifdeffery.
++	* src/x86/ffi.c: Add support for FFI_STDCALL, FFI_THISCALL, and
++	FFI_FASTCALL on non-Windows x86-32 platforms; update ifdeffery.
++	* src/x86/win32.S: Support compiling on non-Windows x86-32
++	platforms.  On those platforms, avoid redefining the SYSV symbols
++	already provided by src/x86/sysv.S.
++	* testsuite/libffi.call/closure_stdcall.c: Run on non-Windows.
++	#define __stdcall if needed.
++	* testsuite/libffi.call/closure_thiscall.c: Run on non-Windows.
++	#define __fastcall if needed.
++	* testsuite/libffi.call/fastthis1_win32.c: Run on non-Windows.
++	* testsuite/libffi.call/fastthis2_win32.c: Ditto.
++	* testsuite/libffi.call/fastthis3_win32.c: Ditto.
++	* testsuite/libffi.call/many2_win32.c: Ditto.
++	* testsuite/libffi.call/many_win32.c: Ditto.
++	* testsuite/libffi.call/strlen2_win32.c: Ditto.
++	* testsuite/libffi.call/strlen_win32.c: Ditto.
++	* testsuite/libffi.call/struct1_win32.c: Ditto.
++	* testsuite/libffi.call/struct2_win32.c: Ditto.
++
++2014-03-16  Josh Triplett  <josh@joshtriplett.org>
++
++	* prep_cif.c: Remove unnecessary ifdef for X86_WIN32.
++	ffi_prep_cif_core had a special case for X86_WIN32, checking for
++	FFI_THISCALL in addition to the FFI_FIRST_ABI-to-FFI_LAST_ABI
++	range before returning FFI_BAD_ABI.  However, on X86_WIN32,
++	FFI_THISCALL already falls in that range, making the special case
++	unnecessary.  Remove it.
++
++2014-03-16  Josh Triplett  <josh@joshtriplett.org>
++
++	* testsuite/libffi.call/closure_stdcall.c,
++	testsuite/libffi.call/closure_thiscall.c: Remove fragile stack
++	pointer checks.  These files included inline assembly to save the
++	stack pointer before and after the call, and compare the values.
++	However, compilers can and do leave the stack in different states
++	for these two pieces of inline assembly, such as by saving a
++	temporary value on the stack across the call; observed with gcc
++	-Os, and verified as spurious through careful inspection of
++	disassembly.
++
++2014-03-16  Josh Triplett  <josh@joshtriplett.org>
++
++	* testsuite/libffi.call/many.c: Avoid spurious failure due to
++	excess floating-point precision.
++	* testsuite/libffi.call/many_win32.c: Ditto.
++
++2014-03-16  Josh Triplett <josh@joshtriplett.org>
++
++	* libtool-ldflags: Re-add.
++
++2014-03-16  Josh Triplett <josh@joshtriplett.org>
++
++	* Makefile.in, aclocal.m4, compile, config.guess, config.sub,
++	configure, depcomp, include/Makefile.in, install-sh,
++	libtool-ldflags, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4,
++	m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4,
++	man/Makefile.in, mdate-sh, missing, testsuite/Makefile.in: Delete
++	autogenerated files from version control.
++	* .gitignore: Add autogenerated files.
++	* autogen.sh: New script to generate the autogenerated files.
++	* README: Document requirement to run autogen.sh when building
++	directly from version control.
++	* .travis.yml: Run autogen.sh
++
++2014-03-14  Anthony Green <green@moxielogic.com>
++
++	* configure, Makefile.in: Rebuilt.
++
++2014-03-10  Mike Hommey <mh+mozilla@glandium.org>
++
++	* configure.ac: Allow building for mipsel with Android NDK r8.
++	* Makefile.am (AM_MAKEFLAGS): Replace double quotes with single
++	quotes.
++
++2014-03-10  Landry Breuil <landry@openbsd.org>
++
++	* configure.ac: Ensure the linker supports @unwind sections in libffi.
++
++2014-03-01  Anthony Green  <green@moxielogic.com>
++
++	* Makefile.am (EXTRA_DIST): Replace old scripts with
++	generate-darwin-source-and-headers.py.
++	* Makefile.in: Rebuilt.
++
++2014-02-28  Anthony Green  <green@moxielogic.com>
++
++	* Makefile.am (AM_CFLAGS): Reintroduce missing -DFFI_DEBUG for
++	--enable-debug builds.
++	* Makefile.in: Rebuilt.
++
++2014-02-28  Makoto Kato  <m_kato@ga2.so-net.ne.jp>
++
++	* src/closures.c: Fix build failure when using clang for Android.
++
++2014-02-28  Marcin Wojdyr  <wojdyr@gmail.com>
++
++	* libffi.pc.in (toolexeclibdir): use -L${toolexeclibdir} instead
++	of -L${libdir}.
++
++2014-02-28  Paulo Pizarro  <paulo.pizarro@gmail.com>
++
++	* src/bfin/sysv.S: Calling functions in shared libraries requires
++	considering the GOT.
++
++2014-02-28  Josh Triplett  <josh@joshtriplett.org>
++
++	* src/x86/ffi64.c (classify_argument): Handle case where
++	FFI_TYPE_LONGDOUBLE == FFI_TYPE_DOUBLE.
++
++2014-02-28  Anthony Green  <green@moxielogic.com>
++
++	* ltmain.sh: Generate with libtool-2.4.2.418.
++	* m4/libtool.m4, m4/ltoptions.m4, m4/ltversion.m4: Ditto.
++	* configure: Rebuilt.
++
++2014-02-28  Dominik Vogt  <vogt@linux.vnet.ibm.com>
++
++	* configure.ac (AC_ARG_ENABLE struct): Fix typo in help
++	message.
++	(AC_ARG_ENABLE raw_api): Ditto.
++	* configure, fficonfig.h.in: Rebuilt.
++
++2014-02-28  Will Newton  <will.newton@linaro.org>
++
++	* src/arm/sysv.S: Initialize IP register with FP.
++
++2014-02-28  Yufeng Zhang  <yufeng.zhang@arm.com>
++
++	* src/aarch64/sysv.S (ffi_closure_SYSV): Use x29 as the
++	main CFA reg; update cfi_rel_offset.
++
++2014-02-15  Marcus Comstedt  <marcus@mc.pp.se>
++
++	* src/powerpc/ffi_linux64.c, src/powerpc/linux64_closure.S: Remove
++	assumption on contents of r11 in closure.
++
++2014-02-09  Heiher  <r@hev.cc>
++
++	* src/mips/n32.S: Fix call floating point va function.
++
++2014-01-21  Zachary Waldowski  <zach@waldowski.me>
++
++	* src/aarch64/ffi.c: Fix missing semicolons on assertions under
++	debug mode.
++
++2013-12-30  Zachary Waldowski  <zach@waldowski.me>
++
++	* .gitignore: Exclude darwin_* generated source and build_* trees.
++	* src/aarch64/ffi.c, src/arm/ffi.c, src/x86/ffi.c: Inhibit Clang
++	previous prototype warnings.
++	* src/arm/ffi.c: Prevent NULL dereference, fix short type warning
++	* src/dlmalloc.c: Fix warnings from set_segment_flags return type,
++	and the native use of size_t for malloc on platforms
++	* src/arm/sysv.S: Use unified syntax. Clang clean-ups for
++	ARM_FUNC_START.
++	* generate-osx-source-and-headers.py: Remove.
++	* build-ios.sh: Remove.
++	* libffi.xcodeproj/project.pbxproj: Rebuild targets. Include
++	x86_64+aarch64 pieces in library.  Export headers properly.
++	* src/x86/ffi64.c: More Clang warning clean-ups.
++	* src/closures.c (open_temp_exec_file_dir): Use size_t.
++	* src/prep_cif.c (ffi_prep_cif_core): Cast ALIGN result.
++	* src/aarch64/sysv.S: Use CNAME for global symbols.  Only use
++	.size for ELF targets.
++	* src/aarch64/ffi.c: Clean up for double == long double.  Clean up
++	from Clang warnings.  Use Clang cache invalidation builtin.  Use
++	size_t in place of unsigned in many places.  Accommodate for
++	differences in Apple AArch64 ABI.
++
++2013-12-02  Daniel Rodríguez Troitiño  <drodrigueztroitino@yahoo.es>
++
++	* generate-darwin-source-and-headers.py: Clean up, modernize,
++	merged version of previous scripts.
++
++2013-11-21  Anthony Green  <green@moxielogic.com>
++
++	* configure, Makefile.in, include/Makefile.in, include/ffi.h.in,
++	man/Makefile.in, testsuite/Makefile.in, fficonfig.h.in: Rebuilt.
++
++2013-11-21  Alan Modra  <amodra@gmail.com>
++
++	* Makefile.am (EXTRA_DIST): Add new src/powerpc files.
++	(nodist_libffi_la_SOURCES <POWERPC, POWERPC_FREEBSD>): Likewise.
++	* configure.ac (HAVE_LONG_DOUBLE_VARIANT): Define for powerpc.
++	* include/ffi.h.in (ffi_prep_types): Declare.
++	* src/prep_cif.c (ffi_prep_cif_core): Call ffi_prep_types.
++	* src/types.c (FFI_NONCONST_TYPEDEF): Define and use for
++	HAVE_LONG_DOUBLE_VARIANT.
++	* src/powerpc/ffi_powerpc.h: New file.
++	* src/powerpc/ffi.c: Split into..
++	* src/powerpc/ffi_sysv.c: ..new file, and..
++	* src/powerpc/ffi_linux64.c: ..new file, rewriting parts.
++	* src/powerpc/ffitarget.h (enum ffi_abi): Rewrite powerpc ABI
++	selection as bits controlling features.
++	* src/powerpc/linux64.S: For consistency, use POWERPC64 rather
++	than __powerpc64__.
++	* src/powerpc/linux64_closure.S: Likewise.
++	* src/powerpc/ppc_closure.S: Likewise.  Move .note.FNU-stack
++	inside guard.
++	* src/powerpc/sysv.S: Likewise.
++	* configure: Regenerate.
++	* fficonfig.h.in: Regenerate.
++	* Makefile.in: Regenerate.
++
++2013-11-20  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep_core): Use
++	NUM_FPR_ARG_REGISTERS64 and NUM_GPR_ARG_REGISTERS64 not their
++	32-bit versions for 64-bit code.
++	* src/powerpc/linux64_closure.S: Don't use the return value area
++	as a parameter save area on ELFv2.
++
++2013-11-18  Iain Sandoe  <iain@codesourcery.com>
++
++	* src/powerpc/darwin.S (EH): Correct use of pcrel FDE encoding.
++	* src/powerpc/darwin_closure.S (EH): Likewise. Modernise picbase
++	labels.
++
++2013-11-18  Anthony Green  <green@moxielogic.com>
++
++	* src/arm/ffi.c (ffi_call): Hoist declaration of temp to top of
++	function.
++	* src/arm/ffi.c (ffi_closure_inner): Moderize function declaration
++	to appease compiler.
++	Thanks for Gregory P. Smith <greg@krypto.org>.
++
++2013-11-18  Anthony Green  <green@moxielogic.com>
++
++	* README (tested): Mention PowerPC ELFv2.
++
++2013-11-16  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ppc_closure.S: Move errant #endif to where it belongs.
++	Don't bl .Luint128.
++
++2013-11-16  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep_core): Use #if _CALL_ELF
++	test to select parameter save sizing for ELFv2 vs. ELFv1.
++	* src/powerpc/ffitarget.h (FFI_V2_TYPE_FLOAT_HOMOG,
++	FFI_V2_TYPE_DOUBLE_HOMOG, FFI_V2_TYPE_SMALL_STRUCT): Define.
++	(FFI_TRAMPOLINE_SIZE): Define variant for ELFv2.
++	* src/powerpc/ffi.c (FLAG_ARG_NEEDS_PSAVE): Define.
++	(discover_homogeneous_aggregate): New function.
++	(ffi_prep_args64): Adjust start of param save area for ELFv2.
++	Handle homogenous floating point struct parms.
++	(ffi_prep_cif_machdep_core): Adjust space calculation for ELFv2.
++	Handle ELFv2 return values.  Set FLAG_ARG_NEEDS_PSAVE.  Handle
++	homogenous floating point structs.
++	(ffi_call): Increase size of smst_buffer for ELFv2.  Handle ELFv2.
++	(flush_icache): Compile for ELFv2.
++	(ffi_prep_closure_loc): Set up ELFv2 trampoline.
++	(ffi_closure_helper_LINUX64): Don't return all structs directly
++	to caller.  Handle homogenous floating point structs.  Handle
++	ELFv2 struct return values.
++	* src/powerpc/linux64.S (ffi_call_LINUX64): Set up r2 for
++	ELFv2.  Adjust toc save location.  Call function pointer using
++	r12.  Handle FLAG_RETURNS_SMST.  Don't predict branches.
++	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Set up r2
++	for ELFv2.  Define ELFv2 versions of STACKFRAME, PARMSAVE, and
++	RETVAL.  Handle possibly missing parameter save area.  Handle
++	ELFv2 return values.
++	(.note.GNU-stack): Move inside outer #ifdef.
++
++2013-11-16  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Revert 2013-02-08
++	change.  Do not consume an int arg when returning a small struct
++	for FFI_SYSV ABI.
++	(ffi_call): Only use bounce buffer when FLAG_RETURNS_SMST.
++	Properly copy bounce buffer to destination.
++	* src/powerpc/sysv.S: Revert 2013-02-08 change.
++	* src/powerpc/ppc_closure.S: Remove stray '+'.
++
++2013-11-16  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ffi.c (ffi_prep_args64): Align struct parameters
++	according to __STRUCT_PARM_ALIGN__.
++	(ffi_prep_cif_machdep_core): Likewise.
++	(ffi_closure_helper_LINUX64): Likewise.
++
++2013-11-16  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/linux64.S (ffi_call_LINUX64): Tweak restore of r28.
++	(.note.GNU-stack): Move inside outer #ifdef.
++	* src/powerpc/linux64_closure.S (STACKFRAME, PARMSAVE,
++	RETVAL): Define and use throughout.
++	(ffi_closure_LINUX64): Save fprs before buying stack.
++	(.note.GNU-stack): Move inside outer #ifdef.
++
++2013-11-16  Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ffitarget.h (FFI_TARGET_SPECIFIC_VARIADIC): Define.
++	(FFI_EXTRA_CIF_FIELDS): Define.
++	* src/powerpc/ffi.c (ffi_prep_args64): Save fprs as per the
++	ABI, not to both fpr and param save area.
++	(ffi_prep_cif_machdep_core): Renamed from ffi_prep_cif_machdep.
++	Keep initial flags.  Formatting.  Remove dead FFI_LINUX_SOFT_FLOAT
++	code.
++	(ffi_prep_cif_machdep, ffi_prep_cif_machdep_var): New functions.
++	(ffi_closure_helper_LINUX64): Pass floating point as per ABI,
++	not to both fpr and parameter save areas.
++
++	* libffi/testsuite/libffi.call/cls_double_va.c (main): Correct
++	function cast and don't call ffi_prep_cif.
++	* libffi/testsuite/libffi.call/cls_longdouble_va.c (main): Likewise.
++
++2013-11-15  Andrew Haley  <aph@redhat.com>
++
++	* doc/libffi.texi (Closure Example): Fix the sample code.
++	* doc/libffi.info, doc/stamp-vti, doc/version.texi: Rebuilt.
++
++2013-11-15  Andrew Haley  <aph@redhat.com>
++
++	* testsuite/libffi.call/va_struct1.c (main): Fix broken test.
++	* testsuite/libffi.call/cls_uint_va.c (cls_ret_T_fn): Likewise
++	* testsuite/libffi.call/cls_struct_va1.c (test_fn): Likewise.
++	* testsuite/libffi.call/va_1.c (main): Likewise.
++
++2013-11-14  David Schneider  <david.schneider@bivab.de>
++
++	* src/arm/ffi.c: Fix register allocation for mixed float and
++	doubles.
++	* testsuite/libffi.call/cls_many_mixed_float_double.c: Testcase
++	for many mixed float and double arguments.
++
++2013-11-13  Alan Modra  <amodra@gmail.com>
++
++	* doc/libffi.texi (Simple Example): Correct example code.
++	* doc/libffi.info, doc/stamp-vti, doc/version.texi: Rebuilt.
++
++2013-11-13  Anthony Green  <green@moxielogic.com>
++
++	* include/ffi_common.h: Respect HAVE_ALLOCA_H for GNU compiler
++	based build. (Thanks to tmr111116 on github)
++
++2013-11-09  Anthony Green  <green@moxielogic.com>
++
++	* m4/libtool.m4: Refresh.
++	* configure, Makefile.in: Rebuilt.
++	* README: Add more notes about next release.
++
++2013-11-09  Shigeharu TAKENO  <shige@iee.niit.ac.jp>
++
++	* m4/ax_gcc_archflag.m4 (ax_gcc_arch): Don't recognize
++	UltraSPARC-IIi as ultrasparc3.
++
++2013-11-06  Mark Kettenis  <kettenis@gnu.org>
++
++	* src/x86/freebsd.S (ffi_call_SYSV): Align the stack pointer to
++        16-bytes.
++
++2013-11-06  Konstantin Belousov <kib@freebsd.org>
++
++	* src/x86/freebsd.S (ffi_closure_raw_SYSV): Mark the assembler
++	source as not requiring executable stack.
++
++2013-11-02  Anthony Green  <green@moxielogic.com>
++
++	* doc/libffi.texi (The Basics): Clarify return value buffer size
++	requirements.  Also, NULL result buffer pointers are no longer
++	supported.
++	* doc/libffi.info: Rebuilt.
++
++2013-11-02  Mischa Jonker  <mjonker@synopsys.com>
++
++	* Makefile.am (nodist_libffi_la_SOURCES): Fix build error.
++	* Makefile.in: Rebuilt.
++
++2013-11-02  David Schneider  <david.schneider@bivab.de>
++
++	* src/arm/ffi.c: more robust argument handling for closures on arm hardfloat
++	* testsuite/libffi.call/many_mixed.c: New file.
++	* testsuite/libffi.call/cls_many_mixed_args.c: More tests.
++
++2013-11-02  Vitaly Budovski
++
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Don't align stack for win32.
++
++2013-10-23  Mark H Weaver  <mhw@netris.org>
++
++	* src/mips/ffi.c: Fix handling of uint32_t arguments on the
++	MIPS N32 ABI.
++
++2013-10-13  Sandra Loosemore  <sandra@codesourcery.com>
++
++	* README: Add Nios II to table of supported platforms.
++	* Makefile.am (EXTRA_DIST): Add nios2 files.
++	(nodist_libffi_la_SOURCES): Likewise.
++	* Makefile.in: Regenerated.
++	* configure.ac (nios2*-linux*): New host.
++	(NIOS2): Add AM_CONDITIONAL.
++	* configure: Regenerated.
++	* src/nios2/ffi.c: New.
++	* src/nios2/ffitarget.h: New.
++	* src/nios2/sysv.S: New.
++	* src/prep_cif.c (initialize_aggregate): Handle extra structure
++	alignment via FFI_AGGREGATE_ALIGNMENT.
++	(ffi_prep_cif_core): Conditionalize structure return for NIOS2.
++
++2013-10-10  Sandra Loosemore  <sandra@codesourcery.com>
++
++	* testsuite/libffi.call/cls_many_mixed_args.c (cls_ret_double_fn):
++	Fix uninitialized variable.
++
++2013-10-11  Marcus Shawcroft  <marcus.shawcroft@arm.com>
++
++	* testsuite/libffi.call/many.c (many): Replace * with +.
++
++2013-10-08  Ondřej Bílka  <neleai@seznam.cz>
++
++	* src/aarch64/ffi.c, src/aarch64/sysv.S, src/arm/ffi.c,
++	src/arm/gentramp.sh, src/bfin/sysv.S, src/closures.c,
++	src/dlmalloc.c, src/ia64/ffi.c, src/microblaze/ffi.c,
++	src/microblaze/sysv.S, src/powerpc/darwin_closure.S,
++	src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/sh/ffi.c,
++	src/tile/tile.S, testsuite/libffi.call/nested_struct11.c: Fix
++	spelling errors.
++
++2013-10-08  Anthony Green  <green@moxielogic.com>
++
++	* aclocal.m4, compile, config.guess, config.sub, depcomp,
++	install-sh, mdate-sh, missing, texinfo.tex: Update from upstream.
++	* configure.ac: Update version to 3.0.14-rc0.
++	* Makefile.in, configure, Makefile.in, include/Makefile.in,
++	man/Makefile.in, testsuite/Makefile.in: Rebuilt.
++	* README: Mention M88K and VAX.
++
++2013-07-15  Miod Vallat  <miod@openbsd.org>
++
++	* Makefile.am,
++	configure.ac,
++	src/m88k/ffi.c,
++	src/m88k/ffitarget.h,
++	src/m88k/obsd.S,
++	src/vax/elfbsd.S,
++	src/vax/ffi.c,
++	src/vax/ffitarget.h: Add m88k and vax support.
++
++2013-06-24 Alan Modra  <amodra@gmail.com>
++
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Move var declaration
++	before statements.
++	(ffi_prep_args64): Support little-endian.
++	(ffi_closure_helper_SYSV, ffi_closure_helper_LINUX64): Likewise.
++	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Likewise.
++	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
++
++2013-06-12  Mischa Jonker  <mjonker@synopsys.com>
++
++	 * configure.ac: Add support for ARC.
++	 * Makefile.am: Likewise.
++	 * README: Add ARC details.
++	 * src/arc/arcompact.S: New.
++	 * src/arc/ffi.c: Likewise.
++	 * src/arc/ffitarget.h: Likewise.
++
++2013-03-28  David Schneider  <david.schneider@bivab.de>
++
++	 * src/arm/ffi.c: Fix support for ARM hard-float calling convention.
++	 * src/arm/sysv.S: call different methods for SYSV and VFP ABIs.
++	 * testsuite/libffi.call/cls_many_mixed_args.c: testcase for a closure with
++	 mixed arguments, many doubles.
++	 * testsuite/libffi.call/many_double.c: testcase for calling a function using
++	 more than 8 doubles.
++	 * testcase/libffi.call/many.c: use absolute value to check result against an
++	 epsilon
++
++2013-03-17  Anthony Green  <green@moxielogic.com>
++
++	* README: Update for 3.0.13.
++	* configure.ac: Ditto.
++	* configure: Rebuilt.
++	* doc/*: Update version.
++
++2013-03-17  Dave Korn  <dave.korn.cygwin@gmail.com>
++
++	* src/closures.c (is_emutramp_enabled
++	[!FFI_MMAP_EXEC_EMUTRAMP_PAX]): Move default definition outside
++	enclosing #if scope.
++
++2013-03-17  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Only modify toolexecdir in certain cases.
++	* configure: Rebuilt.
++
++2013-03-16  Gilles Talis  <gilles.talis@gmail.com>
++
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Don't use
++	fparg_count,etc on __NO_FPRS__ targets.
++
++2013-03-16  Alan Hourihane  <alanh@fairlite.co.uk>
++
++	* src/m68k/sysv.S (epilogue): Don't use extb instruction on
++	m680000 machines.
++
++2013-03-16  Alex Gaynor <alex.gaynor@gmail.com>
++
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Always align stack.
++
++2013-03-13  Markos Chandras <markos.chandras@imgtec.com>
++
++	* configure.ac: Add support for Imagination Technologies Meta.
++	* Makefile.am: Likewise.
++	* README: Add Imagination Technologies Meta details.
++	* src/metag/ffi.c: New.
++	* src/metag/ffitarget.h: Likewise.
++	* src/metag/sysv.S: Likewise.
++
++2013-02-24  Andreas Schwab  <schwab@linux-m68k.org>
++
++	* doc/libffi.texi (Structures): Fix missing category argument of
++	@deftp.
++
++2013-02-11  Anthony Green <green@moxielogic.com>
++
++	* configure.ac: Update release number to 3.0.12.
++	* configure: Rebuilt.
++	* README: Update release info.
++
++2013-02-10  Anthony Green <green@moxielogic.com>
++
++	* README: Add Moxie.
++	* src/moxie/ffi.c: Created.
++	* src/moxie/eabi.S: Created.
++	* src/moxie/ffitarget.h: Created.
++	* Makefile.am (nodist_libffi_la_SOURCES): Add Moxie.
++	* Makefile.in: Rebuilt.
++	* configure.ac: Add Moxie.
++	* configure: Rebuilt.
++	* testsuite/libffi.call/huge_struct.c: Disable format string
++	warnings for moxie*-*-elf tests.
++
++2013-02-10  Anthony Green <green@moxielogic.com>
++
++	* Makefile.am (LTLDFLAGS): Fix reference.
++	* Makefile.in: Rebuilt.
++
++2013-02-10  Anthony Green <green@moxielogic.com>
++
++	* README: Update supported platforms.  Update test results link.
++
++2013-02-09  Anthony Green <green@moxielogic.com>
++
++	* testsuite/libffi.call/negint.c: Remove forced -O2.
++	* testsuite/libffi.call/many2.c (foo): Remove GCCism.
++	* testsuite/libffi.call/ffitest.h: Add default PRIuPTR definition.
++
++	* src/sparc/v8.S (ffi_closure_v8): Import ancient ulonglong
++	closure return type fix developed by Martin v. Löwis for cpython
++	fork.
++
++2013-02-08  Andreas Tobler  <andreast@fgznet.ch>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Fix small struct
++	support.
++	* src/powerpc/sysv.S: Ditto.
++
++2013-02-08  Anthony Green <green@moxielogic.com>
++
++	* testsuite/libffi.call/cls_longdouble.c: Remove xfail for
++	arm*-*-*.
++
++2013-02-08  Anthony Green <green@moxielogic.com>
++
++	* src/sparc/ffi.c (ffi_prep_closure_loc): Fix cache flushing for GCC.
++
++2013-02-08  Matthias Klose  <doko@ubuntu.com>
++
++	* man/ffi_prep_cif.3: Clean up for debian linter.
++
++2013-02-08  Peter Bergner  <bergner@vnet.ibm.com>
++
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Account for FP args pushed
++	on the stack.
++
++2013-02-08  Anthony Green <green@moxielogic.com>
++
++	* Makefile.am (EXTRA_DIST): Add missing files.
++	* testsuite/Makefile.am (EXTRA_DIST): Ditto.
++	* Makefile.in: Rebuilt.
++
++2013-02-08  Anthony Green <green@moxielogic.com>
++
++	* configure.ac: Move sparc asm config checks to within functions
++	for compatibility with sun tools.
++	* configure: Rebuilt.
++	* src/sparc/ffi.c (ffi_prep_closure_loc): Flush cache on v9
++	systems.
++	* src/sparc/v8.S (ffi_flush_icache): Implement a sparc v9 cache
++	flusher.
++
++2013-02-08  Nathan Rossi <nathan.rossi@xilinx.com>
++
++	* src/microblaze/ffi.c (ffi_closure_call_SYSV): Fix handling of
++	small big-endian structures.
++	(ffi_prep_args): Ditto.
++
++2013-02-07  Anthony Green <green@moxielogic.com>
++
++	* src/sparc/v8.S (ffi_call_v8): Fix typo from last patch
++	(effectively hiding ffi_call_v8).
++
++2013-02-07  Anthony Green <green@moxielogic.com>
++
++	* configure.ac: Update bug reporting address.
++	* configure.in: Rebuild.
++
++	* src/sparc/v8.S (ffi_flush_icache): Out-of-line cache flusher for
++	Sun compiler.
++	* src/sparc/ffi.c (ffi_call): Remove warning.
++	Call ffi_flush_icache for non-GCC builds.
++	(ffi_prep_closure_loc): Use ffi_flush_icache.
++
++	* Makefile.am (EXTRA_DIST): Add libtool-ldflags.
++	* Makefile.in: Rebuilt.
++	* libtool-ldflags: New file.
++
++2013-02-07  Daniel Schepler <dschepler@gmail.com>
++
++	* configure.ac: Correctly identify x32 systems as 64-bit.
++	* m4/libtool.m4: Remove libtool expr error.
++	* aclocal.m4, configure: Rebuilt.
++
++2013-02-07  Anthony Green <green@moxielogic.com>
++
++	* configure.ac: Fix GCC usage test.
++	* configure: Rebuilt.
++	* README: Mention LLVM/GCC x86_64 issue.
++	* testsuite/Makefile.in: Rebuilt.
++
++2013-02-07  Anthony Green <green@moxielogic.com>
++
++	* testsuite/libffi.call/cls_double_va.c (main): Replace // style
++	comments with /* */ for xlc compiler.
++	* testsuite/libffi.call/stret_large.c (main): Ditto.
++	* testsuite/libffi.call/stret_large2.c (main): Ditto.
++	* testsuite/libffi.call/nested_struct1.c (main): Ditto.
++	* testsuite/libffi.call/huge_struct.c (main): Ditto.
++	* testsuite/libffi.call/float_va.c (main): Ditto.
++	* testsuite/libffi.call/cls_struct_va1.c (main): Ditto.
++	* testsuite/libffi.call/cls_pointer_stack.c (main): Ditto.
++	* testsuite/libffi.call/cls_pointer.c (main): Ditto.
++	* testsuite/libffi.call/cls_longdouble_va.c (main): Ditto.
++
++2013-02-06  Anthony Green <green@moxielogic.com>
++
++	* man/ffi_prep_cif.3: Clean up for debian lintian checker.
++
++2013-02-06  Anthony Green <green@moxielogic.com>
++
++	* Makefile.am (pkgconfigdir): Add missing pkgconfig install bits.
++	* Makefile.in: Rebuild.
++
++2013-02-02  Mark H Weaver <mhw@netris.org>
++
++	* src/x86/ffi64.c (ffi_call): Sign-extend integer arguments passed
++	via general purpose registers.
++
++2013-01-21  Nathan Rossi <nathan.rossi@xilinx.com>
++
++	* README: Add MicroBlaze details.
++	* Makefile.am: Add MicroBlaze support.
++	* configure.ac: Likewise.
++	* src/microblaze/ffi.c: New.
++	* src/microblaze/ffitarget.h: Likewise.
++	* src/microblaze/sysv.S: Likewise.
++
++2013-01-21  Nathan Rossi <nathan.rossi@xilinx.com>
++	* testsuite/libffi.call/return_uc.c: Fixed issue.
++
++2013-01-21  Chris Zankel   <chris@zankel.net>
++
++	* README: Add Xtensa support.
++	* Makefile.am: Likewise.
++	* configure.ac: Likewise.
++	* Makefile.in Regenerate.
++	* configure: Likewise.
++	* src/prep_cif.c: Handle Xtensa.
++	* src/xtensa: New directory.
++	* src/xtensa/ffi.c: New file.
++	* src/xtensa/ffitarget.h: Ditto.
++	* src/xtensa/sysv.S: Ditto.
++
++2013-01-11  Anthony Green  <green@moxielogic.com>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Replace // style
++	comments with /* */ for xlc compiler.
++	* src/powerpc/aix.S (ffi_call_AIX): Ditto.
++	* testsuite/libffi.call/ffitest.h (allocate_mmap): Delete
++	deprecated inline function.
++	* testsuite/libffi.special/ffitestcxx.h: Ditto.
++	* README: Add update for AIX support.
++
++2013-01-11  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Robustify pc relative reloc check.
++	* m4/ax_cc_maxopt.m4: Don't -malign-double.  This is an ABI
++	changing option for 32-bit x86.
++	* aclocal.m4, configure: Rebuilt.
++	* README: Update supported target list.
++
++2013-01-10  Anthony Green  <green@moxielogic.com>
++
++	* README (tested): Add Compiler column to table.
++
++2013-01-10  Anthony Green  <green@moxielogic.com>
++
++	* src/x86/ffi64.c (struct register_args): Make sse array and array
++	of unions for sunpro compiler compatibility.
++
++2013-01-10  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Test target platform size_t size.  Handle both 32
++	and 64-bit builds for x86_64-* and i?86-* targets (allowing for
++	CFLAG option to change default settings).
++	* configure, aclocal.m4: Rebuilt.
++
++2013-01-10  Anthony Green  <green@moxielogic.com>
++
++	* testsuite/libffi.special/special.exp: Only run exception
++	handling tests when using GNU compiler.
++
++	* m4/ax_compiler_vendor.m4: New file.
++	* configure.ac: Test for compiler vendor and don't use
++	AX_CFLAGS_WARN_ALL with the sun compiler.
++	* aclocal.m4, configure: Rebuilt.
++
++2013-01-10  Anthony Green  <green@moxielogic.com>
++
++	* include/ffi_common.h: Don't use GCCisms to define types when
++	building with the SUNPRO compiler.
++
++2013-01-10  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Put local.exp in the right place.
++	* configure: Rebuilt.
++
++	* src/x86/ffi.c: Update comment about regparm function attributes.
++	* src/x86/sysv.S (ffi_closure_SYSV): The SUNPRO compiler requires
++	that all function arguments be passed on the stack (no regparm
++	support).
++
++2013-01-08  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Generate local.exp.  This sets CC_FOR_TARGET
++	when we are using the vendor compiler.
++	* testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): Point to
++	../local.exp.
++	* configure, testsuite/Makefile.in: Rebuilt.
++
++	* testsuite/libffi.call/call.exp: Run tests with different
++	options, depending on whether or not we are using gcc or the
++	vendor compiler.
++	* testsuite/lib/libffi.exp (libffi-init): Set using_gcc based on
++	whether or not we are building/testing with gcc.
++
++2013-01-08  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Switch x86 solaris target to X86 by default.
++	* configure: Rebuilt.
++
++2013-01-08  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Fix test for read-only eh_frame.
++	* configure: Rebuilt.
++
++2013-01-08  Anthony Green  <green@moxielogic.com>
++
++	* src/x86/sysv.S, src/x86/unix64.S: Only emit DWARF unwind info
++	when building with the GNU toolchain.
++	* testsuite/libffi.call/ffitest.h (CHECK): Fix for Solaris vendor
++	compiler.
++
++2013-01-07  Thorsten Glaser <tg@mirbsd.org>
++
++	* testsuite/libffi.call/cls_uchar_va.c,
++	testsuite/libffi.call/cls_ushort_va.c,
++	testsuite/libffi.call/va_1.c: Testsuite fixes.
++
++2013-01-07  Thorsten Glaser <tg@mirbsd.org>
++
++	* src/m68k/ffi.c (CIF_FLAGS_SINT8, CIF_FLAGS_SINT16): Define.
++	(ffi_prep_cif_machdep): Fix 8-bit and 16-bit signed calls.
++	* src/m68k/sysv.S (ffi_call_SYSV, ffi_closure_SYSV): Ditto.
++
++2013-01-04  Anthony Green  <green@moxielogic.com>
++
++	* Makefile.am (AM_CFLAGS): Don't automatically add -fexceptions
++	and -Wall.  This is set in the configure script after testing for
++	GCC.
++	* Makefile.in: Rebuilt.
++
++2013-01-02  rofl0r <https://github.com/rofl0r>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Fix build error on ppc
++	when long double == double.
++
++2013-01-02  Reini Urban  <rurban@x-ray.at>
++
++	* Makefile.am (libffi_la_LDFLAGS): Add -no-undefined to LDFLAGS
++	(required for shared libs on cygwin/mingw).
++	* Makefile.in: Rebuilt.
++
++2012-10-31  Alan Modra  <amodra@gmail.co>
++
++	* src/powerpc/linux64_closure.S: Add new ABI support.
++	* src/powerpc/linux64.S: Likewise.
++
++2012-10-30  Magnus Granberg  <zorry@gentoo.org>
++	    Pavel Labushev  <pavel.labushev@runbox.ru>
++
++	* configure.ac: New options pax_emutramp
++	* configure, fficonfig.h.in: Regenerated
++	* src/closures.c: New function emutramp_enabled_check() and
++	checks.
++
++2012-10-30  Frederick Cheung  <frederick.cheung@gmail.com>
++
++	* configure.ac: Enable FFI_MAP_EXEC_WRIT for Darwin 12 (mountain
++	lion) and future version.
++	* configure: Rebuild.
++
++2012-10-30  James Greenhalgh  <james.greenhalgh at arm.com>
++            Marcus Shawcroft  <marcus.shawcroft at arm.com>
++
++        * README: Add details of aarch64 port.
++        * src/aarch64/ffi.c: New.
++        * src/aarch64/ffitarget.h: Likewise.
++        * src/aarch64/sysv.S: Likewise.
++	* Makefile.am: Support aarch64.
++	* configure.ac: Support aarch64.
++	* Makefile.in, configure: Rebuilt.
++
++2012-10-30  James Greenhalgh  <james.greenhalgh at arm.com>
++            Marcus Shawcroft  <marcus.shawcroft at arm.com>
++
++        * testsuite/lib/libffi.exp: Add support for aarch64.
++        * testsuite/libffi.call/cls_struct_va1.c: New.
++        * testsuite/libffi.call/cls_uchar_va.c: Likewise.
++        * testsuite/libffi.call/cls_uint_va.c: Likewise.
++        * testsuite/libffi.call/cls_ulong_va.c: Likewise.
++        * testsuite/libffi.call/cls_ushort_va.c: Likewise.
++        * testsuite/libffi.call/nested_struct11.c: Likewise.
++        * testsuite/libffi.call/uninitialized.c: Likewise.
++        * testsuite/libffi.call/va_1.c: Likewise.
++        * testsuite/libffi.call/va_struct1.c: Likewise.
++        * testsuite/libffi.call/va_struct2.c: Likewise.
++        * testsuite/libffi.call/va_struct3.c: Likewise.
++
++2012-10-12  Walter Lee  <walt@tilera.com>
++
++        * Makefile.am: Add TILE-Gx/TILEPro support.
++        * configure.ac: Likewise.
++        * Makefile.in: Regenerate.
++        * configure: Likewise.
++        * src/prep_cif.c (ffi_prep_cif_core): Handle TILE-Gx/TILEPro.
++        * src/tile: New directory.
++        * src/tile/ffi.c: New file.
++        * src/tile/ffitarget.h: Ditto.
++        * src/tile/tile.S: Ditto.
++
++2012-10-12  Matthias Klose  <doko@ubuntu.com>
++
++	* generate-osx-source-and-headers.py: Normalize whitespace.
++
++2012-09-14  David Edelsohn  <dje.gcc@gmail.com>
++
++	* configure: Regenerated.
++
++2012-08-26  Andrew Pinski  <apinski@cavium.com>
++
++	PR libffi/53014
++	* src/mips/ffi.c (ffi_prep_closure_loc): Allow n32 with soft-float and n64 with
++	soft-float.
++
++2012-08-08  Uros Bizjak  <ubizjak@gmail.com>
++
++	* src/s390/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
++	just return FFI_BAD_ABI when things are wrong.
++
++2012-07-18  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR libffi/53982
++	PR libffi/53973
++	* src/x86/ffitarget.h: Check __ILP32__ instead of __LP64__ for x32.
++	(FFI_SIZEOF_JAVA_RAW): Defined to 4 for x32.
++
++2012-05-16  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* configure: Regenerated.
++
++2012-05-05  Nicolas Lelong
++
++	* libffi.xcodeproj/project.pbxproj: Fixes.
++	* README: Update for iOS builds.
++
++2012-04-23  Alexandre Keunecke I. de Mendonca <alexandre.keunecke@gmail.com>
++
++	* configure.ac: Add Blackfin/sysv support
++	* Makefile.am: Add Blackfin/sysv support
++	* src/bfin/ffi.c:  Add Blackfin/sysv support
++	* src/bfin/ffitarget.h: Add Blackfin/sysv support
++
++2012-04-11  Anthony Green  <green@moxielogic.com>
++
++	* Makefile.am (EXTRA_DIST): Add new script.
++	* Makefile.in: Rebuilt.
++
++2012-04-11  Zachary Waldowski  <zwaldowski@gmail.com>
++
++	* generate-ios-source-and-headers.py,
++	libffi.xcodeproj/project.pbxproj: Support a Mac static library via
++	Xcode. Set iOS compatibility to 4.0.  Move iOS trampoline
++	generation into an Xcode "run script" phase.  Include both as
++	Xcode build scripts. Don't always regenerate config files.
++
++2012-04-10  Anthony Green  <green@moxielogic.com>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Add missing semicolon.
++
++2012-04-06  Anthony Green  <green@moxielogic.com>
++
++	* Makefile.am (EXTRA_DIST): Add new iOS/xcode files.
++	* Makefile.in: Rebuilt.
++
++2012-04-06  Mike Lewis  <mikelikespie@gmail.com>
++
++	* generate-ios-source-and-headers.py: New file.
++	* libffi.xcodeproj/project.pbxproj: New file.
++	* README: Update instructions on building iOS binary.
++	* build-ios.sh: Delete.
++
++2012-04-06  Anthony Green  <green@moxielogic.com>
++
++	* src/x86/ffi64.c (UINT128): Define differently for Intel and GNU
++	compilers, then use it.
++
++2012-04-06  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* m4/libtool.m4 (_LT_ENABLE_LOCK): Support x32.
++
++2012-04-06  Anthony Green  <green@moxielogic.com>
++
++	* testsuite/Makefile.am (EXTRA_DIST): Add missing test cases.
++	* testsuite/Makefile.in: Rebuilt.
++
++2012-04-05  Zachary Waldowski  <zwaldowski@gmail.com>
++
++	* include/ffi.h.in: Add missing trampoline table fields.
++	* src/arm/sysv.S: Fix ENTRY definition, and wrap symbol references
++	in CNAME.
++	* src/x86/ffi.c: Wrap Windows specific code in ifdefs.
++
++2012-04-02  Peter Bergner  <bergner@vnet.ibm.com>
++
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Declare double_tmp.
++	Silence casting pointer to integer of different size warning.
++	Delete goto to previously deleted label.
++	(ffi_call): Silence possibly undefined warning.
++	(ffi_closure_helper_SYSV): Declare variable type.
++
++2012-04-02  Peter Rosin  <peda@lysator.liu.se>
++
++	* src/x86/win32.S (ffi_call_win32): Sign/zero extend the return
++	value in the Intel version as is already done for the AT&T version.
++	(ffi_closure_SYSV): Likewise.
++	(ffi_closure_raw_SYSV): Likewise.
++	(ffi_closure_STDCALL): Likewise.
++
++2012-03-29  Peter Rosin  <peda@lysator.liu.se>
++
++	* src/x86/win32.S (ffi_closure_raw_THISCALL): Unify the frame
++	generation, fix the ENDP label and remove the surplus third arg
++	from the 'lea' insn.
++
++2012-03-29  Peter Rosin  <peda@lysator.liu.se>
++
++	* src/x86/win32.S (ffi_closure_raw_SYSV): Make the 'stubraw' label
++	visible outside the PROC, so that ffi_closure_raw_THISCALL can see
++	it.  Also instruct the assembler to add a frame to the function.
++
++2012-03-23  Peter Rosin  <peda@lysator.liu.se>
++
++	* Makefile.am (AM_CPPFLAGS): Add -DFFI_BUILDING.
++	* Makefile.in: Rebuilt.
++	* include/ffi.h.in [MSVC]: Add __declspec(dllimport) decorations
++	to all data exports, when compiling libffi clients using MSVC.
++
++2012-03-29  Peter Rosin  <peda@lysator.liu.se>
++
++	* src/x86/ffitarget.h (ffi_abi): Add new ABI FFI_MS_CDECL and
++	make it the default for MSVC.
++	(FFI_TYPE_MS_STRUCT): New structure return convention.
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Tweak the structure
++	return convention for FFI_MS_CDECL to be FFI_TYPE_MS_STRUCT
++	instead of an ordinary FFI_TYPE_STRUCT.
++	(ffi_prep_args): Treat FFI_TYPE_MS_STRUCT as FFI_TYPE_STRUCT.
++	(ffi_call): Likewise.
++	(ffi_prep_incoming_args_SYSV): Likewise.
++	(ffi_raw_call): Likewise.
++	(ffi_prep_closure_loc): Treat FFI_MS_CDECL as FFI_SYSV.
++	* src/x86/win32.S (ffi_closure_SYSV): For FFI_TYPE_MS_STRUCT,
++	return a pointer to the result structure in eax and don't pop
++	that pointer from the stack, the caller takes care of it.
++	(ffi_call_win32): Treat FFI_TYPE_MS_STRUCT as FFI_TYPE_STRUCT.
++	(ffi_closure_raw_SYSV): Likewise.
++
++2012-03-22  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/closure_stdcall.c [MSVC]: Add inline
++	assembly version with Intel syntax.
++	* testsuite/libffi.call/closure_thiscall.c [MSVC]: Likewise.
++
++2012-03-23  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/ffitest.h: Provide abstration of
++	__attribute__((fastcall)) in the form of a __FASTCALL__
++	define.  Define it to __fastcall for MSVC.
++	* testsuite/libffi.call/fastthis1_win32.c: Use the above.
++	* testsuite/libffi.call/fastthis2_win32.c: Likewise.
++	* testsuite/libffi.call/fastthis3_win32.c: Likewise.
++	* testsuite/libffi.call/strlen2_win32.c: Likewise.
++	* testsuite/libffi.call/struct1_win32.c: Likewise.
++	* testsuite/libffi.call/struct2_win32.c: Likewise.
++
++2012-03-22  Peter Rosin  <peda@lysator.liu.se>
++
++	* src/x86/win32.S [MSVC] (ffi_closure_THISCALL): Remove the manual
++	frame on function entry, MASM adds one automatically.
++
++2012-03-22  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/ffitest.h [MSVC]: Add kludge for missing
++	bits in the MSVC headers.
++
++2012-03-22  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/cls_12byte.c: Adjust to the C89 style
++	with no declarations after statements.
++	* testsuite/libffi.call/cls_16byte.c: Likewise.
++	* testsuite/libffi.call/cls_18byte.c: Likewise.
++	* testsuite/libffi.call/cls_19byte.c: Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte1.c: Likewise.
++	* testsuite/libffi.call/cls_24byte.c: Likewise.
++	* testsuite/libffi.call/cls_2byte.c: Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_3byte1.c: Likewise.
++	* testsuite/libffi.call/cls_3byte2.c: Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_4byte.c: Likewise.
++	* testsuite/libffi.call/cls_5_1_byte.c: Likewise.
++	* testsuite/libffi.call/cls_5byte.c: Likewise.
++	* testsuite/libffi.call/cls_64byte.c: Likewise.
++	* testsuite/libffi.call/cls_6_1_byte.c: Likewise.
++	* testsuite/libffi.call/cls_6byte.c: Likewise.
++	* testsuite/libffi.call/cls_7_1_byte.c: Likewise.
++	* testsuite/libffi.call/cls_7byte.c: Likewise.
++	* testsuite/libffi.call/cls_8byte.c: Likewise.
++	* testsuite/libffi.call/cls_9byte1.c: Likewise.
++	* testsuite/libffi.call/cls_9byte2.c: Likewise.
++	* testsuite/libffi.call/cls_align_double.c: Likewise.
++	* testsuite/libffi.call/cls_align_float.c: Likewise.
++	* testsuite/libffi.call/cls_align_longdouble.c: Likewise.
++	* testsuite/libffi.call/cls_align_longdouble_split.c: Likewise.
++	* testsuite/libffi.call/cls_align_longdouble_split2.c: Likewise.
++	* testsuite/libffi.call/cls_align_pointer.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint16.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint32.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint64.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint16.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint32.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint64.c: Likewise.
++	* testsuite/libffi.call/cls_dbls_struct.c: Likewise.
++	* testsuite/libffi.call/cls_pointer_stack.c: Likewise.
++	* testsuite/libffi.call/err_bad_typedef.c: Likewise.
++	* testsuite/libffi.call/huge_struct.c: Likewise.
++	* testsuite/libffi.call/nested_struct.c: Likewise.
++	* testsuite/libffi.call/nested_struct1.c: Likewise.
++	* testsuite/libffi.call/nested_struct10.c: Likewise.
++	* testsuite/libffi.call/nested_struct2.c: Likewise.
++	* testsuite/libffi.call/nested_struct3.c: Likewise.
++	* testsuite/libffi.call/nested_struct4.c: Likewise.
++	* testsuite/libffi.call/nested_struct5.c: Likewise.
++	* testsuite/libffi.call/nested_struct6.c: Likewise.
++	* testsuite/libffi.call/nested_struct7.c: Likewise.
++	* testsuite/libffi.call/nested_struct8.c: Likewise.
++	* testsuite/libffi.call/nested_struct9.c: Likewise.
++	* testsuite/libffi.call/stret_large.c: Likewise.
++	* testsuite/libffi.call/stret_large2.c: Likewise.
++	* testsuite/libffi.call/stret_medium.c: Likewise.
++	* testsuite/libffi.call/stret_medium2.c: Likewise.
++	* testsuite/libffi.call/struct1.c: Likewise.
++	* testsuite/libffi.call/struct1_win32.c: Likewise.
++	* testsuite/libffi.call/struct2.c: Likewise.
++	* testsuite/libffi.call/struct2_win32.c: Likewise.
++	* testsuite/libffi.call/struct3.c: Likewise.
++	* testsuite/libffi.call/struct4.c: Likewise.
++	* testsuite/libffi.call/struct5.c: Likewise.
++	* testsuite/libffi.call/struct6.c: Likewise.
++	* testsuite/libffi.call/struct7.c: Likewise.
++	* testsuite/libffi.call/struct8.c: Likewise.
++	* testsuite/libffi.call/struct9.c: Likewise.
++	* testsuite/libffi.call/testclosure.c: Likewise.
++
++2012-03-21  Peter Rosin	 <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/float_va.c (float_va_fn): Use %f when
++	printing doubles (%lf is for long doubles).
++	(main): Likewise.
++
++2012-03-21  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/lib/target-libpath.exp [*-*-cygwin*, *-*-mingw*]
++	(set_ld_library_path_env_vars): Add the library search dir to PATH
++	(and save PATH for later).
++	(restore_ld_library_path_env_vars): Restore PATH.
++
++2012-03-21  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/lib/target-libpath.exp [*-*-cygwin*, *-*-mingw*]
++	(set_ld_library_path_env_vars): Add the library search dir to PATH
++	(and save PATH for later).
++	(restore_ld_library_path_env_vars): Restore PATH.
++
++2012-03-20  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/strlen2_win32.c (main): Remove bug.
++	* src/x86/win32.S [MSVC] (ffi_closure_SYSV): Make the 'stub' label
++	visible outside the PROC, so that ffi_closure_THISCALL can see it.
++
++2012-03-20  Peter Rosin  <peda@lysator.liu.se>
++
++	* testsuite/libffi.call/strlen2_win32.c (main): Remove bug.
++	* src/x86/win32.S [MSVC] (ffi_closure_SYSV): Make the 'stub' label
++	visible outside the PROC, so that ffi_closure_THISCALL can see it.
++
++2012-03-19  Alan Hourihane  <alanh@fairlite.co.uk>
++
++	* src/m68k/ffi.c: Add MINT support.
++	* src/m68k/sysv.S: Ditto.
++
++2012-03-06  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* src/arm/ffi.c (ffi_call): Add __ARM_EABI__ guard around call to
++	ffi_call_VFP().
++	(ffi_prep_closure_loc): Add __ARM_EABI__ guard around use of
++	ffi_closure_VFP.
++	* src/arm/sysv.S: Add __ARM_EABI__ guard around VFP code.
++
++2012-03-19  chennam  <csit@axway.com>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_closure_loc): Fix AIX closure
++	support.
++
++2012-03-13  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
++	just return FFI_BAD_ABI when things are wrong.
++	* src/sh64/ffi.c (ffi_prep_closure_loc): Ditto.
++
++2012-03-09  David Edelsohn  <dje.gcc@gmail.com>
++
++	* src/powerpc/aix_closure.S (ffi_closure_ASM): Adjust for Darwin64
++	change to return value of ffi_closure_helper_DARWIN and load type
++	from return type.
++
++2012-03-03  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* src/x86/ffi64.c (ffi_call): Cast the return value to unsigned
++	long.
++	(ffi_prep_closure_loc): Cast to 64bit address in trampoline.
++	(ffi_closure_unix64_inner): Cast return pointer to unsigned long
++	first.
++
++	* src/x86/ffitarget.h (FFI_SIZEOF_ARG): Defined to 8 for x32.
++	(ffi_arg): Set to unsigned long long for x32.
++	(ffi_sarg): Set to long long for x32.
++
++2012-03-03  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* src/prep_cif.c (ffi_prep_cif_core): Properly check bad ABI.
++
++2012-03-03  Andoni Morales Alastruey  <ylatuya@gmail.com>
++
++	* configure.ac: Add -no-undefined for both 32- and 64-bit x86
++	windows-like hosts.
++	* configure: Rebuilt.
++
++2012-02-27  Mikael Pettersson  <mikpe@it.uu.se>
++
++	PR libffi/52223
++	* Makefile.am (FLAGS_TO_PASS): Define.
++	* Makefile.in: Regenerate.
++
++2012-02-23  Anthony Green  <green@moxielogic.com>
++
++	* src/*/ffitarget.h: Ensure that users never include ffitarget.h
++	directly.
++
++2012-02-23  Kai Tietz  <ktietz@redhat.com>
++
++	PR libffi/52221
++	* src/x86/ffi.c (ffi_closure_raw_THISCALL): New
++	prototype.
++	(ffi_prep_raw_closure_loc): Use ffi_closure_raw_THISCALL for
++	thiscall-convention.
++	(ffi_raw_call): Use ffi_prep_args_raw.
++	* src/x86/win32.S (ffi_closure_raw_THISCALL): Add
++	implementation for stub.
++
++2012-02-10  Kai Tietz  <ktietz@redhat.com>
++
++	* configure.ac (AM_LTLDFLAGS): Add -no-undefine for x64
++	windows target.
++	* configure: Regenerated.
++
++2012-02-08  Kai Tietz  <ktietz@redhat.com>
++
++	* src/prep_cif.c (ffi_prep_cif): Allow for X86_WIN32
++	also FFI_THISCALL.
++	* src/x86/ffi.c (ffi_closure_THISCALL): Add prototype.
++	(FFI_INIT_TRAMPOLINE_THISCALL): New trampoline code.
++	(ffi_prep_closure_loc): Add FFI_THISCALL support.
++	* src/x86/ffitarget.h (FFI_TRAMPOLINE_SIZE): Adjust size.
++	* src/x86/win32.S (ffi_closure_THISCALL): New closure code
++	for thiscall-calling convention.
++	* testsuite/libffi.call/closure_thiscall.c: New test.
++
++2012-01-28  Kai Tietz  <ktietz@redhat.com>
++
++	* src/libffi/src/x86/ffi.c (ffi_call_win32): Add new
++	argument to prototype for specify calling-convention.
++	(ffi_call): Add support for stdcall/thiscall convention.
++	(ffi_prep_args): Likewise.
++	(ffi_raw_call): Likewise.
++	* src/x86/ffitarget.h (ffi_abi): Add FFI_THISCALL and
++	FFI_FASTCALL.
++	* src/x86/win32.S (_ffi_call_win32): Add support for
++	fastcall/thiscall calling-convention calls.
++	* testsuite/libffi.call/fastthis1_win32.c: New test.
++	* testsuite/libffi.call/fastthis2_win32.c: New test.
++	* testsuite/libffi.call/fastthis3_win32.c: New test.
++	* testsuite/libffi.call/strlen2_win32.c: New test.
++	* testsuite/libffi.call/many2_win32.c: New test.
++	* testsuite/libffi.call/struct1_win32.c: New test.
++	* testsuite/libffi.call/struct2_win32.c: New test.
++
++2012-01-23  Uros Bizjak  <ubizjak@gmail.com>
++
++	* src/alpha/ffi.c (ffi_prep_closure_loc): Check for bad ABI.
++
++2012-01-23  Anthony Green  <green@moxielogic.com>
++	    Chris Young  <cdyoung@ntlworld.com>
++
++	* configure.ac: Add Amiga support.
++	* configure: Rebuilt.
++
++2012-01-23  Dmitry Nadezhin  <dmitry.nadezhin@gmail.com>
++
++	* include/ffi_common.h (LIKELY, UNLIKELY): Fix definitions.
++
++2012-01-23  Andreas Schwab  <schwab@linux-m68k.org>
++
++	* src/m68k/sysv.S (ffi_call_SYSV): Properly test for plain
++	mc68000.  Test for __HAVE_68881__ in addition to __MC68881__.
++
++2012-01-19  Jakub Jelinek  <jakub@redhat.com>
++
++	PR rtl-optimization/48496
++	* src/ia64/ffi.c (ffi_call): Fix up aliasing violations.
++
++2012-01-09  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* configure.ac (i?86-*-*): Set TARGET to X86_64.
++	* configure: Regenerate.
++
++2011-12-07  Andrew Pinski  <apinski@cavium.com>
++
++	PR libffi/50051
++	* src/mips/n32.S: Add ".set mips4".
++
++2011-11-21  Andreas Tobler  <andreast@fgznet.ch>
++
++	* configure: Regenerate.
++
++2011-11-12  David Gilbert <david.gilbert@linaro.org>
++
++	* doc/libffi.texi, include/ffi.h.in, include/ffi_common.h,
++	man/Makefile.am, man/ffi.3, man/ffi_prep_cif.3,
++	man/ffi_prep_cif_var.3, src/arm/ffi.c, src/arm/ffitarget.h,
++	src/cris/ffi.c, src/prep_cif.c,
++	testsuite/libffi.call/cls_double_va.c,
++	testsuite/libffi.call/cls_longdouble_va.c,
++	testsuite/libffi.call/float_va.c: Many changes to support variadic
++	function calls.
++
++2011-11-12  Kyle Moffett <Kyle.D.Moffett@boeing.com>
++
++	* src/powerpc/ffi.c, src/powerpc/ffitarget.h,
++	src/powerpc/ppc_closure.S, src/powerpc/sysv.S: Many changes for
++	softfloat powerpc variants.
++
++2011-11-12  Petr Salinger <Petr.Salinger@seznam.cz>
++
++	* configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Fix kfreebsd support.
++	* configure: Rebuilt.
++
++2011-11-12  Timothy Wall  <twall@users.sf.net>
++
++	* src/arm/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV): Max
++	alignment of 4 for wince on ARM.
++
++2011-11-12  Kyle Moffett <Kyle.D.Moffett@boeing.com>
++	    Anthony Green <green@moxielogic.com>
++
++	* src/ppc/sysv.S, src/ppc/ffi.c: Remove use of ppc string
++	instructions (not available on some cores, like the PPC440).
++
++2011-11-12  Kimura Wataru  <kimuraw@i.nifty.jp>
++
++	* m4/ax_enable_builddir: Change from string comparison to numeric
++	comparison for wc output.
++	* configure.ac: Enable FFI_MMAP_EXEC_WRIT for darwin11 aka Mac OS
++	X 10.7.
++	* configure: Rebuilt.
++
++2011-11-12  Anthony Green  <green@moxielogic.com>
++
++	* Makefile.am (AM_CCASFLAGS): Add -g option to build assembly
++	files with debug info.
++	* Makefile.in: Rebuilt.
++
++2011-11-12  Jasper Lievisse Adriaanse <jasper@openbsd.org>
++
++	* README: Update list of supported OpenBSD systems.
++
++2011-11-12  Anthony Green  <green@moxielogic.com>
++
++	* libtool-version: Update.
++	* Makefile.am (nodist_libffi_la_SOURCES): Add src/debug.c if
++	FFI_DEBUG.
++	(libffi_la_SOURCES): Remove src/debug.c
++	(EXTRA_DIST): Add src/debug.c
++	* Makefile.in: Rebuilt.
++	* README: Update for 3.0.11.
++
++2011-11-10  Richard Henderson  <rth@redhat.com>
++
++	* configure.ac (GCC_AS_CFI_PSEUDO_OP): Use it instead of inline check.
++	* configure, aclocal.m4: Rebuild.
++
++2011-09-04  Iain Sandoe  <iains@gcc.gnu.org>
++
++	PR libffi/49594
++	* src/powerpc/darwin_closure.S (stubs): Make the stub binding
++	helper reference track the architecture pointer size.
++
++2011-08-25  Andrew Haley  <aph@redhat.com>
++
++	* src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Remove hard-coded assembly
++	instructions.
++	* src/arm/sysv.S (ffi_arm_trampoline): Put them here instead.
++
++2011-07-11  Andrew Haley  <aph@redhat.com>
++
++        * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Clear icache.
++
++2011-06-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* testsuite/libffi.call/cls_double_va.c: Move PR number to comment.
++	* testsuite/libffi.call/cls_longdouble_va.c: Likewise.
++
++2011-06-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	PR libffi/46660
++	* testsuite/libffi.call/cls_double_va.c: xfail dg-output on
++	mips-sgi-irix6*.
++	* testsuite/libffi.call/cls_longdouble_va.c: Likewise.
++
++2011-06-14  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* testsuite/libffi.call/huge_struct.c (test_large_fn): Use PRIu8,
++	PRId8 instead of %hhu, %hhd.
++	* testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRId8,
++	PRIu8): Define.
++	[__sgi__] (PRId8, PRIu8): Define.
++
++2011-04-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* src/alpha/osf.S (UA_SI, FDE_ENCODING, FDE_ENCODE, FDE_ARANGE):
++	Define.
++	Use them to handle ELF vs. ECOFF differences.
++	[__osf__] (_GLOBAL__F_ffi_call_osf): Define.
++
++2011-03-30  Timothy Wall  <twall@users.sf.net>
++
++	* src/powerpc/darwin.S: Fix unknown FDE encoding.
++	* src/powerpc/darwin_closure.S: ditto.
++
++2011-02-25  Anthony Green  <green@moxielogic.com>
++
++	* src/powerpc/ffi.c (ffi_prep_closure_loc): Allow for more
++	32-bit ABIs.
++
++2011-02-15  Anthony Green  <green@moxielogic.com>
++
++	* m4/ax_cc_maxopt.m4: Don't -malign-double or use -ffast-math.
++	* configure: Rebuilt.
++
++2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* configure: Regenerate.
++
++2011-02-13  Anthony Green  <green@moxielogic.com>
++
++	* include/ffi_common.h (UNLIKELY, LIKELY): Define.
++	* src/x86/ffi64.c (UNLIKELY, LIKELY): Remove definition.
++	* src/prep_cif.c (UNLIKELY, LIKELY): Remove definition.
++
++	* src/prep_cif.c (initialize_aggregate): Convert assertion into
++	FFI_BAD_TYPEDEF return.  Initialize arg size and alignment to 0.
++
++	* src/pa/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
++	just return FFI_BAD_ABI when things are wrong.
++	* src/arm/ffi.c (ffi_prep_closure_loc): Ditto.
++	* src/powerpc/ffi.c (ffi_prep_closure_loc): Ditto.
++	* src/mips/ffi.c (ffi_prep_closure_loc): Ditto.
++	* src/ia64/ffi.c (ffi_prep_closure_loc): Ditto.
++	* src/avr32/ffi.c (ffi_prep_closure_loc): Ditto.
++
++2011-02-11  Anthony Green  <green@moxielogic.com>
++
++	* src/sparc/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
++	just return FFI_BAD_ABI when things are wrong.
++
++2012-02-11  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* src/sparc/v9.S (STACKFRAME): Bump to 176.
++
++2011-02-09  Stuart Shelton  <srcshelton@gmail.com>
++
++	http://bugs.gentoo.org/show_bug.cgi?id=286911
++	* src/mips/ffitarget.h: Clean up error messages.
++	* src/java_raw_api.c (ffi_java_translate_args): Cast raw arg to
++	ffi_raw*.
++	* include/ffi.h.in: Add pragma for SGI compiler.
++
++2011-02-09  Anthony Green  <green@moxielogic.com>
++
++	* configure.ac: Add powerpc64-*-darwin* support.
++
++2011-02-09  Anthony Green <green@moxielogic.com>
++
++	* README: Mention Interix.
++
++2011-02-09  Jonathan Callen  <abcd@gentoo.org>
++
++	* configure.ac: Add Interix to win32/cygwin/mingw case.
++	* configure: Ditto.
++	* src/closures.c: Treat Interix like Cygwin, instead of as a
++	generic win32.
++
++2011-02-09  Anthony Green <green@moxielogic.com>
++
++	* testsuite/libffi.call/err_bad_typedef.c: Remove xfail.
++	* testsuite/libffi.call/err_bad_abi.c: Remove xfail.
++	* src/x86/ffi64.c (UNLIKELY, LIKELY): Define.
++	(ffi_prep_closure_loc): Check for bad ABI.
++	* src/prep_cif.c (UNLIKELY, LIKELY): Define.
++	(initialize_aggregate): Check for bad types.
++
++2011-02-09  Landon Fuller <landonf@plausible.coop>
++
++	* Makefile.am (EXTRA_DIST): Add build-ios.sh, src/arm/gentramp.sh,
++	src/arm/trampoline.S.
++	(nodist_libffi_la_SOURCES): Add src/arc/trampoline.S.
++	* configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Define.
++	* src/arm/ffi.c (ffi_trampoline_table)
++	(ffi_closure_trampoline_table_page, ffi_trampoline_table_entry)
++	(FFI_TRAMPOLINE_CODELOC_CONFIG, FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET)
++	(FFI_TRAMPOLINE_COUNT, ffi_trampoline_lock, ffi_trampoline_tables)
++	(ffi_trampoline_table_alloc, ffi_closure_alloc, ffi_closure_free):
++	Define for FFI_EXEC_TRAMPOLINE_TABLE case (iOS).
++	(ffi_prep_closure_loc): Handl FFI_EXEC_TRAMPOLINE_TABLE case
++	separately.
++	* src/arm/sysv.S: Handle Apple iOS host.
++	* src/closures.c: Handle FFI_EXEC_TRAMPOLINE_TABLE case.
++	* build-ios.sh: New file.
++	* fficonfig.h.in, configure, Makefile.in: Rebuilt.
++	* README: Mention ARM iOS.
++
++2011-02-08  Oren Held  <orenhe@il.ibm.com>
++
++	* src/dlmalloc.c (_STRUCT_MALLINFO): Define in order to avoid
++	redefinition of mallinfo on HP-UX.
++
++2011-02-08  Ginn Chen  <ginn.chen@oracle.com>
++
++	* src/sparc/ffi.c (ffi_call): Make compatible with Solaris Studio
++	aggregate return ABI.  Flush cache.
++	(ffi_prep_closure_loc): Flush cache.
++
++2011-02-11  Anthony Green  <green@moxielogic.com>
++
++	From Tom Honermann <tom.honermann@oracle.com>:
++	* src/powerpc/aix.S (ffi_call_AIX): Support for xlc toolchain on
++	AIX.  Declare .ffi_prep_args.  Insert nops after branch
++	instructions so that the AIX linker can insert TOC reload
++	instructions.
++	* src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN.
++
++2011-02-08  Ed  <ed@kdtc.net>
++
++	* src/powerpc/asm.h: Fix grammar nit in comment.
++
++2011-02-08  Uli Link  <ul.mcamafia@linkitup.de>
++
++	* include/ffi.h.in (FFI_64_BIT_MAX): Define and use.
++
++2011-02-09  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	PR libffi/46661
++	* testsuite/libffi.call/cls_pointer.c (main): Cast void * to
++	uintptr_t first.
++	* testsuite/libffi.call/cls_pointer_stack.c (main): Likewise.
++
++2011-02-08  Rafael Avila de Espindola  <respindola@mozilla.com>
++
++	* configure.ac: Fix x86 test for pc related relocs.
++	* configure: Rebuilt.
++
++2011-02-07  Joel Sherrill <joel.sherrill@oarcorp.com>
++
++	* libffi/src/m68k/ffi.c: Add RTEMS support for cache flushing.
++	Handle case when CPU variant does not have long double support.
++	* libffi/src/m68k/sysv.S: Add support for mc68000, Coldfire,
++	and cores with soft floating point.
++
++2011-02-07  Joel Sherrill <joel.sherrill@oarcorp.com>
++
++	* configure.ac: Add mips*-*-rtems* support.
++	* configure: Regenerate.
++	* src/mips/ffitarget.h: Ensure needed constants are available
++	for targets which do not have sgidefs.h.
++
++2011-01-26  Dave Korn  <dave.korn.cygwin@gmail.com>
++
++	PR target/40125
++	* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
++	* configure: Regenerate.
++
++2010-12-18  Iain Sandoe  <iains@gcc.gnu.org>
++
++	PR libffi/29152
++	PR libffi/42378
++	* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
++	update comments.
++	* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
++	(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
++	* src/powerpc/darwin.S: Provide Darwin64 implementation,
++	update comments.
++	* src/powerpc/ffi_darwin.c: Likewise.
++
++2010-12-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
++	backslashes.
++	(libffi_cv_as_string_pseudo_op): Likewise.
++	* configure: Regenerate.
++
++2010-12-03  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
++	(ffi_closure_VFP): Same.
++	(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
++	directive.
++
++2010-12-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
++	(PRIuPTR): Define.
++
++2010-11-29  Richard Henderson  <rth@redhat.com>
++	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
++	(.eh_frame): Use FDE_ENCODING.
++	(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
++
++2010-11-22  Jacek Caban <jacek@codeweavers.com>
++
++	* configure.ac: Check for symbol underscores on mingw-w64.
++	* configure: Rebuilt.
++	* src/x86/win64.S: Correctly access extern symbols in respect to
++	underscores.
++
++2010-11-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* testsuite/lib/libffi-dg.exp: Rename ...
++	* testsuite/lib/libffi.exp: ... to this.
++	* libffi/testsuite/libffi.call/call.exp: Don't load libffi-dg.exp.
++	* libffi/testsuite/libffi.special/special.exp: Likewise.
++
++2010-10-28  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* src/arm/ffi.c (ffi_prep_args): Add VFP register argument handling
++	code, new parameter, and return value. Update comments.
++	(ffi_prep_cif_machdep): Add case for VFP struct return values. Add
++	call to layout_vfp_args().
++	(ffi_call_SYSV): Update declaration.
++	(ffi_call_VFP): New declaration.
++	(ffi_call): Add VFP struct return conditions. Call ffi_call_VFP()
++	when ABI is FFI_VFP.
++	(ffi_closure_VFP): New declaration.
++	(ffi_closure_SYSV_inner): Add new vfp_args parameter, update call to
++	ffi_prep_incoming_args_SYSV().
++	(ffi_prep_incoming_args_SYSV): Update parameters. Add VFP argument
++	case handling.
++	(ffi_prep_closure_loc): Pass ffi_closure_VFP to trampoline
++	construction under VFP hard-float.
++	(rec_vfp_type_p): New function.
++	(vfp_type_p): Same.
++	(place_vfp_arg): Same.
++	(layout_vfp_args): Same.
++	* src/arm/ffitarget.h (ffi_abi): Add FFI_VFP. Define FFI_DEFAULT_ABI
++	based on __ARM_PCS_VFP.
++	(FFI_EXTRA_CIF_FIELDS): Define for adding VFP hard-float specific
++	fields.
++	(FFI_TYPE_STRUCT_VFP_FLOAT): Define internally used type code.
++	(FFI_TYPE_STRUCT_VFP_DOUBLE): Same.
++	* src/arm/sysv.S (ffi_call_SYSV): Change call of ffi_prep_args() to
++	direct call. Move function pointer load upwards.
++	(ffi_call_VFP): New function.
++	(ffi_closure_VFP): Same.
++
++	* testsuite/lib/libffi-dg.exp (check-flags): New function.
++	(dg-skip-if): New function.
++	* testsuite/libffi.call/cls_double_va.c: Skip if target is arm*-*-*
++	and compiler options include -mfloat-abi=hard.
++	* testsuite/libffi.call/cls_longdouble_va.c: Same.
++
++2010-10-01  Jakub Jelinek  <jakub@redhat.com>
++
++	PR libffi/45677
++	* src/x86/ffi64.c (ffi_prep_cif_machdep): Ensure cif->bytes is
++	a multiple of 8.
++	* testsuite/libffi.call/many2.c: New test.
++
++2010-08-20  Mark Wielaard  <mjw@redhat.com>
++
++	* src/closures.c (open_temp_exec_file_mnt): Check if getmntent_r
++	returns NULL.
++
++2010-08-09  Andreas Tobler  <andreast@fgznet.ch>
++
++	* configure.ac: Add target powerpc64-*-freebsd*.
++	* configure: Regenerate.
++	* testsuite/libffi.call/cls_align_longdouble_split.c: Pass
++	-mlong-double-128 only to linux targets.
++	* testsuite/libffi.call/cls_align_longdouble_split2.c: Likewise.
++	* testsuite/libffi.call/cls_longdouble.c: Likewise.
++	* testsuite/libffi.call/huge_struct.c: Likewise.
++
++2010-08-05  Dan Witte  <dwitte@mozilla.com>
++
++        * Makefile.am: Pass FFI_DEBUG define to msvcc.sh for linking to the
++        debug CRT when --enable-debug is given.
++        * configure.ac: Define it.
++        * msvcc.sh: Translate -g and -DFFI_DEBUG appropriately.
++
++2010-08-04  Dan Witte  <dwitte@mozilla.com>
++
++	* src/x86/ffitarget.h: Add X86_ANY define for all x86/x86_64
++	platforms.
++	* src/x86/ffi.c: Remove redundant ifdef checks.
++	* src/prep_cif.c: Push stack space computation into src/x86/ffi.c
++	for X86_ANY so return value space doesn't get added twice.
++
++2010-08-03  Neil Rashbrooke <neil@parkwaycc.co.uk>
++
++	* msvcc.sh: Don't pass -safeseh to ml64 because behavior is buggy.
++
++2010-07-22  Dan Witte  <dwitte@mozilla.com>
++
++	* src/*/ffitarget.h: Make FFI_LAST_ABI one past the last valid ABI.
++	* src/prep_cif.c: Fix ABI assertion.
++        * src/cris/ffi.c: Ditto.
++
++2010-07-10  Evan Phoenix  <evan@fallingsnow.net>
++
++	* src/closures.c (selinux_enabled_check): Fix strncmp usage bug.
++
++2010-07-07  Dan Horák <dan@danny.cz>
++
++	* include/ffi.h.in: Protect #define with #ifndef.
++	* src/powerpc/ffitarget.h: Ditto.
++	* src/s390/ffitarget.h: Ditto.
++	* src/sparc/ffitarget.h: Ditto.
++
++2010-07-07   Neil Roberts <neil@linux.intel.com>
++
++	* src/x86/sysv.S (ffi_call_SYSV): Align the stack pointer to
++	16-bytes.
++
++2010-07-02  Jakub Jelinek  <jakub@redhat.com>
++
++	* Makefile.am (AM_MAKEFLAGS): Pass also mandir to submakes.
++	* Makefile.in: Regenerated.
++
++2010-05-19  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* configure.ac (libffi_cv_as_x86_pcrel): Check for illegal in as
++	output, too.
++	(libffi_cv_as_ascii_pseudo_op): Check for .ascii.
++	(libffi_cv_as_string_pseudo_op): Check for .string.
++	* configure: Regenerate.
++	* fficonfig.h.in: Regenerate.
++	* src/x86/sysv.S (.eh_frame): Use .ascii, .string or error.
++
++2010-05-11  Dan Witte  <dwitte@mozilla.com>
++
++	* doc/libffi.tex: Document previous change.
++
++2010-05-11  Makoto Kato <m_kato@ga2.so-net.ne.jp>
++
++	* src/x86/ffi.c (ffi_call): Don't copy structs passed by value.
++
++2010-05-05  Michael Kohler <michaelkohler@live.com>
++
++	* src/dlmalloc.c (dlfree): Fix spelling.
++	* src/ia64/ffi.c (ffi_prep_cif_machdep): Ditto.
++	* configure.ac: Ditto.
++	* configure: Rebuilt.
++
++2010-04-13  Dan Witte  <dwitte@mozilla.com>
++
++	* msvcc.sh: Build with -W3 instead of -Wall.
++	* src/powerpc/ffi_darwin.c: Remove build warnings.
++	* src/x86/ffi.c: Ditto.
++	* src/x86/ffitarget.h: Ditto.
++
++2010-04-12  Dan Witte  <dwitte@mozilla.com>
++	    Walter Meinl <wuno@lsvw.de>
++
++	* configure.ac: Add OS/2 support.
++	* configure: Rebuilt.
++	* src/closures.c: Ditto.
++	* src/dlmalloc.c: Ditto.
++	* src/x86/win32.S: Ditto.
++
++2010-04-07  Jakub Jelinek  <jakub@redhat.com>
++
++	* testsuite/libffi.call/err_bad_abi.c: Remove unused args variable.
++
++2010-04-02  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* Makefile.in: Regenerate.
++	* aclocal.m4: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* man/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2010-03-30  Dan Witte  <dwitte@mozilla.com>
++
++	* msvcc.sh: Disable build warnings.
++	* README (tested): Clarify windows build procedure.
++
++2010-03-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* configure.ac (libffi_cv_as_x86_64_unwind_section_type): New test.
++	* configure: Regenerate.
++	* fficonfig.h.in: Regenerate.
++	* libffi/src/x86/unix64.S (.eh_frame)
++	[HAVE_AS_X86_64_UNWIND_SECTION_TYPE]: Use @unwind section type.
++
++2010-03-14  Matthias Klose  <doko@ubuntu.com>
++
++	* src/x86/ffi64.c: Fix typo in comment.
++	* src/x86/ffi.c: Use /* ... */ comment style.
++
++2010-02-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* doc/libffi.texi (The Closure API): Fix typo.
++	* doc/libffi.info: Remove.
++
++2010-02-15  Matthias Klose  <doko@ubuntu.com>
++
++	* src/arm/sysv.S (__ARM_ARCH__): Define for processor
++	__ARM_ARCH_7EM__.
++
++2010-01-15  Anthony Green  <green@redhat.com>
++
++	* README: Add notes on building with Microsoft Visual C++.
++
++2010-01-15  Daniel Witte  <dwitte@mozilla.com>
++
++	* msvcc.sh: New file.
++
++	* src/x86/win32.S: Port assembly routines to MSVC and #ifdef.
++	* src/x86/ffi.c: Tweak function declaration and remove excess
++	parens.
++	* include/ffi.h.in: Add __declspec(align(8)) to typedef struct
++	ffi_closure.
++
++	* src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new
++	function ffi_call_win32 on X86_WIN32.
++	* src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32.
++	(ffi_call_STDCALL): Remove.
++
++	* src/prep_cif.c (ffi_prep_cif): Move stack space allocation code
++	to ffi_prep_cif_machdep for x86.
++	* src/x86/ffi.c (ffi_prep_cif_machdep): To here.
++
++2010-01-15  Oliver Kiddle  <okiddle@yahoo.co.uk>
++
++	* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
++	Sun Studio compiler compatibility.
++
++2010-01-12  Conrad Irwin <conrad.irwin@gmail.com>
++
++	* doc/libffi.texi: Add closure example.
++
++2010-01-07  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	PR libffi/40701
++	* testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL,
++	PRIuLL, PRId64, PRIu64, PRIuPTR): Define.
++	* testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on
++	alpha*-dec-osf*.
++	* testsuite/libffi.call/cls_align_uint64.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/return_ll1.c: Likewise.
++	* testsuite/libffi.call/stret_medium2.c: Likewise.
++	* testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast
++	MAP_FAILED to char *.
++
++2010-01-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	* src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__.
++
++2009-12-31  Anthony Green  <green@redhat.com>
++
++	* README: Update for libffi 3.0.9.
++
++2009-12-27  Matthias Klose  <doko@ubuntu.com>
++
++	* configure.ac (HAVE_LONG_DOUBLE): Define for mips when
++	appropriate.
++	* configure: Rebuilt.
++
++2009-12-26  Anthony Green  <green@redhat.com>
++
++	* testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for
++	avr32*-*-*.
++	* testsuite/libffi.call/cls_double_va.c: Ditto.
++
++2009-12-26  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* testsuite/libffi.call/ffitest.h: Conditionally include stdint.h
++	and inttypes.h.
++	* testsuite/libffi.special/unwindtest.cc: Ditto.
++
++2009-12-26  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* configure.ac: Add amd64-*-openbsd*.
++	* configure: Rebuilt.
++	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Link
++	openbsd programs with -lpthread.
++
++2009-12-26  Anthony Green  <green@redhat.com>
++
++	* testsuite/libffi.call/cls_double_va.c,
++	testsuite/libffi.call/cls_longdouble.c,
++	testsuite/libffi.call/cls_longdouble_va.c,
++	testsuite/libffi.call/cls_pointer.c,
++	testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for
++	mips*-*-* and arm*-*-*.
++	* testsuite/libffi.call/cls_align_longdouble_split.c,
++	testsuite/libffi.call/cls_align_longdouble_split2.c,
++	testsuite/libffi.call/stret_medium2.c,
++	testsuite/libffi.call/stret_medium.c,
++	testsuite/libffi.call/stret_large.c,
++	testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*.
++
++2009-12-31  Kay Tietz  <ktietz70@googlemail.com>
++
++	* testsuite/libffi.call/ffitest.h,
++	testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix
++	definitions.
++
++2009-12-31  Carlo Bramini  <carlo.bramix@libero.it>
++
++	* configure.ac (AM_LTLDFLAGS): Define for windows hosts.
++	* Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS.
++	* configure: Rebuilt.
++	* Makefile.in: Rebuilt.
++
++2009-12-31  Anthony Green  <green@redhat.com>
++	    Blake Chaffin.
++
++	* testsuite/libffi.call/huge_struct.c: New test case from Blake
++	Chaffin @ Apple.
++
++2009-12-28  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to
++	local variables.
++	(aix_adjust_aggregate_sizes): New function.
++	(ffi_prep_cif_machdep): Call it.
++
++2009-12-26  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* configure.ac: Define FFI_MMAP_EXEC_WRIT for the given targets.
++	* configure: Regenerate.
++	* fficonfig.h.in: Likewise.
++	* src/closures.c: Remove the FFI_MMAP_EXEC_WRIT definition for
++	Solaris/x86.
++
++2009-12-26  Andreas Schwab  <schwab@linux-m68k.org>
++
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count
++	when a float arguments is passed in memory.
++	(ffi_closure_helper_SYSV): Mark general registers as used up when
++	a 64bit or soft-float long double argument is passed in memory.
++
++2009-12-25  Matthias Klose  <doko@ubuntu.com>
++
++	* man/ffi_call.3: Fix #include in examples.
++	* doc/libffi.texi: Add dircategory.
++
++2009-12-25  Frank Everdij <f.p.x.everdij@tudelft.nl>
++
++	* include/ffi.h.in: Placed '__GNUC__' ifdef around
++	'__attribute__((aligned(8)))' in ffi_closure, fixes compile for
++	IRIX MIPSPro c99.
++	* include/ffi_common.h: Added '__sgi' define to non
++	'__attribute__((__mode__()))' integer typedefs.
++	* src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32,
++	ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check.
++	(ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added
++	FFI_LONGDOUBLE support and alignment(N32 only).
++	* src/mips/ffitarget.h: Corrected '#include <sgidefs.h>' for IRIX and
++	fixed non '__attribute__((__mode__()))' integer typedefs.
++	* src/mips/n32.S: Put '#ifdef linux' around '.abicalls' and '.eh_frame'
++	since they are Linux/GNU Assembler specific.
++
++2009-12-25  Bradley Smith  <brad@brad-smith.co.uk>
++
++	* configure.ac, Makefile.am, src/avr32/ffi.c,
++	src/avr32/ffitarget.h,
++	src/avr32/sysv.S: Add AVR32 port.
++	* configure, Makefile.in: Rebuilt.
++
++2009-12-21  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* configure.ac: Make i?86 build on FreeBSD and OpenBSD.
++	* configure: Regenerate.
++
++2009-12-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* testsuite/libffi.call/ffitest.h: Define PRIuPTR on PA HP-UX.
++
++2009-12-13  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE
++	type on HP-UX.
++
++2012-02-13  Kai Tietz  <ktietz@redhat.com>
++
++	PR libffi/52221
++	* src/x86/ffi.c (ffi_prep_raw_closure_loc): Add thiscall
++	support for X86_WIN32.
++	(FFI_INIT_TRAMPOLINE_THISCALL): Fix displacement.
++
++2009-12-11  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long
++	double' arguments.
++
++2009-12-11  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10.
++
++2009-12-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
++
++	PR libffi/40700
++	* src/closures.c [X86_64 && __sun__ && __svr4__]
++	(FFI_MMAP_EXEC_WRIT): Define.
++
++2009-12-08  David Daney  <ddaney@caviumnetworks.com>
++
++	* testsuite/libffi.call/stret_medium.c: Remove xfail for mips*-*-*
++	* testsuite/libffi.call/cls_align_longdouble_split2.c: Same.
++	* testsuite/libffi.call/stret_large.c: Same.
++	* testsuite/libffi.call/cls_align_longdouble_split.c: Same.
++	* testsuite/libffi.call/stret_large2.c: Same.
++	* testsuite/libffi.call/stret_medium2.c: Same.
++
++2009-12-07  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/aix_closure.S (libffi_closure_ASM): Fix tablejump
++	typo.
++
++2009-12-05  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/aix.S: Update AIX32 code to be consistent with AIX64
++	code.
++	* src/powerpc/aix_closure.S: Same.
++
++2009-12-05  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* Makefile.in: Regenerate.
++	* configure: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* man/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2009-12-04  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/aix_closure.S: Reorganize 64-bit code to match
++	linux64_closure.S.
++
++2009-12-04  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR libffi/41908
++	* src/x86/ffi64.c (classify_argument): Update from
++	gcc/config/i386/i386.c.
++	(ffi_closure_unix64_inner): Do not use the address of two consecutive
++	SSE registers directly.
++	* testsuite/libffi.call/cls_dbls_struct.c (main): Remove xfail
++	for x86_64 linux targets.
++
++2009-12-04  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/ffi_darwin.c (ffi_closure_helper_DARWIN): Increment
++	pfr for long double split between fpr13 and stack.
++
++2009-12-03  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Increment next_arg and
++	fparg_count twice for long double.
++
++2009-12-03  David Edelsohn  <edelsohn@gnu.org>
++
++	PR libffi/42243
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Remove extra parentheses.
++
++2009-12-03  Uros Bizjak  <ubizjak@gmail.com>
++
++	* testsuite/libffi.call/cls_longdouble_va.c (main): Fix format string.
++	Remove xfails for x86 linux targets.
++
++2009-12-02  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Fix typo in INT64
++	case.
++
++2009-12-01  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/aix.S (ffi_call_AIX): Convert to more standard
++	register usage.  Call ffi_prep_args directly.  Add long double
++	return value support.
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Double arg increment
++	applies to FFI_TYPE_DOUBLE.  Correct fpr_base increment typo.
++	Separate FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases.
++	(ffi_prep_cif_machdep): Only 16 byte stack alignment in 64 bit
++	mode.
++	(ffi_closure_helper_DARWIN): Remove nf and ng counters.  Move temp
++	into case.
++	* src/powerpc/aix_closure.S: Maintain 16 byte stack alignment.
++	Allocate result area between params and FPRs.
++
++2009-11-30  David Edelsohn  <edelsohn@gnu.org>
++
++	PR target/35484
++	* src/powerpc/ffitarget.h (POWERPC64): Define for PPC64 Linux and
++	AIX64.
++	* src/powerpc/aix.S: Implement AIX64 version.
++	* src/powerpc/aix_closure.S: Implement AIX64 version.
++	(ffi_closure_ASM): Use extsb, lha and displament addresses.
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Implement AIX64
++	support.
++	(ffi_prep_cif_machdep): Same.
++	(ffi_call): Same.
++	(ffi_closure_helper_DARWIN): Same.
++
++2009-11-02  Andreas Tobler  <a.tobler@schweiz.org>
++
++	PR libffi/41908
++	* testsuite/libffi.call/testclosure.c: New test.
++
++2009-09-28  Kai Tietz  <kai.tietz@onevision.com>
++
++	* src/x86/win64.S (_ffi_call_win64 stack): Remove for gnu
++	assembly version use of ___chkstk.
++
++2009-09-23  Matthias Klose  <doko@ubuntu.com>
++
++	PR libffi/40242, PR libffi/41443
++	* src/arm/sysv.S (__ARM_ARCH__): Define for processors
++	__ARM_ARCH_6T2__, __ARM_ARCH_6M__, __ARM_ARCH_7__,
++	__ARM_ARCH_7A__, __ARM_ARCH_7R__, __ARM_ARCH_7M__.
++	Change the conditionals to __SOFTFP__ || __ARM_EABI__
++	for -mfloat-abi=softfp to work.
++
++2009-09-17  Loren J. Rittle  <ljrittle@acm.org>
++
++	PR testsuite/32843 (strikes again)
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Add X86_FREEBSD to
++	enable proper extension on char and short.
++
++2009-09-15  David Daney  <ddaney@caviumnetworks.com>
++
++	* src/java_raw_api.c (ffi_java_raw_to_rvalue): Remove special
++	handling for FFI_TYPE_POINTER.
++	* src/mips/ffitarget.h (FFI_TYPE_STRUCT_D_SOFT,
++	FFI_TYPE_STRUCT_F_SOFT, FFI_TYPE_STRUCT_DD_SOFT,
++	FFI_TYPE_STRUCT_FF_SOFT, FFI_TYPE_STRUCT_FD_SOFT,
++	FFI_TYPE_STRUCT_DF_SOFT, FFI_TYPE_STRUCT_SOFT): New defines.
++	(FFI_N32_SOFT_FLOAT, FFI_N64_SOFT_FLOAT): New ffi_abi enumerations.
++	(enum ffi_abi): Set FFI_DEFAULT_ABI for soft-float.
++	* src/mips/n32.S (ffi_call_N32): Add handling for soft-float
++	structure and pointer returns.
++	(ffi_closure_N32): Add handling for pointer returns.
++	* src/mips/ffi.c (ffi_prep_args, calc_n32_struct_flags,
++	calc_n32_return_struct_flags): Handle soft-float.
++	(ffi_prep_cif_machdep):  Handle soft-float, fix pointer handling.
++	(ffi_call_N32): Declare proper argument types.
++	(ffi_call, copy_struct_N32, ffi_closure_mips_inner_N32): Handle
++	soft-float.
++
++2009-08-24  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* configure.ac (AC_PREREQ): Bump to 2.64.
++
++2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* Makefile.am (install-html, install-pdf): Remove.
++	* Makefile.in: Regenerate.
++
++	* Makefile.in: Regenerate.
++	* aclocal.m4: Regenerate.
++	* configure: Regenerate.
++	* fficonfig.h.in: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* man/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2011-08-22  Jasper Lievisse Adriaanse <jasper@openbsd.org>
++
++	* configure.ac: Add OpenBSD/hppa and OpenBSD/powerpc support.
++	* configure: Rebuilt.
++
++2009-07-30  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force.
++
++2009-07-24  Dave Korn  <dave.korn.cygwin@gmail.com>
++
++	PR libffi/40807
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Also use sign/zero-extending
++	return types for X86_WIN32.
++	* src/x86/win32.S (_ffi_call_SYSV): Handle omitted return types.
++	(_ffi_call_STDCALL, _ffi_closure_SYSV, _ffi_closure_raw_SYSV,
++	_ffi_closure_STDCALL): Likewise.
++
++	* src/closures.c (is_selinux_enabled): Define to const 0 for Cygwin.
++	(dlmmap, dlmunmap): Also use these functions on Cygwin.
++
++2009-07-11  Richard Sandiford  <rdsandiford@googlemail.com>
++
++	PR testsuite/40699
++	PR testsuite/40707
++	PR testsuite/40709
++	* testsuite/lib/libffi-dg.exp: Revert 2009-07-02, 2009-07-01 and
++	2009-06-30 commits.
++
++2009-07-01  Richard Sandiford  <r.sandiford@uk.ibm.com>
++
++	* testsuite/lib/libffi-dg.exp (libffi-init): Set ld_library_path
++	to "" before adding paths.  (This reinstates an assignment that
++	was removed by my 2009-06-30 commit, but changes the initial
++	value from "." to "".)
++
++2009-07-01  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR testsuite/40601
++	* testsuite/lib/libffi-dg.exp (libffi-init): Properly set
++	gccdir.  Adjust ld_library_path for gcc only if gccdir isn't
++	empty.
++
++2009-06-30  Richard Sandiford  <r.sandiford@uk.ibm.com>
++
++	* testsuite/lib/libffi-dg.exp (libffi-init): Don't add "."
++	to ld_library_path.  Use add_path.  Add just find_libgcc_s
++	to ld_library_path, not every libgcc multilib directory.
++
++2009-06-16  Wim Lewis  <wiml@hhhh.org>
++
++	* src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are
++	supposed to be callee-saved.
++	* src/powerpc/sysv.S (small_struct_return_value): Fix overrun of
++	return buffer for odd-size structs.
++
++2009-06-16  Andreas Tobler  <a.tobler@schweiz.org>
++
++	PR libffi/40444
++	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Add
++	allow_stack_execute for Darwin.
++
++2009-06-16  Andrew Haley  <aph@redhat.com>
++
++	* configure.ac (TARGETDIR): Add missing blank lines.
++	* configure: Regenerate.
++
++2009-06-16  Andrew Haley  <aph@redhat.com>
++
++	* testsuite/libffi.call/cls_align_sint64.c,
++	testsuite/libffi.call/cls_align_uint64.c,
++	testsuite/libffi.call/cls_longdouble_va.c,
++	testsuite/libffi.call/cls_ulonglong.c,
++	testsuite/libffi.call/return_ll1.c,
++	testsuite/libffi.call/stret_medium2.c: Fix printf format
++	specifiers.
++	* testsuite/libffi.call/ffitest.h,
++	testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define.
++
++2009-06-15  Andrew Haley  <aph@redhat.com>
++
++	* testsuite/libffi.call/err_bad_typedef.c: xfail everywhere.
++	* testsuite/libffi.call/err_bad_abi.c: Likewise.
++
++2009-06-12  Andrew Haley  <aph@redhat.com>
++
++	* Makefile.am: Remove info_TEXINFOS.
++
++2009-06-12  Andrew Haley  <aph@redhat.com>
++
++	* ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c,
++	testsuite/libffi.call/cls_align_uint64.c,
++	testsuite/libffi.call/cls_ulonglong.c,
++	testsuite/libffi.call/return_ll1.c,
++	testsuite/libffi.call/stret_medium2.c: Fix printf format
++	specifiers.
++	testsuite/libffi.special/unwindtest.cc: include stdint.h.
++
++2009-06-11  Timothy Wall  <twall@users.sf.net>
++
++	* Makefile.am,
++	configure.ac,
++	include/ffi.h.in,
++	include/ffi_common.h,
++	src/closures.c,
++	src/dlmalloc.c,
++	src/x86/ffi.c,
++	src/x86/ffitarget.h,
++	src/x86/win64.S (new),
++	README: Added win64 support (mingw or MSVC)
++	* Makefile.in,
++	include/Makefile.in,
++	man/Makefile.in,
++	testsuite/Makefile.in,
++	configure,
++	aclocal.m4: Regenerated
++	* ltcf-c.sh: properly escape cygwin/w32 path
++	* man/ffi_call.3: Clarify size requirements for return value.
++	* src/x86/ffi64.c: Fix filename in comment.
++	* src/x86/win32.S: Remove unused extern.
++
++	* testsuite/libffi.call/closure_fn0.c,
++	testsuite/libffi.call/closure_fn1.c,
++	testsuite/libffi.call/closure_fn2.c,
++	testsuite/libffi.call/closure_fn3.c,
++	testsuite/libffi.call/closure_fn4.c,
++	testsuite/libffi.call/closure_fn5.c,
++	testsuite/libffi.call/closure_fn6.c,
++	testsuite/libffi.call/closure_stdcall.c,
++	testsuite/libffi.call/cls_12byte.c,
++	testsuite/libffi.call/cls_16byte.c,
++	testsuite/libffi.call/cls_18byte.c,
++	testsuite/libffi.call/cls_19byte.c,
++	testsuite/libffi.call/cls_1_1byte.c,
++	testsuite/libffi.call/cls_20byte.c,
++	testsuite/libffi.call/cls_20byte1.c,
++	testsuite/libffi.call/cls_24byte.c,
++	testsuite/libffi.call/cls_2byte.c,
++	testsuite/libffi.call/cls_3_1byte.c,
++	testsuite/libffi.call/cls_3byte1.c,
++ 	testsuite/libffi.call/cls_3byte2.c,
++ 	testsuite/libffi.call/cls_4_1byte.c,
++ 	testsuite/libffi.call/cls_4byte.c,
++ 	testsuite/libffi.call/cls_5_1_byte.c,
++ 	testsuite/libffi.call/cls_5byte.c,
++ 	testsuite/libffi.call/cls_64byte.c,
++ 	testsuite/libffi.call/cls_6_1_byte.c,
++ 	testsuite/libffi.call/cls_6byte.c,
++ 	testsuite/libffi.call/cls_7_1_byte.c,
++ 	testsuite/libffi.call/cls_7byte.c,
++ 	testsuite/libffi.call/cls_8byte.c,
++ 	testsuite/libffi.call/cls_9byte1.c,
++ 	testsuite/libffi.call/cls_9byte2.c,
++ 	testsuite/libffi.call/cls_align_double.c,
++ 	testsuite/libffi.call/cls_align_float.c,
++ 	testsuite/libffi.call/cls_align_longdouble.c,
++ 	testsuite/libffi.call/cls_align_longdouble_split.c,
++ 	testsuite/libffi.call/cls_align_longdouble_split2.c,
++ 	testsuite/libffi.call/cls_align_pointer.c,
++ 	testsuite/libffi.call/cls_align_sint16.c,
++ 	testsuite/libffi.call/cls_align_sint32.c,
++ 	testsuite/libffi.call/cls_align_sint64.c,
++ 	testsuite/libffi.call/cls_align_uint16.c,
++ 	testsuite/libffi.call/cls_align_uint32.c,
++ 	testsuite/libffi.call/cls_align_uint64.c,
++ 	testsuite/libffi.call/cls_dbls_struct.c,
++ 	testsuite/libffi.call/cls_double.c,
++ 	testsuite/libffi.call/cls_double_va.c,
++ 	testsuite/libffi.call/cls_float.c,
++ 	testsuite/libffi.call/cls_longdouble.c,
++ 	testsuite/libffi.call/cls_longdouble_va.c,
++ 	testsuite/libffi.call/cls_multi_schar.c,
++ 	testsuite/libffi.call/cls_multi_sshort.c,
++ 	testsuite/libffi.call/cls_multi_sshortchar.c,
++ 	testsuite/libffi.call/cls_multi_uchar.c,
++ 	testsuite/libffi.call/cls_multi_ushort.c,
++ 	testsuite/libffi.call/cls_multi_ushortchar.c,
++ 	testsuite/libffi.call/cls_pointer.c,
++ 	testsuite/libffi.call/cls_pointer_stack.c,
++ 	testsuite/libffi.call/cls_schar.c,
++ 	testsuite/libffi.call/cls_sint.c,
++ 	testsuite/libffi.call/cls_sshort.c,
++ 	testsuite/libffi.call/cls_uchar.c,
++ 	testsuite/libffi.call/cls_uint.c,
++ 	testsuite/libffi.call/cls_ulonglong.c,
++ 	testsuite/libffi.call/cls_ushort.c,
++ 	testsuite/libffi.call/err_bad_abi.c,
++ 	testsuite/libffi.call/err_bad_typedef.c,
++ 	testsuite/libffi.call/float2.c,
++ 	testsuite/libffi.call/huge_struct.c,
++ 	testsuite/libffi.call/nested_struct.c,
++ 	testsuite/libffi.call/nested_struct1.c,
++ 	testsuite/libffi.call/nested_struct10.c,
++ 	testsuite/libffi.call/nested_struct2.c,
++ 	testsuite/libffi.call/nested_struct3.c,
++ 	testsuite/libffi.call/nested_struct4.c,
++ 	testsuite/libffi.call/nested_struct5.c,
++ 	testsuite/libffi.call/nested_struct6.c,
++ 	testsuite/libffi.call/nested_struct7.c,
++ 	testsuite/libffi.call/nested_struct8.c,
++ 	testsuite/libffi.call/nested_struct9.c,
++ 	testsuite/libffi.call/problem1.c,
++ 	testsuite/libffi.call/return_ldl.c,
++ 	testsuite/libffi.call/return_ll1.c,
++ 	testsuite/libffi.call/stret_large.c,
++ 	testsuite/libffi.call/stret_large2.c,
++ 	testsuite/libffi.call/stret_medium.c,
++ 	testsuite/libffi.call/stret_medium2.c,
++	testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead
++	of checking for MMAP.  Use intptr_t instead of long casts.
++
++2009-06-11  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*.
++	* testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*.
++	* testsuite/libffi.call/err_bad_typedef.c: Likewise.
++
++2009-06-09  Andrew Haley  <aph@redhat.com>
++
++	* src/x86/freebsd.S: Add missing file.
++
++2009-06-08  Andrew Haley  <aph@redhat.com>
++
++	Import from libffi 3.0.8:
++
++	* doc/libffi.texi: New file.
++	* doc/libffi.info: Likewise.
++	* doc/stamp-vti: Likewise.
++	* man/Makefile.am: New file.
++	* man/ffi_call.3: New file.
++
++	* Makefile.am (EXTRA_DIST): Add src/x86/darwin64.S,
++	src/dlmalloc.c.
++	(nodist_libffi_la_SOURCES): Add X86_FREEBSD.
++
++	* configure.ac: Bump version to 3.0.8.
++	parisc*-*-linux*: Add.
++	i386-*-freebsd* | i386-*-openbsd*: Add.
++	powerpc-*-beos*: Add.
++	AM_CONDITIONAL X86_FREEBSD: Add.
++	AC_CONFIG_FILES: Add man/Makefile.
++
++	* include/ffi.h.in (FFI_FN): Change void (*)() to void (*)(void).
++
++2009-06-08  Andrew Haley  <aph@redhat.com>
++
++	* README: Import from libffi 3.0.8.
++
++2009-06-08  Andrew Haley  <aph@redhat.com>
++
++	* testsuite/libffi.call/err_bad_abi.c: Add xfails.
++	* testsuite/libffi.call/cls_longdouble_va.c: Add xfails.
++	* testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*.
++	* testsuite/libffi.call/err_bad_typedef.c: Add xfails.
++
++	* testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args.
++	* testsuite/libffi.call/stret_medium.c: Likewise.
++	* testsuite/libffi.call/stret_large2.c: Likewise.
++	* testsuite/libffi.call/stret_large.c:  Likewise.
++
++2008-12-26  Timothy Wall  <twall@users.sf.net>
++
++	* testsuite/libffi.call/cls_longdouble.c,
++	testsuite/libffi.call/cls_longdouble_va.c,
++	testsuite/libffi.call/cls_align_longdouble.c,
++	testsuite/libffi.call/cls_align_longdouble_split.c,
++	testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected
++	failures on x86_64 cygwin/mingw.
++
++2008-12-22  Timothy Wall  <twall@users.sf.net>
++
++	* testsuite/libffi.call/closure_fn0.c,
++	testsuite/libffi.call/closure_fn1.c,
++	testsuite/libffi.call/closure_fn2.c,
++	testsuite/libffi.call/closure_fn3.c,
++	testsuite/libffi.call/closure_fn4.c,
++	testsuite/libffi.call/closure_fn5.c,
++	testsuite/libffi.call/closure_fn6.c,
++	testsuite/libffi.call/closure_loc_fn0.c,
++	testsuite/libffi.call/closure_stdcall.c,
++	testsuite/libffi.call/cls_align_pointer.c,
++	testsuite/libffi.call/cls_pointer.c,
++	testsuite/libffi.call/cls_pointer_stack.c: use portable cast from
++	pointer to integer (intptr_t).
++	* testsuite/libffi.call/cls_longdouble.c: disable for win64.
++
++2008-07-24  Anthony Green  <green@redhat.com>
++
++	* testsuite/libffi.call/cls_dbls_struct.c,
++	testsuite/libffi.call/cls_double_va.c,
++	testsuite/libffi.call/cls_longdouble.c,
++	testsuite/libffi.call/cls_longdouble_va.c,
++	testsuite/libffi.call/cls_pointer.c,
++	testsuite/libffi.call/cls_pointer_stack.c,
++	testsuite/libffi.call/err_bad_abi.c: Clean up failures from
++	compiler warnings.
++
++2008-03-04  Anthony Green  <green@redhat.com>
++	    Blake Chaffin
++	    hos@tamanegi.org
++
++	* testsuite/libffi.call/cls_align_longdouble_split2.c
++	  testsuite/libffi.call/cls_align_longdouble_split.c
++	  testsuite/libffi.call/cls_dbls_struct.c
++	  testsuite/libffi.call/cls_double_va.c
++	  testsuite/libffi.call/cls_longdouble.c
++	  testsuite/libffi.call/cls_longdouble_va.c
++	  testsuite/libffi.call/cls_pointer.c
++	  testsuite/libffi.call/cls_pointer_stack.c
++	  testsuite/libffi.call/err_bad_abi.c
++	  testsuite/libffi.call/err_bad_typedef.c
++	  testsuite/libffi.call/stret_large2.c
++	  testsuite/libffi.call/stret_large.c
++	  testsuite/libffi.call/stret_medium2.c
++	  testsuite/libffi.call/stret_medium.c: New tests from Apple.
++
++2009-06-05  Andrew Haley  <aph@redhat.com>
++
++	* src/x86/ffitarget.h, src/x86/ffi.c: Merge stdcall changes from
++	libffi.
++
++2009-06-04  Andrew Haley  <aph@redhat.com>
++
++	* src/x86/ffitarget.h, src/x86/win32.S, src/x86/ffi.c: Back out
++	stdcall changes.
++
++2008-02-26  Anthony Green  <green@redhat.com>
++	    Thomas Heller  <theller@ctypes.org>
++
++	* src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C
++	comment.
++
++2008-02-03  Timothy Wall  <twall@users.sf.net>
++
++	* src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return
++	  offset based on code pointer, not data pointer.
++
++2008-01-31  Timothy Wall <twall@users.sf.net>
++
++	* testsuite/libffi.call/closure_stdcall.c: Add test for stdcall
++	closures.
++	* src/x86/ffitarget.h: Increase size of trampoline for stdcall
++	closures.
++	* src/x86/win32.S: Add assembly for stdcall closure.
++	* src/x86/ffi.c: Initialize stdcall closure trampoline.
++
++2009-06-04  Andrew Haley  <aph@redhat.com>
++
++	* include/ffi.h.in: Change void (*)() to void (*)(void).
++	* src/x86/ffi.c: Likewise.
++
++2009-06-04  Andrew Haley  <aph@redhat.com>
++
++	* src/powerpc/ppc_closure.S: Insert licence header.
++	* src/powerpc/linux64_closure.S: Likewise.
++	* src/m68k/sysv.S: Likewise.
++
++	* src/sh64/ffi.c: Change void (*)() to void (*)(void).
++	* src/powerpc/ffi.c: Likewise.
++	* src/powerpc/ffi_darwin.c: Likewise.
++	* src/m32r/ffi.c: Likewise.
++	* src/sh64/ffi.c: Likewise.
++	* src/x86/ffi64.c: Likewise.
++	* src/alpha/ffi.c: Likewise.
++	* src/alpha/osf.S: Likewise.
++	* src/frv/ffi.c: Likewise.
++	* src/s390/ffi.c: Likewise.
++	* src/pa/ffi.c: Likewise.
++	* src/pa/hpux32.S: Likewise.
++	* src/ia64/unix.S: Likewise.
++	* src/ia64/ffi.c: Likewise.
++	* src/sparc/ffi.c: Likewise.
++	* src/mips/ffi.c: Likewise.
++	* src/sh/ffi.c: Likewise.
++
++2008-02-15  David Daney  <ddaney@avtrex.com>
++
++	* src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE):
++	Define (conditionally), and use it to include cachectl.h.
++	(ffi_prep_closure_loc): Fix cache flushing.
++	* src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define.
++
++2009-06-04  Andrew Haley  <aph@redhat.com>
++
++	include/ffi.h.in,
++	src/arm/ffitarget.h,
++	src/arm/ffi.c,
++	src/arm/sysv.S,
++	src/powerpc/ffitarget.h,
++	src/closures.c,
++	src/sh64/ffitarget.h,
++	src/sh64/ffi.c,
++	src/sh64/sysv.S,
++	src/types.c,
++	src/x86/ffi64.c,
++	src/x86/ffitarget.h,
++	src/x86/win32.S,
++	src/x86/darwin.S,
++	src/x86/ffi.c,
++	src/x86/sysv.S,
++	src/x86/unix64.S,
++	src/alpha/ffitarget.h,
++	src/alpha/ffi.c,
++	src/alpha/osf.S,
++	src/m68k/ffitarget.h,
++	src/frv/ffitarget.h,
++	src/frv/ffi.c,
++	src/s390/ffitarget.h,
++	src/s390/sysv.S,
++	src/cris/ffitarget.h,
++	src/pa/linux.S,
++	src/pa/ffitarget.h,
++	src/pa/ffi.c,
++	src/raw_api.c,
++	src/ia64/ffitarget.h,
++	src/ia64/unix.S,
++	src/ia64/ffi.c,
++	src/ia64/ia64_flags.h,
++	src/java_raw_api.c,
++	src/debug.c,
++	src/sparc/v9.S,
++	src/sparc/ffitarget.h,
++	src/sparc/ffi.c,
++	src/sparc/v8.S,
++	src/mips/ffitarget.h,
++	src/mips/n32.S,
++	src/mips/o32.S,
++	src/mips/ffi.c,
++	src/prep_cif.c,
++	src/sh/ffitarget.h,
++	src/sh/ffi.c,
++	src/sh/sysv.S: Update license text.
++
++2009-05-22  Dave Korn  <dave.korn.cygwin@gmail.com>
++
++	* src/x86/win32.S (_ffi_closure_STDCALL):  New function.
++	(.eh_frame):  Add FDE for it.
++
++2009-05-22  Dave Korn  <dave.korn.cygwin@gmail.com>
++
++	* configure.ac:  Also check if assembler supports pc-relative
++	relocs on X86_WIN32 targets.
++	* configure:  Regenerate.
++	* src/x86/win32.S (ffi_prep_args):  Declare extern, not global.
++	(_ffi_call_SYSV):  Add missing function type symbol .def and
++	add EH markup labels.
++	(_ffi_call_STDCALL):  Likewise.
++	(_ffi_closure_SYSV):  Likewise.
++	(_ffi_closure_raw_SYSV):  Likewise.
++	(.eh_frame):  Add hand-crafted EH data.
++
++2009-04-09  Jakub Jelinek  <jakub@redhat.com>
++
++	* testsuite/lib/libffi-dg.exp: Change copyright header to refer to
++	version 3 of the GNU General Public License and to point readers
++	at the COPYING3 file and the FSF's license web page.
++	* testsuite/libffi.call/call.exp: Likewise.
++	* testsuite/libffi.special/special.exp: Likewise.
++
++2009-03-01  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* configure: Regenerate.
++
++2008-12-18  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	PR libffi/26048
++	* configure.ac (HAVE_AS_X86_PCREL): New test.
++	* configure: Regenerate.
++	* fficonfig.h.in: Regenerate.
++	* src/x86/sysv.S [!FFI_NO_RAW_API]: Precalculate
++	RAW_CLOSURE_CIF_OFFSET, RAW_CLOSURE_FUN_OFFSET,
++	RAW_CLOSURE_USER_DATA_OFFSET for the Solaris 10/x86 assembler.
++	(.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL.
++	* src/x86/unix64.S (.Lstore_table): Move to .text section.
++	(.Lload_table): Likewise.
++	(.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL.
++
++2008-12-18  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* configure: Regenerate.
++
++2008-11-21  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for
++	signed/unsigned int8/16 return values.
++	* src/sparc/v8.S (ffi_call_v8): Likewise.
++	(ffi_closure_v8): Likewise.
++
++2008-09-26  Peter O'Gorman  <pogma@thewrittenword.com>
++	    Steve Ellcey  <sje@cup.hp.com>
++
++	* configure: Regenerate for new libtool.
++	* Makefile.in: Ditto.
++	* include/Makefile.in: Ditto.
++	* aclocal.m4: Ditto.
++
++2008-08-25  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and
++	FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum.
++	Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT.
++	Adjust copyright notice.
++	* src/powerpc/ffi.c: Add two new flags to indicate if we have one
++	register or two register to use for FFI_SYSV structs.
++	(ffi_prep_cif_machdep): Pass the right register flag introduced above.
++	(ffi_closure_helper_SYSV): Fix the return type for
++	FFI_SYSV_TYPE_SMALL_STRUCT. Comment.
++	Adjust copyright notice.
++
++2008-07-16  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned
++	int.
++
++2008-06-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* configure: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2008-06-07  Joseph Myers  <joseph@codesourcery.com>
++
++	* configure.ac (parisc*-*-linux*, powerpc-*-sysv*,
++	powerpc-*-beos*): Remove.
++	* configure: Regenerate.
++
++2008-05-09  Julian Brown  <julian@codesourcery.com>
++
++	* Makefile.am (LTLDFLAGS): New.
++	(libffi_la_LDFLAGS): Use above.
++	* Makefile.in: Regenerate.
++
++2008-04-18  Paolo Bonzini  <bonzini@gnu.org>
++
++	PR bootstrap/35457
++	* aclocal.m4: Regenerate.
++	* configure: Regenerate.
++
++2008-03-26  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/sysv.S: Add .note.GNU-stack on Linux.
++	* src/sh64/sysv.S: Likewise.
++
++2008-03-26  Daniel Jacobowitz  <dan@debian.org>
++
++	* src/arm/sysv.S: Fix ARM comment marker.
++
++2008-03-26  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/alpha/osf.S: Add .note.GNU-stack on Linux.
++	* src/s390/sysv.S: Likewise.
++	* src/powerpc/ppc_closure.S: Likewise.
++	* src/powerpc/sysv.S: Likewise.
++	* src/x86/unix64.S: Likewise.
++	* src/x86/sysv.S: Likewise.
++	* src/sparc/v8.S: Likewise.
++	* src/sparc/v9.S: Likewise.
++	* src/m68k/sysv.S: Likewise.
++	* src/arm/sysv.S: Likewise.
++
++2008-03-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	* aclocal.m4: Regenerate.
++	* configure: Likewise.
++	* Makefile.in: Likewise.
++	* include/Makefile.in: Likewise.
++	* testsuite/Makefile.in: Likewise.
++
++2008-02-12  Bjoern Koenig  <bkoenig@alpha-tierchen.de>
++	    Andreas Tobler  <a.tobler@schweiz.org>
++
++	* configure.ac: Add amd64-*-freebsd* target.
++	* configure: Regenerate.
++
++2008-01-30  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR libffi/34612
++	* src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when
++	returning struct.
++
++	* testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer"
++	tests.
++
++2008-01-24  David Edelsohn  <edelsohn@gnu.org>
++
++	* configure: Regenerate.
++
++2008-01-06  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Fix thinko.
++
++2008-01-05  Andreas Tobler  <a.tobler@schweiz.org>
++
++	PR testsuite/32843
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Add code for
++	signed/unsigned int8/16 for X86_DARWIN.
++	Updated copyright info.
++	Handle one and two byte structs with special cif->flags.
++	* src/x86/ffitarget.h: Add special types for one and two byte structs.
++	Updated copyright info.
++	* src/x86/darwin.S (ffi_call_SYSV): Rewrite to use a jump table like
++	sysv.S
++	Remove code to pop args from the stack after call.
++	Special-case signed/unsigned for int8/16, one and two byte structs.
++	(ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8,
++	FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32,
++	FFI_TYPE_SINT32.
++	Updated copyright info.
++
++2007-12-08  David Daney  <ddaney@avtrex.com>
++
++	* src/mips/n32.S (ffi_call_N32):  Replace dadd with ADDU, dsub with
++	SUBU, add with ADDU and use smaller code sequences.
++
++2007-12-07  David Daney  <ddaney@avtrex.com>
++
++	* src/mips/ffi.c (ffi_prep_cif_machdep): Handle long double return
++	type.
++
++2007-12-06  David Daney  <ddaney@avtrex.com>
++
++	* include/ffi.h.in (FFI_SIZEOF_JAVA_RAW): Define if not	already
++	defined.
++	(ffi_java_raw): New typedef.
++	(ffi_java_raw_call, ffi_java_ptrarray_to_raw,
++	ffi_java_raw_to_ptrarray): Change parameter types from ffi_raw to
++	ffi_java_raw.
++	(ffi_java_raw_closure) : Same.
++	(ffi_prep_java_raw_closure, ffi_prep_java_raw_closure_loc): Change
++	parameter types.
++	* src/java_raw_api.c (ffi_java_raw_size):  Replace FFI_SIZEOF_ARG with
++	FFI_SIZEOF_JAVA_RAW.
++	(ffi_java_raw_to_ptrarray): Change type of raw to ffi_java_raw.
++	Replace FFI_SIZEOF_ARG with FFI_SIZEOF_JAVA_RAW. Use
++	sizeof(ffi_java_raw) for alignment calculations.
++	(ffi_java_ptrarray_to_raw): Same.
++	(ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER
++	if FFI_SIZEOF_JAVA_RAW == 4.
++	(ffi_java_raw_to_rvalue): Same.
++	(ffi_java_raw_call): Change type of raw to ffi_java_raw.
++	(ffi_java_translate_args): Same.
++	(ffi_prep_java_raw_closure_loc, ffi_prep_java_raw_closure): Change
++	parameter types.
++	* src/mips/ffitarget.h (FFI_SIZEOF_JAVA_RAW): Define for N32 ABI.
++
++2007-12-06  David Daney  <ddaney@avtrex.com>
++
++	* src/mips/n32.S (ffi_closure_N32): Use 64-bit add instruction on
++	pointer values.
++
++2007-12-01  Andreas Tobler  <a.tobler@schweiz.org>
++
++	PR libffi/31937
++	* src/powerpc/ffitarget.h: Introduce new ABI FFI_LINUX_SOFT_FLOAT.
++	Add local FFI_TYPE_UINT128 to handle soft-float long-double-128.
++	* src/powerpc/ffi.c: Distinguish between __NO_FPRS__ and not and
++	set the NUM_FPR_ARG_REGISTERS according to.
++	Add support for potential soft-float support under hard-float
++	architecture.
++	(ffi_prep_args_SYSV): Set NUM_FPR_ARG_REGISTERS to 0 in case of
++	FFI_LINUX_SOFT_FLOAT, handle float, doubles and long-doubles according
++	to the FFI_LINUX_SOFT_FLOAT ABI.
++	(ffi_prep_cif_machdep): Likewise.
++	(ffi_closure_helper_SYSV): Likewise.
++	* src/powerpc/ppc_closure.S: Make sure not to store float/double
++	on archs where __NO_FPRS__ is true.
++	Add FFI_TYPE_UINT128 support.
++	* src/powerpc/sysv.S: Add support for soft-float long-double-128.
++	Adjust copyright notice.
++
++2007-11-25  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* src/closures.c: Move defintion of MAYBE_UNUSED from here to ...
++	* include/ffi_common.h: ... here.
++	Update copyright.
++
++2007-11-17  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* src/powerpc/sysv.S: Load correct cr to compare if we have long double.
++	* src/powerpc/linux64.S: Likewise.
++	* src/powerpc/ffi.c: Add a comment to show which part goes into cr6.
++	* testsuite/libffi.call/return_ldl.c: New test.
++
++2007-09-04    <aph@redhat.com>
++
++	* src/arm/sysv.S (UNWIND): New.
++	(Whole file): Conditionally compile unwinder directives.
++	* src/arm/sysv.S: Add unwinder directives.
++
++	* src/arm/ffi.c (ffi_prep_args): Align structs by at least 4 bytes.
++	Only treat r0 as a struct address if we're actually returning a
++	struct by address.
++	Only copy the bytes that are actually within a struct.
++	(ffi_prep_cif_machdep): A Composite Type not larger than 4 bytes
++	is returned in r0, not passed by address.
++	(ffi_call): Allocate a word-sized temporary for the case where
++	a composite is returned in r0.
++	(ffi_prep_incoming_args_SYSV): Align as necessary.
++
++2007-08-05  Steven Newbury  <s_j_newbury@yahoo.co.uk>
++
++	* src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Use __clear_cache instead of
++	directly using the sys_cacheflush syscall.
++
++2007-07-27  Andrew Haley  <aph@redhat.com>
++
++	* src/arm/sysv.S (ffi_closure_SYSV): Add soft-float.
++
++2007-09-03  Maciej W. Rozycki  <macro@linux-mips.org>
++
++	* Makefile.am: Unify MIPS_IRIX and MIPS_LINUX into MIPS.
++	* configure.ac: Likewise.
++	* Makefile.in: Regenerate.
++	* include/Makefile.in: Likewise.
++	* testsuite/Makefile.in: Likewise.
++	* configure: Likewise.
++
++2007-08-24  David Daney  <ddaney@avtrex.com>
++
++	* testsuite/libffi.call/return_sl.c: New test.
++
++2007-08-10  David Daney  <ddaney@avtrex.com>
++
++	* testsuite/libffi.call/cls_multi_ushort.c,
++	testsuite/libffi.call/cls_align_uint16.c,
++	testsuite/libffi.call/nested_struct1.c,
++	testsuite/libffi.call/nested_struct3.c,
++	testsuite/libffi.call/cls_7_1_byte.c,
++	testsuite/libffi.call/nested_struct5.c,
++	testsuite/libffi.call/cls_double.c,
++	testsuite/libffi.call/nested_struct7.c,
++	testsuite/libffi.call/cls_sint.c,
++	testsuite/libffi.call/nested_struct9.c,
++	testsuite/libffi.call/cls_20byte1.c,
++	testsuite/libffi.call/cls_multi_sshortchar.c,
++	testsuite/libffi.call/cls_align_sint64.c,
++	testsuite/libffi.call/cls_3byte2.c,
++	testsuite/libffi.call/cls_multi_schar.c,
++	testsuite/libffi.call/cls_multi_uchar.c,
++	testsuite/libffi.call/cls_19byte.c,
++	testsuite/libffi.call/cls_9byte1.c,
++	testsuite/libffi.call/cls_align_float.c,
++	testsuite/libffi.call/closure_fn1.c,
++	testsuite/libffi.call/problem1.c,
++	testsuite/libffi.call/closure_fn3.c,
++	testsuite/libffi.call/cls_sshort.c,
++	testsuite/libffi.call/closure_fn5.c,
++	testsuite/libffi.call/cls_align_double.c,
++	testsuite/libffi.call/nested_struct.c,
++	testsuite/libffi.call/cls_2byte.c,
++	testsuite/libffi.call/nested_struct10.c,
++	testsuite/libffi.call/cls_4byte.c,
++	testsuite/libffi.call/cls_6byte.c,
++	testsuite/libffi.call/cls_8byte.c,
++	testsuite/libffi.call/cls_multi_sshort.c,
++	testsuite/libffi.call/cls_align_sint16.c,
++	testsuite/libffi.call/cls_align_uint32.c,
++	testsuite/libffi.call/cls_20byte.c,
++	testsuite/libffi.call/cls_float.c,
++	testsuite/libffi.call/nested_struct2.c,
++	testsuite/libffi.call/cls_5_1_byte.c,
++	testsuite/libffi.call/nested_struct4.c,
++	testsuite/libffi.call/cls_24byte.c,
++	testsuite/libffi.call/nested_struct6.c,
++	testsuite/libffi.call/cls_64byte.c,
++	testsuite/libffi.call/nested_struct8.c,
++	testsuite/libffi.call/cls_uint.c,
++	testsuite/libffi.call/cls_multi_ushortchar.c,
++	testsuite/libffi.call/cls_schar.c,
++	testsuite/libffi.call/cls_uchar.c,
++	testsuite/libffi.call/cls_align_uint64.c,
++	testsuite/libffi.call/cls_ulonglong.c,
++	testsuite/libffi.call/cls_align_longdouble.c,
++	testsuite/libffi.call/cls_1_1byte.c,
++	testsuite/libffi.call/cls_12byte.c,
++	testsuite/libffi.call/cls_3_1byte.c,
++	testsuite/libffi.call/cls_3byte1.c,
++	testsuite/libffi.call/cls_4_1byte.c,
++	testsuite/libffi.call/cls_6_1_byte.c,
++	testsuite/libffi.call/cls_16byte.c,
++	testsuite/libffi.call/cls_18byte.c,
++	testsuite/libffi.call/closure_fn0.c,
++	testsuite/libffi.call/cls_9byte2.c,
++	testsuite/libffi.call/closure_fn2.c,
++	testsuite/libffi.call/closure_fn4.c,
++	testsuite/libffi.call/cls_ushort.c,
++	testsuite/libffi.call/closure_fn6.c,
++	testsuite/libffi.call/cls_5byte.c,
++	testsuite/libffi.call/cls_align_pointer.c,
++	testsuite/libffi.call/cls_7byte.c,
++	testsuite/libffi.call/cls_align_sint32.c,
++	testsuite/libffi.special/unwindtest_ffi_call.cc,
++	testsuite/libffi.special/unwindtest.cc: Remove xfail for mips64*-*-*.
++
++2007-08-10  David Daney  <ddaney@avtrex.com>
++
++	PR libffi/28313
++	* configure.ac: Don't treat mips64 as a special case.
++	* Makefile.am (nodist_libffi_la_SOURCES): Add n32.S.
++	* configure: Regenerate
++	* Makefile.in: Ditto.
++	* fficonfig.h.in: Ditto.
++	* src/mips/ffitarget.h (REG_L, REG_S, SUBU, ADDU, SRL, LI): Indent.
++	(LA, EH_FRAME_ALIGN, FDE_ADDR_BYTES): New preprocessor macros.
++	(FFI_DEFAULT_ABI): Set for n64 case.
++	(FFI_CLOSURES, FFI_TRAMPOLINE_SIZE): Define for n32 and n64 cases.
++	* src/mips/n32.S (ffi_call_N32): Add debug macros and labels for FDE.
++	(ffi_closure_N32): New function.
++	(.eh_frame): New section
++	* src/mips/o32.S: Clean up comments.
++	(ffi_closure_O32): Pass ffi_closure parameter in $12.
++	* src/mips/ffi.c: Use FFI_MIPS_N32 instead of
++	_MIPS_SIM == _ABIN32 throughout.
++	(FFI_MIPS_STOP_HERE): New, use in place of
++	ffi_stop_here.
++	(ffi_prep_args): Use unsigned long to hold pointer values.  Rewrite
++	to support n32/n64 ABIs.
++	(calc_n32_struct_flags): Rewrite.
++	(calc_n32_return_struct_flags): Remove unused variable.  Reverse
++	position of flag bits.
++	(ffi_prep_cif_machdep): Rewrite n32 portion.
++	(ffi_call): Enable for n64.  Add special handling for small structure
++	return values.
++	(ffi_prep_closure_loc): Add n32 and n64 support.
++	(ffi_closure_mips_inner_O32): Add cast to silence warning.
++	(copy_struct_N32, ffi_closure_mips_inner_N32): New functions.
++
++2007-08-08  David Daney  <ddaney@avtrex.com>
++
++	* testsuite/libffi.call/ffitest.h (ffi_type_mylong): Remove definition.
++	* testsuite/libffi.call/cls_align_uint16.c (main): Use correct type
++	specifiers.
++	* testsuite/libffi.call/nested_struct1.c (main): Ditto.
++	* testsuite/libffi.call/cls_sint.c (main): Ditto.
++	* testsuite/libffi.call/nested_struct9.c (main): Ditto.
++	* testsuite/libffi.call/cls_20byte1.c (main): Ditto.
++	* testsuite/libffi.call/cls_9byte1.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn1.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn3.c (main): Ditto.
++	* testsuite/libffi.call/return_dbl2.c (main): Ditto.
++	* testsuite/libffi.call/cls_sshort.c (main): Ditto.
++	* testsuite/libffi.call/return_fl3.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn5.c (main): Ditto.
++	* testsuite/libffi.call/nested_struct.c (main): Ditto.
++	* testsuite/libffi.call/nested_struct10.c (main): Ditto.
++	* testsuite/libffi.call/return_ll1.c (main): Ditto.
++	* testsuite/libffi.call/cls_8byte.c (main): Ditto.
++	* testsuite/libffi.call/cls_align_uint32.c (main): Ditto.
++	* testsuite/libffi.call/cls_align_sint16.c (main): Ditto.
++	* testsuite/libffi.call/cls_20byte.c (main): Ditto.
++	* testsuite/libffi.call/nested_struct2.c (main): Ditto.
++	* testsuite/libffi.call/cls_24byte.c (main): Ditto.
++	* testsuite/libffi.call/nested_struct6.c (main): Ditto.
++	* testsuite/libffi.call/cls_uint.c (main): Ditto.
++	* testsuite/libffi.call/cls_12byte.c (main): Ditto.
++	* testsuite/libffi.call/cls_16byte.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn0.c (main): Ditto.
++	* testsuite/libffi.call/cls_9byte2.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn2.c (main): Ditto.
++	* testsuite/libffi.call/return_dbl1.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn4.c (main): Ditto.
++	* testsuite/libffi.call/closure_fn6.c (main): Ditto.
++	* testsuite/libffi.call/cls_align_sint32.c (main): Ditto.
++
++2007-08-07  Andrew Haley  <aph@redhat.com>
++
++	* src/x86/sysv.S (ffi_closure_raw_SYSV): Fix typo in previous
++	checkin.
++
++2007-08-06  Andrew Haley  <aph@redhat.com>
++
++	PR testsuite/32843
++	* src/x86/sysv.S (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8,
++	FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32,
++	FFI_TYPE_SINT32.
++
++2007-08-02  David Daney  <ddaney@avtrex.com>
++
++	* testsuite/libffi.call/return_ul.c (main): Define return type as
++	ffi_arg.  Use proper printf conversion specifier.
++
++2007-07-30  Andrew Haley  <aph@redhat.com>
++
++	PR testsuite/32843
++	* src/x86/ffi.c (ffi_prep_cif_machdep): in x86 case, add code for
++	signed/unsigned int8/16.
++	* src/x86/sysv.S (ffi_call_SYSV): Rewrite to:
++	Use a jump table.
++	Remove code to pop args from the stack after call.
++	Special-case signed/unsigned int8/16.
++	* testsuite/libffi.call/return_sc.c (main): Revert.
++
++2007-07-26  Richard Guenther  <rguenther@suse.de>
++
++	PR testsuite/32843
++	* testsuite/libffi.call/return_sc.c (main): Verify call
++	result as signed char, not ffi_arg.
++
++2007-07-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* configure.ac (i?86-*-solaris2.1[0-9]): Set TARGET to X86_64.
++	* configure: Regenerate.
++
++2007-07-11  David Daney  <ddaney@avtrex.com>
++
++	* src/mips/ffi.c: Don't include sys/cachectl.h.
++	(ffi_prep_closure_loc): Use __builtin___clear_cache() instead of
++	cacheflush().
++
++2007-05-18  Aurelien Jarno  <aurelien@aurel32.net>
++
++	* src/arm/ffi.c (ffi_prep_closure_loc): Renamed and ajusted
++	from (ffi_prep_closure): ... this.
++	(FFI_INIT_TRAMPOLINE): Adjust.
++
++2005-12-31  Phil Blundell  <pb@reciva.com>
++
++	* src/arm/ffi.c (ffi_prep_incoming_args_SYSV,
++	ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support.
++	* src/arm/sysv.S(ffi_closure_SYSV): Likewise.
++	* src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise.
++	(FFI_CLOSURES): Enable closure support.
++
++2007-07-03  Andrew Haley  <aph@hedges.billgatliff.com>
++
++	* testsuite/libffi.call/cls_multi_ushort.c,
++	testsuite/libffi.call/cls_align_uint16.c,
++	testsuite/libffi.call/nested_struct1.c,
++	testsuite/libffi.call/nested_struct3.c,
++	testsuite/libffi.call/cls_7_1_byte.c,
++	testsuite/libffi.call/cls_double.c,
++	testsuite/libffi.call/nested_struct5.c,
++	testsuite/libffi.call/nested_struct7.c,
++	testsuite/libffi.call/cls_sint.c,
++	testsuite/libffi.call/nested_struct9.c,
++	testsuite/libffi.call/cls_20byte1.c,
++	testsuite/libffi.call/cls_multi_sshortchar.c,
++	testsuite/libffi.call/cls_align_sint64.c,
++	testsuite/libffi.call/cls_3byte2.c,
++	testsuite/libffi.call/cls_multi_schar.c,
++	testsuite/libffi.call/cls_multi_uchar.c,
++	testsuite/libffi.call/cls_19byte.c,
++	testsuite/libffi.call/cls_9byte1.c,
++	testsuite/libffi.call/cls_align_float.c,
++	testsuite/libffi.call/closure_fn1.c,
++	testsuite/libffi.call/problem1.c,
++	testsuite/libffi.call/closure_fn3.c,
++	testsuite/libffi.call/cls_sshort.c,
++	testsuite/libffi.call/closure_fn5.c,
++	testsuite/libffi.call/cls_align_double.c,
++	testsuite/libffi.call/cls_2byte.c,
++	testsuite/libffi.call/nested_struct.c,
++	testsuite/libffi.call/nested_struct10.c,
++	testsuite/libffi.call/cls_4byte.c,
++	testsuite/libffi.call/cls_6byte.c,
++	testsuite/libffi.call/cls_8byte.c,
++	testsuite/libffi.call/cls_multi_sshort.c,
++	testsuite/libffi.call/cls_align_uint32.c,
++	testsuite/libffi.call/cls_align_sint16.c,
++	testsuite/libffi.call/cls_float.c,
++	testsuite/libffi.call/cls_20byte.c,
++	testsuite/libffi.call/cls_5_1_byte.c,
++	testsuite/libffi.call/nested_struct2.c,
++	testsuite/libffi.call/cls_24byte.c,
++	testsuite/libffi.call/nested_struct4.c,
++	testsuite/libffi.call/nested_struct6.c,
++	testsuite/libffi.call/cls_64byte.c,
++	testsuite/libffi.call/nested_struct8.c,
++	testsuite/libffi.call/cls_uint.c,
++	testsuite/libffi.call/cls_multi_ushortchar.c,
++	testsuite/libffi.call/cls_schar.c,
++	testsuite/libffi.call/cls_uchar.c,
++	testsuite/libffi.call/cls_align_uint64.c,
++	testsuite/libffi.call/cls_ulonglong.c,
++	testsuite/libffi.call/cls_align_longdouble.c,
++	testsuite/libffi.call/cls_1_1byte.c,
++	testsuite/libffi.call/cls_12byte.c,
++	testsuite/libffi.call/cls_3_1byte.c,
++	testsuite/libffi.call/cls_3byte1.c,
++	testsuite/libffi.call/cls_4_1byte.c,
++	testsuite/libffi.call/cls_6_1_byte.c,
++	testsuite/libffi.call/cls_16byte.c,
++	testsuite/libffi.call/cls_18byte.c,
++	testsuite/libffi.call/closure_fn0.c,
++	testsuite/libffi.call/cls_9byte2.c,
++	testsuite/libffi.call/closure_fn2.c,
++	testsuite/libffi.call/closure_fn4.c,
++	testsuite/libffi.call/cls_ushort.c,
++	testsuite/libffi.call/closure_fn6.c,
++	testsuite/libffi.call/cls_5byte.c,
++	testsuite/libffi.call/cls_align_pointer.c,
++	testsuite/libffi.call/cls_7byte.c,
++	testsuite/libffi.call/cls_align_sint32.c,
++	testsuite/libffi.special/unwindtest_ffi_call.cc,
++	testsuite/libffi.special/unwindtest.cc: Enable for ARM.
++
++2007-07-05  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* aclocal.m4: Regenerated.
++
++2007-06-02  Paolo Bonzini  <bonzini@gnu.org>
++
++	* configure: Regenerate.
++
++2007-05-23  Steve Ellcey  <sje@cup.hp.com>
++
++	* Makefile.in: Regenerate.
++	* configure: Regenerate.
++	* aclocal.m4: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2007-05-10  Roman Zippel <zippel@linux-m68k.org>
++
++	* src/m68k/ffi.c (ffi_prep_incoming_args_SYSV,
++	ffi_closure_SYSV_inner,ffi_prep_closure): New, add closure support.
++	* src/m68k/sysv.S(ffi_closure_SYSV,ffi_closure_struct_SYSV): Likewise.
++	* src/m68k/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise.
++	(FFI_CLOSURES): Enable closure support.
++
++2007-05-10  Roman Zippel <zippel@linux-m68k.org>
++
++	* configure.ac (HAVE_AS_CFI_PSEUDO_OP): New test.
++	* configure: Regenerate.
++	* fficonfig.h.in: Regenerate.
++	* src/m68k/sysv.S (CFI_STARTPROC,CFI_ENDPROC,
++	CFI_OFFSET,CFI_DEF_CFA): New macros.
++	(ffi_call_SYSV): Add callframe annotation.
++
++2007-05-10  Roman Zippel <zippel@linux-m68k.org>
++
++	* src/m68k/ffi.c (ffi_prep_args,ffi_prep_cif_machdep): Fix
++	numerous test suite failures.
++	* src/m68k/sysv.S (ffi_call_SYSV): Likewise.
++
++2007-04-11  Paolo Bonzini  <bonzini@gnu.org>
++
++	* Makefile.am (EXTRA_DIST): Bring up to date.
++	* Makefile.in: Regenerate.
++	* src/frv/eabi.S: Remove RCS keyword.
++
++2007-04-06  Richard Henderson  <rth@redhat.com>
++
++	* configure.ac: Tidy target case.
++	(HAVE_LONG_DOUBLE): Allow the target to override.
++	* configure: Regenerate.
++	* include/ffi.h.in: Don't define ffi_type_foo if
++	LIBFFI_HIDE_BASIC_TYPES is defined.
++	(ffi_type_longdouble): If not HAVE_LONG_DOUBLE, define
++	to ffi_type_double.
++	* types.c (LIBFFI_HIDE_BASIC_TYPES): Define.
++	(FFI_TYPEDEF, ffi_type_void): Mark the data const.
++	(ffi_type_longdouble): Special case for Alpha.  Don't define
++	if long double == double.
++
++	* src/alpha/ffi.c (FFI_TYPE_LONGDOUBLE): Assert unique value.
++	(ffi_prep_cif_machdep): Handle it as the 128-bit type.
++	(ffi_call, ffi_closure_osf_inner): Likewise.
++	(ffi_closure_osf_inner): Likewise.  Mark hidden.
++	(ffi_call_osf, ffi_closure_osf): Mark hidden.
++	* src/alpha/ffitarget.h (FFI_LAST_ABI): Tidy definition.
++	* src/alpha/osf.S (ffi_call_osf, ffi_closure_osf): Mark hidden.
++	(load_table): Handle 128-bit long double.
++
++	* testsuite/libffi.call/float4.c: Add -mieee for alpha.
++
++2007-04-06  Tom Tromey  <tromey@redhat.com>
++
++	PR libffi/31491:
++	* README: Fixed bug in example.
++
++2007-04-03  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/closures.c: Include sys/statfs.h.
++	(_GNU_SOURCE): Define on Linux.
++	(FFI_MMAP_EXEC_SELINUX): Define.
++	(selinux_enabled): New variable.
++	(selinux_enabled_check): New function.
++	(is_selinux_enabled): Define.
++	(dlmmap): Use it.
++
++2007-03-24  Uros Bizjak  <ubizjak@gmail.com>
++
++	* testsuite/libffi.call/return_fl2.c (return_fl): Mark as static.
++	Use 'volatile float sum' to create sum of floats to avoid false
++	negative due to excess precision on ix86 targets.
++	(main): Ditto.
++
++2007-03-08  Alexandre Oliva  <aoliva@redhat.com>
++
++	* src/powerpc/ffi.c (flush_icache): Fix left-over from previous
++	patch.
++	(ffi_prep_closure_loc): Remove unneeded casts.  Add needed ones.
++
++2007-03-07  Alexandre Oliva  <aoliva@redhat.com>
++
++	* include/ffi.h.in (ffi_closure_alloc, ffi_closure_free): New.
++	(ffi_prep_closure_loc): New.
++	(ffi_prep_raw_closure_loc): New.
++	(ffi_prep_java_raw_closure_loc): New.
++	* src/closures.c: New file.
++	* src/dlmalloc.c [FFI_MMAP_EXEC_WRIT] (struct malloc_segment):
++	Replace sflags with exec_offset.
++	[FFI_MMAP_EXEC_WRIT] (mmap_exec_offset, add_segment_exec_offset,
++	sub_segment_exec_offset): New macros.
++	(get_segment_flags, set_segment_flags, check_segment_merge): New
++	macros.
++	(is_mmapped_segment, is_extern_segment): Use get_segment_flags.
++	(add_segment, sys_alloc, create_mspace, create_mspace_with_base,
++	destroy_mspace): Use new macros.
++	(sys_alloc): Silence warning.
++	* Makefile.am (libffi_la_SOURCES): Add src/closures.c.
++	* Makefile.in: Rebuilt.
++	* src/prep_cif [FFI_CLOSURES] (ffi_prep_closure): Implement in
++	terms of ffi_prep_closure_loc.
++	* src/raw_api.c (ffi_prep_raw_closure_loc): Renamed and adjusted
++	from...
++	(ffi_prep_raw_closure): ... this.  Re-implement in terms of the
++	renamed version.
++	* src/java_raw_api (ffi_prep_java_raw_closure_loc): Renamed and
++	adjusted from...
++	(ffi_prep_java_raw_closure): ... this.  Re-implement in terms of
++	the renamed version.
++	* src/alpha/ffi.c (ffi_prep_closure_loc): Renamed from
++	(ffi_prep_closure): ... this.
++	* src/pa/ffi.c: Likewise.
++	* src/cris/ffi.c: Likewise.  Adjust.
++	* src/frv/ffi.c: Likewise.
++	* src/ia64/ffi.c: Likewise.
++	* src/mips/ffi.c: Likewise.
++	* src/powerpc/ffi_darwin.c: Likewise.
++	* src/s390/ffi.c: Likewise.
++	* src/sh/ffi.c: Likewise.
++	* src/sh64/ffi.c: Likewise.
++	* src/sparc/ffi.c: Likewise.
++	* src/x86/ffi64.c: Likewise.
++	* src/x86/ffi.c: Likewise.
++	(FFI_INIT_TRAMPOLINE): Adjust.
++	(ffi_prep_raw_closure_loc): Renamed and adjusted from...
++	(ffi_prep_raw_closure): ... this.
++	* src/powerpc/ffi.c (ffi_prep_closure_loc): Renamed from
++	(ffi_prep_closure): ... this.
++	(flush_icache): Adjust.
++
++2007-03-07  Alexandre Oliva  <aoliva@redhat.com>
++
++	* src/dlmalloc.c: New file, imported version 2.8.3 of Doug
++	Lea's malloc.
++
++2007-03-01  Brooks Moses  <brooks.moses@codesourcery.com>
++
++	* Makefile.am: Add dummy install-pdf target.
++	* Makefile.in: Regenerate
++
++2007-02-13  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* src/s390/ffi.c (ffi_prep_args, ffi_prep_cif_machdep,
++	ffi_closure_helper_SYSV): Add long double handling.
++
++2007-02-02  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/powerpc/linux64.S (ffi_call_LINUX64): Move restore of r2
++	immediately after bctrl instruction.
++
++2007-01-18  Alexandre Oliva  <aoliva@redhat.com>
++
++	* Makefile.am (all-recursive, install-recursive,
++	mostlyclean-recursive, clean-recursive, distclean-recursive,
++	maintainer-clean-recursive): Add missing targets.
++	* Makefile.in: Rebuilt.
++
++2006-12-14  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* configure.ac: Add TARGET for x86_64-*-darwin*.
++	* Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources
++	for X86_DARWIN.
++	* src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*.
++	* src/x86/darwin64.S: New file for x86_64-*-darwin* support.
++	* configure: Regenerate.
++	* Makefile.in: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++	* testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for
++	ffi_call only.
++
++2006-12-13  Andreas Tobler <a.tobler@schweiz.org>
++
++	* aclocal.m4: Regenerate with aclocal -I .. as written in the
++	Makefile.am.
++
++2006-10-31  Geoffrey Keating  <geoffk@apple.com>
++
++	* src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New.
++	(ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for
++	Darwin.
++	* testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL.
++	* testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL.
++
++2006-10-10  Paolo Bonzini  <bonzini@gnu.org>
++	    Sandro Tolaini  <tolaini@libero.it>
++
++	* configure.ac [i*86-*-darwin*]: Set X86_DARWIN symbol and
++	conditional.
++	* configure: Regenerated.
++	* Makefile.am (nodist_libffi_la_SOURCES) [X86_DARWIN]: New case.
++	(EXTRA_DIST): Add src/x86/darwin.S.
++	* Makefile.in: Regenerated.
++	* include/Makefile.in: Regenerated.
++	* testsuite/Makefile.in: Regenerated.
++
++	* src/x86/ffi.c (ffi_prep_cif_machdep) [X86_DARWIN]: Treat like
++	X86_WIN32, and additionally align stack to 16 bytes.
++	* src/x86/darwin.S: New, based on sysv.S.
++	* src/prep_cif.c (ffi_prep_cif) [X86_DARWIN]: Align > 8-byte structs.
++
++2006-09-12  David Daney  <ddaney@avtrex.com>
++
++	PR libffi/23935
++	* include/Makefile.am: Install both ffi.h and ffitarget.h in
++	$(libdir)/gcc/$(target_alias)/$(gcc_version)/include.
++	* aclocal.m4: Regenerated for automake 1.9.6.
++	* Makefile.in: Regenerated.
++	* include/Makefile.in: Regenerated.
++	* testsuite/Makefile.in: Regenerated.
++
++2006-08-17  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* include/ffi_common.h (struct): Revert accidental commit.
++
++2006-08-15  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* include/ffi_common.h: Remove lint directives.
++	* include/ffi.h.in: Likewise.
++
++2006-07-25  Torsten Schoenfeld  <kaffeetisch@gmx.de>
++
++	* include/ffi.h.in (ffi_type_ulong, ffi_type_slong): Define correctly
++	for 32-bit architectures.
++	* testsuite/libffi.call/return_ul.c: New test case.
++
++2006-07-19  David Daney  <ddaney@avtrex.com>
++
++	* testsuite/libffi.call/closure_fn6.c: Remove xfail for mips,
++	xfail remains for mips64.
++
++2006-05-23  Carlos O'Donell  <carlos@codesourcery.com>
++
++	* Makefile.am: Add install-html target. Add install-html to .PHONY
++	* Makefile.in: Regenerate.
++	* aclocal.m4: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2006-05-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* pa/ffi.c (ffi_prep_args_pa32): Load floating point arguments from
++	stack slot.
++
++2006-04-22  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* README: Remove notice about 'Crazy Comments'.
++	* src/debug.c: Remove lint directives. Cleanup white spaces.
++	* src/java_raw_api.c: Likewise.
++	* src/prep_cif.c: Likewise.
++	* src/raw_api.c: Likewise.
++	* src/ffitest.c: Delete. No longer needed, all test cases migrated
++	to the testsuite.
++	* src/arm/ffi.c: Remove lint directives.
++	* src/m32r/ffi.c: Likewise.
++	* src/pa/ffi.c: Likewise.
++	* src/powerpc/ffi.c: Likewise.
++	* src/powerpc/ffi_darwin.c: Likewise.
++	* src/sh/ffi.c: Likewise.
++	* src/sh64/ffi.c: Likewise.
++	* src/x86/ffi.c: Likewise.
++	* testsuite/libffi.call/float2.c: Likewise.
++	* testsuite/libffi.call/promotion.c: Likewise.
++	* testsuite/libffi.call/struct1.c: Likewise.
++
++2006-04-13  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/pa/hpux32.S: Correct unwind offset calculation for
++	ffi_closure_pa32.
++	* src/pa/linux.S: Likewise.
++
++2006-04-12  James E Wilson  <wilson@specifix.com>
++
++	PR libgcj/26483
++	* src/ia64/ffi.c (stf_spill, ldf_fill): Rewrite as macros.
++	(hfa_type_load): Call stf_spill.
++	(hfa_type_store): Call ldf_fill.
++	(ffi_call): Adjust calls to above routines.  Add local temps for
++	macro result.
++
++2006-04-10  Matthias Klose  <doko@debian.org>
++
++	* testsuite/lib/libffi-dg.exp (libffi-init): Recognize multilib
++	directory names containing underscores.
++
++2006-04-07  James E Wilson  <wilson@specifix.com>
++
++	* testsuite/libffi.call/float4.c: New testcase.
++
++2006-04-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++	    Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* Makefile.am: Add PA_HPUX port.
++	* Makefile.in: Regenerate.
++	* include/Makefile.in: Likewise.
++	* testsuite/Makefile.in: Likewise.
++	* configure.ac: Add PA_HPUX rules.
++	* configure: Regenerate.
++	* src/pa/ffitarget.h: Rename linux target to PA_LINUX.
++	Add PA_HPUX and PA64_HPUX.
++	Rename FFI_LINUX ABI to FFI_PA32 ABI.
++	(FFI_TRAMPOLINE_SIZE): Define for 32-bit HP-UX targets.
++	(FFI_TYPE_SMALL_STRUCT2): Define.
++	(FFI_TYPE_SMALL_STRUCT4): Likewise.
++	(FFI_TYPE_SMALL_STRUCT8): Likewise.
++	(FFI_TYPE_SMALL_STRUCT3): Redefine.
++	(FFI_TYPE_SMALL_STRUCT5): Likewise.
++	(FFI_TYPE_SMALL_STRUCT6): Likewise.
++	(FFI_TYPE_SMALL_STRUCT7): Likewise.
++	* src/pa/ffi.c (ROUND_DOWN): Delete.
++	(fldw, fstw, fldd, fstd): Use '__asm__'.
++	(ffi_struct_type): Add support for FFI_TYPE_SMALL_STRUCT2,
++	FFI_TYPE_SMALL_STRUCT4 and FFI_TYPE_SMALL_STRUCT8.
++	(ffi_prep_args_LINUX): Rename to ffi_prep_args_pa32. Update comment.
++	Simplify incrementing of stack slot variable. Change type of local
++	'n' to unsigned int.
++	(ffi_size_stack_LINUX): Rename to ffi_size_stack_pa32. Handle long
++	double on PA_HPUX.
++	(ffi_prep_cif_machdep): Likewise.
++	(ffi_call): Likewise.
++	(ffi_closure_inner_LINUX): Rename to ffi_closure_inner_pa32. Change
++	return type to ffi_status. Simplify incrementing of stack slot
++	variable. Only copy floating point argument registers when PA_LINUX
++	is true. Reformat debug statement.
++	Add support for FFI_TYPE_SMALL_STRUCT2, FFI_TYPE_SMALL_STRUCT4 and
++	FFI_TYPE_SMALL_STRUCT8.
++	(ffi_closure_LINUX): Rename to ffi_closure_pa32. Add 'extern' to
++	declaration.
++	(ffi_prep_closure): Make linux trampoline conditional on PA_LINUX.
++	Add nops to cache flush.  Add trampoline for PA_HPUX.
++	* src/pa/hpux32.S: New file.
++	* src/pa/linux.S (ffi_call_LINUX): Rename to ffi_call_pa32. Rename
++	ffi_prep_args_LINUX to ffi_prep_args_pa32.
++	Localize labels. Add support for 2, 4 and 8-byte small structs. Handle
++	unaligned destinations in 3, 5, 6 and 7-byte small structs. Order
++	argument type checks so that common argument types appear first.
++	(ffi_closure_LINUX): Rename to ffi_closure_pa32. Rename
++	ffi_closure_inner_LINUX to ffi_closure_inner_pa32.
++
++2006-03-24  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/powerpc/ffitarget.h (enum ffi_abi): Add FFI_LINUX.  Default
++	for 32-bit using IBM extended double format.  Fix FFI_LAST_ABI.
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Handle linux variant of
++	FFI_TYPE_LONGDOUBLE.
++	(ffi_prep_args64): Assert using IBM extended double.
++	(ffi_prep_cif_machdep): Don't munge FFI_TYPE_LONGDOUBLE type.
++	Handle FFI_LINUX FFI_TYPE_LONGDOUBLE return and args.
++	(ffi_call): Handle FFI_LINUX.
++	(ffi_closure_helper_SYSV): Non FFI_LINUX long double return needs
++	gpr3 return pointer as for struct return.  Handle FFI_LINUX
++	FFI_TYPE_LONGDOUBLE return and args.  Don't increment "nf"
++	unnecessarily.
++	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Load both f1 and f2
++	for FFI_TYPE_LONGDOUBLE.  Move epilogue insns into case table.
++	Don't use r6 as pointer to results, instead use sp offset.  Don't
++	make a special call to load lr with case table address, instead
++	use offset from previous call.
++	* src/powerpc/sysv.S (ffi_call_SYSV): Save long double return.
++	* src/powerpc/linux64.S (ffi_call_LINUX64): Simplify long double
++	return.
++
++2006-03-15  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh64/ffi.c (ffi_prep_cif_machdep): Handle float arguments
++	passed with FP registers correctly.
++	(ffi_closure_helper_SYSV): Likewise.
++	* src/sh64/sysv.S: Likewise.
++
++2006-03-01  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.special/unwindtest.cc (closure_test_fn): Mark cif,
++	args and userdata unused.
++	(closure_test_fn1): Mark cif and userdata unused.
++	(main): Remove unused res.
++
++2006-02-28  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/call.exp: Adjust FSF address. Add test runs for
++	-O2, -O3, -Os and the warning flags -W -Wall.
++	* testsuite/libffi.special/special.exp: Likewise.
++	* testsuite/libffi.call/ffitest.h: Add an __UNUSED__ macro to mark
++	unused parameter unused for gcc or else do nothing.
++	* testsuite/libffi.special/ffitestcxx.h: Likewise.
++	* testsuite/libffi.call/cls_12byte.c (cls_struct_12byte_gn): Mark cif
++	and userdata unused.
++	* testsuite/libffi.call/cls_16byte.c (cls_struct_16byte_gn): Likewise.
++	* testsuite/libffi.call/cls_18byte.c (cls_struct_18byte_gn): Likewise.
++	* testsuite/libffi.call/cls_19byte.c (cls_struct_19byte_gn): Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c (cls_struct_1_1byte_gn): Likewise.
++	* testsuite/libffi.call/cls_20byte.c (cls_struct_20byte_gn): Likewise.
++	* testsuite/libffi.call/cls_20byte1.c (cls_struct_20byte_gn): Likewise.
++	* testsuite/libffi.call/cls_24byte.c (cls_struct_24byte_gn): Likewise.
++	* testsuite/libffi.call/cls_2byte.c (cls_struct_2byte_gn): Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c (cls_struct_3_1byte_gn): Likewise.
++	* testsuite/libffi.call/cls_3byte1.c (cls_struct_3byte_gn): Likewise.
++	* testsuite/libffi.call/cls_3byte2.c (cls_struct_3byte_gn1): Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c (cls_struct_4_1byte_gn): Likewise.
++	* testsuite/libffi.call/cls_4byte.c (cls_struct_4byte_gn): Likewise.
++	* testsuite/libffi.call/cls_5_1_byte.c (cls_struct_5byte_gn): Likewise.
++	* testsuite/libffi.call/cls_5byte.c (cls_struct_5byte_gn): Likewise.
++	* testsuite/libffi.call/cls_64byte.c (cls_struct_64byte_gn): Likewise.
++	* testsuite/libffi.call/cls_6_1_byte.c (cls_struct_6byte_gn): Likewise.
++	* testsuite/libffi.call/cls_6byte.c (cls_struct_6byte_gn): Likewise.
++	* testsuite/libffi.call/cls_7_1_byte.c (cls_struct_7byte_gn): Likewise.
++	* testsuite/libffi.call/cls_7byte.c (cls_struct_7byte_gn): Likewise.
++	* testsuite/libffi.call/cls_8byte.c (cls_struct_8byte_gn): Likewise.
++	* testsuite/libffi.call/cls_9byte1.c (cls_struct_9byte_gn): Likewise.
++	* testsuite/libffi.call/cls_9byte2.c (cls_struct_9byte_gn): Likewise.
++	* testsuite/libffi.call/cls_align_double.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_float.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_longdouble.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_pointer.c (cls_struct_align_fn): Cast
++	void* to avoid compiler warning.
++	(main): Likewise.
++	(cls_struct_align_gn): Mark cif and userdata unused.
++	* testsuite/libffi.call/cls_align_sint16.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_sint32.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_sint64.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_uint16.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_align_uint32.c (cls_struct_align_gn):
++	Likewise.
++	* testsuite/libffi.call/cls_double.c (cls_ret_double_fn): Likewise.
++	* testsuite/libffi.call/cls_float.c (cls_ret_float_fn): Likewise.
++	* testsuite/libffi.call/cls_multi_schar.c (test_func_gn): Mark cif and
++	data unused.
++	(main): Cast res_call to silence gcc.
++	* testsuite/libffi.call/cls_multi_sshort.c (test_func_gn): Mark cif and
++	data unused.
++	(main): Cast res_call to silence gcc.
++	* testsuite/libffi.call/cls_multi_sshortchar.c (test_func_gn): Mark cif
++	and data unused.
++	(main): Cast res_call to silence gcc.
++	* testsuite/libffi.call/cls_multi_uchar.c (test_func_gn): Mark cif and
++	data unused.
++	(main): Cast res_call to silence gcc.
++	* testsuite/libffi.call/cls_multi_ushort.c (test_func_gn): Mark cif and
++	data unused.
++	(main): Cast res_call to silence gcc.
++	* testsuite/libffi.call/cls_multi_ushortchar.c (test_func_gn): Mark cif
++	and data unused.
++	(main): Cast res_call to silence gcc.
++	* testsuite/libffi.call/cls_schar.c (cls_ret_schar_fn): Mark cif and
++	userdata unused.
++	(cls_ret_schar_fn): Cast printf parameter to silence gcc.
++	* testsuite/libffi.call/cls_sint.c (cls_ret_sint_fn): Mark cif and
++	userdata unused.
++	(cls_ret_sint_fn): Cast printf parameter to silence gcc.
++	* testsuite/libffi.call/cls_sshort.c (cls_ret_sshort_fn): Mark cif and
++	userdata unused.
++	(cls_ret_sshort_fn): Cast printf parameter to silence gcc.
++	* testsuite/libffi.call/cls_uchar.c (cls_ret_uchar_fn):  Mark cif and
++	userdata unused.
++	(cls_ret_uchar_fn): Cast printf parameter to silence gcc.
++	* testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Mark cif and
++	userdata unused.
++	(cls_ret_uint_fn): Cast printf parameter to silence gcc.
++	* testsuite/libffi.call/cls_ulonglong.c (cls_ret_ulonglong_fn): Mark cif
++	and userdata unused.
++	* testsuite/libffi.call/cls_ushort.c (cls_ret_ushort_fn): Mark cif and
++	userdata unused.
++	(cls_ret_ushort_fn): Cast printf parameter to silence gcc.
++	* testsuite/libffi.call/float.c (floating): Remove unused parameter e.
++	* testsuite/libffi.call/float1.c (main): Remove unused variable i.
++	Cleanup white spaces.
++	* testsuite/libffi.call/negint.c (checking): Remove unused variable i.
++	* testsuite/libffi.call/nested_struct.c (cls_struct_combined_gn): Mark
++	cif and userdata unused.
++	* testsuite/libffi.call/nested_struct1.c (cls_struct_combined_gn):
++	Likewise.
++	* testsuite/libffi.call/nested_struct10.c (B_gn): Likewise.
++	* testsuite/libffi.call/nested_struct2.c (B_fn): Adjust printf
++	formatters to silence gcc.
++	(B_gn): Mark cif and userdata unused.
++	* testsuite/libffi.call/nested_struct3.c (B_gn): Mark cif and userdata
++	unused.
++	* testsuite/libffi.call/nested_struct4.c: Mention related PR.
++	(B_gn): Mark cif and userdata unused.
++	* testsuite/libffi.call/nested_struct5.c (B_gn): Mark cif and userdata
++	unused.
++	* testsuite/libffi.call/nested_struct6.c: Mention related PR.
++	(B_gn): Mark cif and userdata unused.
++	* testsuite/libffi.call/nested_struct7.c (B_gn): Mark cif and userdata
++	unused.
++	* testsuite/libffi.call/nested_struct8.c (B_gn): Likewise.
++	* testsuite/libffi.call/nested_struct9.c (B_gn): Likewise.
++	* testsuite/libffi.call/problem1.c (stub): Likewise.
++	* testsuite/libffi.call/pyobjc-tc.c (main): Cast the result to silence
++	gcc.
++	* testsuite/libffi.call/return_fl2.c (return_fl): Add the note mentioned
++	in the last commit for this test case in the test case itself.
++	* testsuite/libffi.call/closure_fn0.c (closure_test_fn0): Mark cif as
++	unused.
++	* testsuite/libffi.call/closure_fn1.c (closure_test_fn1): Likewise.
++	* testsuite/libffi.call/closure_fn2.c (closure_test_fn2): Likewise.
++	* testsuite/libffi.call/closure_fn3.c (closure_test_fn3): Likewise.
++	* testsuite/libffi.call/closure_fn4.c (closure_test_fn0): Likewise.
++	* testsuite/libffi.call/closure_fn5.c (closure_test_fn5): Likewise.
++	* testsuite/libffi.call/closure_fn6.c (closure_test_fn0): Likewise.
++
++2006-02-22  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/sysv.S: Fix register numbers in the FDE for
++	ffi_closure_SYSV.
++
++2006-02-20  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/return_fl2.c (return_fl): Remove static
++	declaration to avoid a false negative on ix86. See PR323.
++
++2006-02-18  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (ffi_closure_helper_SYSV): Remove unused variable
++	and cast integer to void * if needed.  Update the pointer to
++	the FP register saved area correctly.
++
++2006-02-17  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/nested_struct6.c: XFAIL this test until PR25630
++	is fixed.
++	* testsuite/libffi.call/nested_struct4.c: Likewise.
++
++2006-02-16  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/return_dbl.c: New test case.
++	* testsuite/libffi.call/return_dbl1.c: Likewise.
++	* testsuite/libffi.call/return_dbl2.c: Likewise.
++	* testsuite/libffi.call/return_fl.c: Likewise.
++	* testsuite/libffi.call/return_fl1.c: Likewise.
++	* testsuite/libffi.call/return_fl2.c: Likewise.
++	* testsuite/libffi.call/return_fl3.c: Likewise.
++	* testsuite/libffi.call/closure_fn6.c: Likewise.
++
++	* testsuite/libffi.call/nested_struct2.c: Remove ffi_type_mylong
++	definition.
++	* testsuite/libffi.call/ffitest.h: Add ffi_type_mylong definition
++	here to be used by other test cases too.
++
++	* testsuite/libffi.call/nested_struct10.c: New test case.
++	* testsuite/libffi.call/nested_struct9.c: Likewise.
++	* testsuite/libffi.call/nested_struct8.c: Likewise.
++	* testsuite/libffi.call/nested_struct7.c: Likewise.
++	* testsuite/libffi.call/nested_struct6.c: Likewise.
++	* testsuite/libffi.call/nested_struct5.c: Likewise.
++	* testsuite/libffi.call/nested_struct4.c: Likewise.
++
++2006-01-21  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* configure.ac: Enable libffi for sparc64-*-freebsd*.
++	* configure: Rebuilt.
++
++2006-01-18  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/powerpc/sysv.S (smst_two_register): Don't call __ashldi3,
++	instead do the shifting inline.
++	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't compute %r5
++	shift count unconditionally.  Simplify load sequences for 1, 2, 3, 4
++	and 8 byte structs, for the remaining struct sizes don't call
++	__lshrdi3, instead do the shifting inline.
++
++2005-12-07  Thiemo Seufer  <ths@networkno.de>
++
++	* src/mips/ffitarget.h: Remove obsolete sgidefs.h include. Add
++	missing parentheses.
++	* src/mips/o32.S (ffi_call_O32): Code formatting. Define
++	and use A3_OFF, FP_OFF, RA_OFF. Micro-optimizations.
++	(ffi_closure_O32): Likewise, but with newly defined A3_OFF2,
++	A2_OFF2, A1_OFF2, A0_OFF2, RA_OFF2, FP_OFF2, S0_OFF2, GP_OFF2,
++	V1_OFF2, V0_OFF2, FA_1_1_OFF2, FA_1_0_OFF2, FA_0_1_OFF2,
++	FA_0_0_OFF2.
++	* src/mips/ffi.c (ffi_prep_args): Code formatting. Fix
++	endianness bugs.
++	(ffi_prep_closure): Improve trampoline instruction scheduling.
++	(ffi_closure_mips_inner_O32): Fix endianness bugs.
++
++2005-12-03  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/powerpc/ffi.c: Formatting.
++	(ffi_prep_args_SYSV): Avoid possible aliasing problems by using unions.
++	(ffi_prep_args64): Likewise.
++
++2005-09-30  Geoffrey Keating  <geoffk@apple.com>
++
++	* testsuite/lib/libffi-dg.exp (libffi_target_compile): For
++	darwin, use -shared-libgcc not -lgcc_s, and explain why.
++
++2005-09-26  Tom Tromey  <tromey@redhat.com>
++
++	* testsuite/libffi.call/float1.c (value_type): New typedef.
++	(CANARY): New define.
++	(main): Check for result buffer overflow.
++	* src/powerpc/linux64.S: Handle linux64 long double returns.
++	* src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant.
++	(ffi_prep_cif_machdep): Handle linux64 long double returns.
++
++2005-08-25  Alan Modra  <amodra@bigpond.net.au>
++
++	PR target/23404
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack
++	homed fp args.
++	(ffi_status ffi_prep_cif_machdep): Correct stack sizing for same.
++
++2005-08-11  Jakub Jelinek  <jakub@redhat.com>
++
++	* configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test.
++	(AH_BOTTOM): Add FFI_HIDDEN definition.
++	* configure: Rebuilt.
++	* fficonfig.h.in: Rebuilt.
++	* src/powerpc/ffi.c (hidden): Remove.
++	(ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64,
++	ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden.
++	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64,
++	.ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden.
++	* src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove,
++	add FFI_HIDDEN to its prototype.
++	(ffi_closure_SYSV_inner): New.
++	* src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New.
++	* src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New.
++
++2005-08-10  Alfred M. Szmidt  <ams@gnu.org>
++
++	PR libffi/21819:
++	* configure: Rebuilt.
++	* configure.ac: Handle i*86-*-gnu*.
++
++2005-08-09  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Use
++	DW_CFA_offset_extended_sf rather than
++	DW_CFA_GNU_negative_offset_extended.
++	* src/powerpc/sysv.S (ffi_call_SYSV): Likewise.
++
++2005-07-22  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
++
++	* src/sh/sysv.S (ffi_call_SYSV): Stop argument popping correctly
++	on sh3.
++	(ffi_closure_SYSV): Change the stack layout for sh3 struct argument.
++	* src/sh/ffi.c (ffi_prep_args): Fix sh3 argument copy, when it is
++	partially on register.
++	(ffi_closure_helper_SYSV): Likewise.
++	(ffi_prep_cif_machdep): Don't set too many cif->flags.
++
++2005-07-20  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (ffi_call): Handle small structures correctly.
++	Remove empty line.
++	* src/sh64/ffi.c (simple_type): Remove.
++	(return_type): Handle small structures correctly.
++	(ffi_prep_args): Likewise.
++	(ffi_call): Likewise.
++	(ffi_closure_helper_SYSV): Likewise.
++	* src/sh64/sysv.S (ffi_call_SYSV): Handle 1, 2 and 4-byte return.
++	Emit position independent code if PIC and remove wrong datalabel
++	prefixes from EH data.
++
++2005-07-19  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* Makefile.am (nodist_libffi_la_SOURCES): Add POWERPC_FREEBSD.
++	* Makefile.in: Regenerate.
++	* include/Makefile.in: Likewise.
++	* testsuite/Makefile.in: Likewise.
++	* configure.ac: Add POWERPC_FREEBSD rules.
++	* configure: Regenerate.
++	* src/powerpc/ffitarget.h: Add POWERPC_FREEBSD rules.
++	(FFI_SYSV_TYPE_SMALL_STRUCT): Define.
++	* src/powerpc/ffi.c: Add flags to handle small structure returns
++	in ffi_call_SYSV.
++	(ffi_prep_cif_machdep): Handle small structures for SYSV 4 ABI.
++	Aka FFI_SYSV.
++	(ffi_closure_helper_SYSV): Likewise.
++	* src/powerpc/ppc_closure.S: Add return types for small structures.
++	* src/powerpc/sysv.S: Add bits to handle small structures for
++	final SYSV 4 ABI.
++
++2005-07-10  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/cls_5_1_byte.c: New test file.
++	* testsuite/libffi.call/cls_6_1_byte.c: Likewise.
++	* testsuite/libffi.call/cls_7_1_byte.c: Likewise.
++
++2005-07-05  Randolph Chung  <tausq@debian.org>
++
++	* src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1
++	as FFI_TYPE_SMALL_STRUCT3.  Break out handling for 5-7 byte
++	structures.  Kill compilation warnings.
++	(ffi_closure_inner_LINUX): Print return values as hex in debug
++	message.  Rename FFI_TYPE_SMALL_STRUCT1 as FFI_TYPE_SMALL_STRUCT3.
++	Properly handle 5-7 byte structure returns.
++	* src/pa/ffitarget.h (FFI_TYPE_SMALL_STRUCT1)
++	(FFI_TYPE_SMALL_STRUCT2): Remove.
++	(FFI_TYPE_SMALL_STRUCT3, FFI_TYPE_SMALL_STRUCT5)
++	(FFI_TYPE_SMALL_STRUCT6, FFI_TYPE_SMALL_STRUCT7): Define.
++	* src/pa/linux.S: Mark source file as using PA1.1 assembly.
++	(checksmst1, checksmst2): Remove.
++	(checksmst3): Optimize handling of 3-byte struct returns.
++	(checksmst567): Properly handle 5-7 byte struct returns.
++
++2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	PR libgcj/21943
++	* src/mips/n32.S: Enforce PIC code.
++	* src/mips/o32.S: Likewise.
++
++2005-06-15  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* configure.ac: Treat i*86-*-solaris2.10 and up as X86_64.
++	* configure: Regenerate.
++
++2005-06-01  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET
++	to call ffi_closure_helper_SYSV.  Append @local instead.
++	* src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV.
++
++2005-05-17  Kelley Cook  <kcook@gcc.gnu.org>
++
++	* configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
++	Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
++	* Makefile.am (ACLOCAL_AMFLAGS): Remove -I ../config.
++	* aclocal.m4, configure, fficonfig.h.in, Makefile.in,
++	include/Makefile.in, testsuite/Makefile.in: Regenerate.
++
++2005-05-09  Mike Stump  <mrs@apple.com>
++
++	* configure: Regenerate.
++
++2005-05-08  Richard Henderson  <rth@redhat.com>
++
++	PR libffi/21285
++	* src/alpha/osf.S: Update unwind into to match code.
++
++2005-05-04  Andreas Degert <ad@papyrus-gmbh.de>
++	    Richard Henderson  <rth@redhat.com>
++
++	* src/x86/ffi64.c (ffi_prep_cif_machdep): Save sse-used flag in
++	bit 11 of flags.
++	(ffi_call): Mask return type field.  Pass ssecount to ffi_call_unix64.
++	(ffi_prep_closure): Set carry bit if sse-used flag set.
++	* src/x86/unix64.S (ffi_call_unix64): Add ssecount argument.
++	Only load sse registers if ssecount non-zero.
++	(ffi_closure_unix64): Only save sse registers if carry set on entry.
++
++2005-04-29  Ralf Corsepius  <ralf.corsepius@rtems.org>
++
++	* configure.ac: Add i*86-*-rtems*, sparc*-*-rtems*,
++	powerpc-*rtems*, arm*-*-rtems*, sh-*-rtems*.
++	* configure: Regenerate.
++
++2005-04-20  Hans-Peter Nilsson  <hp@axis.com>
++
++	* testsuite/lib/libffi-dg.exp (libffi-dg-test-1): In regsub use,
++	have Tcl8.3-compatible intermediate variable.
++
++2005-04-18  Simon Posnjak <simon.posnjak@siol.net>
++	    Hans-Peter Nilsson  <hp@axis.com>
++
++	* Makefile.am: Add CRIS support.
++	* configure.ac: Likewise.
++	* Makefile.in, configure, testsuite/Makefile.in,
++	include/Makefile.in: Regenerate.
++	* src/cris: New directory.
++	* src/cris/ffi.c, src/cris/sysv.S, src/cris/ffitarget.h: New files.
++	* src/prep_cif.c (ffi_prep_cif): Wrap in #ifndef __CRIS__.
++
++	* testsuite/lib/libffi-dg.exp (libffi-dg-test-1): Replace \n with
++	\r?\n in output tests.
++
++2005-04-12  Mike Stump  <mrs@apple.com>
++
++	* configure: Regenerate.
++
++2005-03-30  Hans Boehm  <Hans.Boehm@hp.com>
++
++	* src/ia64/ffitarget.h (ffi_arg): Use long long instead of DI.
++
++2005-03-30  Steve Ellcey  <sje@cup.hp.com>
++
++	* src/ia64/ffitarget.h (ffi_arg) ADD DI attribute.
++	(ffi_sarg) Ditto.
++	* src/ia64/unix.S (ffi_closure_unix): Extend gp
++	to 64 bits in ILP32 mode.
++	Load 64 bits even for short data.
++
++2005-03-23  Mike Stump  <mrs@apple.com>
++
++	* src/powerpc/darwin.S: Update for -m64 multilib.
++	* src/powerpc/darwin_closure.S: Likewise.
++
++2005-03-21  Zack Weinberg  <zack@codesourcery.com>
++
++	* configure.ac: Do not invoke TL_AC_GCC_VERSION.
++	Do not set tool_include_dir.
++	* aclocal.m4, configure, Makefile.in, testsuite/Makefile.in:
++	Regenerate.
++	* include/Makefile.am: Set gcc_version and toollibffidir.
++	* include/Makefile.in: Regenerate.
++
++2005-02-22  Andrew Haley  <aph@redhat.com>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to
++	odd-numbered register pairs for 64-bit integer types.
++
++2005-02-23  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	PR libffi/20104
++	* testsuite/libffi.call/return_ll1.c: New test case.
++
++2005-02-11  Janis Johnson  <janis187@us.ibm.com>
++
++	* testsuite/libffi.call/cls_align_longdouble.c: Remove dg-options.
++	* testsuite/libffi.call/float.c: Ditto.
++	* testsuite/libffi.call/float2.c: Ditto.
++	* testsuite/libffi.call/float3.c: Ditto.
++
++2005-02-08  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/frv/ffitarget.h: Remove PPC stuff which does not belong to frv.
++
++2005-01-12  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* testsuite/libffi.special/special.exp (cxx_options): Add
++	-shared-libgcc.
++
++2004-12-31  Richard Henderson  <rth@redhat.com>
++
++	* src/types.c (FFI_AGGREGATE_TYPEDEF): Remove.
++	(FFI_TYPEDEF): Rename from FFI_INTEGRAL_TYPEDEF.  Replace size and
++	offset parameters with a type parameter; deduce size and structure
++	alignment.  Update all users.
++
++2004-12-31  Richard Henderson  <rth@redhat.com>
++
++	* src/types.c (FFI_TYPE_POINTER): Define with sizeof.
++	(FFI_TYPE_LONGDOUBLE): Fix for ia64.
++	* src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move
++	into ffi_prep_closure.
++	* src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite
++	from scratch.
++
++2004-12-27  Richard Henderson  <rth@redhat.com>
++
++	* src/x86/unix64.S: Fix typo in unwind info.
++
++2004-12-25  Richard Henderson  <rth@redhat.com>
++
++	* src/x86/ffi64.c (struct register_args): Rename from stackLayout.
++	(enum x86_64_reg_class): Add X86_64_COMPLEX_X87_CLASS.
++	(merge_classes): Check for it.
++	(SSE_CLASS_P): New.
++	(classify_argument): Pass byte_offset by value; perform all updates
++	inside struct case.
++	(examine_argument): Add classes argument; handle
++	X86_64_COMPLEX_X87_CLASS.
++	(ffi_prep_args): Merge into ...
++	(ffi_call): ... here.  Share stack frame with ffi_call_unix64.
++	(ffi_prep_cif_machdep): Setup cif->flags for proper structure return.
++	(ffi_fill_return_value): Remove.
++	(ffi_prep_closure): Remove dead assert.
++	(ffi_closure_unix64_inner): Rename from ffi_closure_UNIX64_inner.
++	Rewrite to use struct register_args instead of va_list.  Create
++	flags for handling structure returns.
++	* src/x86/unix64.S: Remove dead strings.
++	(ffi_call_unix64): Rename from ffi_call_UNIX64.  Rewrite to share
++	stack frame with ffi_call.  Handle structure returns properly.
++	(float2sse, floatfloat2sse, double2sse): Remove.
++	(sse2float, sse2double, sse2floatfloat): Remove.
++	(ffi_closure_unix64): Rename from ffi_closure_UNIX64.  Rewrite
++	to handle structure returns properly.
++
++2004-12-08  David Edelsohn  <edelsohn@gnu.org>
++
++	* Makefile.am (AM_MAKEFLAGS): Remove duplicate LIBCFLAGS and
++	PICFLAG.
++	* Makefile.in: Regenerated.
++
++2004-12-02  Richard Sandiford  <rsandifo@redhat.com>
++
++	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
++	* configure, aclocal.m4, Makefile.in: Regenerate.
++	* include/Makefile.in, testsuite/Makefile.in: Regenerate.
++
++2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>
++
++	* configure: Regenerate for libtool change.
++
++2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>
++
++	* configure: Regenerate for libtool reversion.
++
++2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
++
++	* configure: Regenerate for libtool change.
++
++2004-11-23  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* testsuite/lib/libffi-dg.exp: Use new procs in target-libpath.exp.
++
++2004-11-23  Richard Sandiford  <rsandifo@redhat.com>
++
++	* src/mips/o32.S (ffi_call_O32, ffi_closure_O32): Use jalr instead
++	of jal.  Use an absolute encoding for the frame information.
++
++2004-11-23  Kelley Cook  <kcook@gcc.gnu.org>
++
++	* Makefile.am: Remove no-dependencies.  Add ACLOCAL_AMFLAGS.
++	* acinclude.m4: Delete logic for sincludes.
++	* aclocal.m4, Makefile.in, configure: Regenerate.
++	* include/Makefile: Likewise.
++	* testsuite/Makefile: Likewise.
++
++2004-11-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* src/sparc/ffi.c (ffi_prep_closure): Align doubles and 64-bit integers
++	on a 8-byte boundary.
++	* src/sparc/v8.S (ffi_closure_v8): Reserve frame space for arguments.
++
++2004-10-27  Richard Earnshaw  <rearnsha@arm.com>
++
++	* src/arm/ffi.c (ffi_prep_cif_machdep): Handle functions that return
++	long long values.  Round stack allocation to a multiple of 8 bytes
++	for ATPCS compatibility.
++	* src/arm/sysv.S (ffi_call_SYSV): Rework to avoid use of APCS register
++	names.  Handle returning long long types.  Add Thumb and interworking
++	support.  Improve soft-float code.
++
++2004-10-27  Richard Earnshaw  <rearnsha@arm.com>
++
++	* testsuite/lib/libffi-db.exp (load_gcc_lib): New function.
++	(libffi_exit): New function.
++	(libffi_init): Build the testglue wrapper if needed.
++
++2004-10-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	PR other/18138
++	* testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc.
++
++2004-10-25  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
++
++	* src/m32r/libffitarget.h (FFI_CLOSURES): Set to 0.
++
++2004-10-20  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/sysv.S (ffi_call_SYSV): Don't align for double data.
++	* testsuite/libffi.call/float3.c: New test case.
++
++2004-10-18  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (ffi_prep_closure): Set T bit in trampoline for
++	the function returning a structure pointed with R2.
++	* src/sh/sysv.S (ffi_closure_SYSV): Use R2 as the pointer to
++	the structure return value if T bit set.  Emit position
++	independent code and EH data if PIC.
++
++2004-10-13  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
++
++	* Makefile.am: Add m32r support.
++	* configure.ac: Likewise.
++	* Makefile.in: Regenerate.
++	* confiugre: Regenerate.
++	* src/types.c: Add m32r port to FFI_INTERNAL_TYPEDEF
++	(uint64, sint64, double, longdouble)
++	* src/m32r: New directory.
++	* src/m32r/ffi.c: New file.
++	* src/m32r/sysv.S: Likewise.
++	* src/m32r/ffitarget.h: Likewise.
++
++2004-10-02  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* testsuite/libffi.call/negint.c: New test case.
++
++2004-09-14  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR libgcj/17465
++	* testsuite/lib/libffi-dg.exp: Don't use global ld_library_path.
++	Set up LD_LIBRARY_PATH, SHLIB_PATH, LD_LIBRARYN32_PATH,
++	LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and
++	DYLD_LIBRARY_PATH.
++
++2004-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/many_win32.c: Remove whitespaces.
++	* testsuite/libffi.call/promotion.c: Likewise.
++	* testsuite/libffi.call/return_ll.c: Remove unused var. Cleanup
++	whitespaces.
++	* testsuite/libffi.call/return_sc.c: Likewise.
++	* testsuite/libffi.call/return_uc.c: Likewise.
++
++2004-09-05  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/darwin.S: Fix comments and identation.
++	* src/powerpc/darwin_closure.S: Likewise.
++
++2004-09-02  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/ffi_darwin.c: Add flag for longdouble return values.
++	(ffi_prep_args): Handle longdouble arguments.
++	(ffi_prep_cif_machdep): Set flags for longdouble. Calculate space for
++	longdouble.
++	(ffi_closure_helper_DARWIN): Add closure handling for longdouble.
++	* src/powerpc/darwin.S (_ffi_call_DARWIN): Add handling of longdouble
++	values.
++	* src/powerpc/darwin_closure.S (_ffi_closure_ASM): Likewise.
++	* src/types.c: Defined longdouble size and alignment for darwin.
++
++2004-09-02  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/aix.S: Remove whitespaces.
++	* src/powerpc/aix_closure.S: Likewise.
++	* src/powerpc/asm.h: Likewise.
++	* src/powerpc/ffi.c: Likewise.
++	* src/powerpc/ffitarget.h: Likewise.
++	* src/powerpc/linux64.S: Likewise.
++	* src/powerpc/linux64_closure.S: Likewise.
++	* src/powerpc/ppc_closure.S: Likewise.
++	* src/powerpc/sysv.S: Likewise.
++
++2004-08-30  Anthony Green  <green@redhat.com>
++
++	* Makefile.am: Add frv support.
++	* Makefile.in, testsuite/Makefile.in: Rebuilt.
++	* configure.ac: Read configure.host.
++	* configure.in: Read configure.host.
++	* configure.host: New file.  frv-elf needs libgloss.
++	* include/ffi.h.in: Force ffi_closure to have a nice big (8)
++	alignment.  This is needed to frv and shouldn't harm the others.
++	* include/ffi_common.h (ALIGN_DOWN): New macro.
++	* src/frv/ffi.c, src/frv/ffitarget.h, src/frv/eabi.S: New files.
++
++2004-08-24  David Daney  <daney@avtrex.com>
++
++	* testsuite/libffi.call/closure_fn0.c: Xfail mips64* instead of mips*.
++	* testsuite/libffi.call/closure_fn1.c: Likewise.
++	* testsuite/libffi.call/closure_fn2.c  Likewise.
++	* testsuite/libffi.call/closure_fn3.c: Likewise.
++	* testsuite/libffi.call/closure_fn4.c: Likewise.
++	* testsuite/libffi.call/closure_fn5.c: Likewise.
++	* testsuite/libffi.call/cls_18byte.c: Likewise.
++	* testsuite/libffi.call/cls_19byte.c: Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte1.c: Likewise.
++	* testsuite/libffi.call/cls_24byte.c: Likewise.
++	* testsuite/libffi.call/cls_2byte.c: Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_3byte1.c: Likewise.
++	* testsuite/libffi.call/cls_3byte2.c: Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_4byte.c: Likewise.
++	* testsuite/libffi.call/cls_64byte.c: Likewise.
++	* testsuite/libffi.call/cls_6byte.c: Likewise.
++	* testsuite/libffi.call/cls_7byte.c: Likewise.
++	* testsuite/libffi.call/cls_8byte.c: Likewise.
++	* testsuite/libffi.call/cls_9byte1.c: Likewise.
++	* testsuite/libffi.call/cls_9byte2.c: Likewise.
++	* testsuite/libffi.call/cls_align_double.c: Likewise.
++	* testsuite/libffi.call/cls_align_float.c: Likewise.
++	* testsuite/libffi.call/cls_align_longdouble.c: Likewise.
++	* testsuite/libffi.call/cls_align_pointer.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint16.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint32.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint64.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint16.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint32.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint64.c: Likewise.
++	* testsuite/libffi.call/cls_double.c: Likewise.
++	* testsuite/libffi.call/cls_float.c: Likewise.
++	* testsuite/libffi.call/cls_multi_schar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_sshort.c: Likewise.
++	* testsuite/libffi.call/cls_multi_sshortchar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_ushort.c: Likewise.
++	* testsuite/libffi.call/cls_multi_ushortchar.c: Likewise.
++	* testsuite/libffi.call/cls_schar.c: Likewise.
++	* testsuite/libffi.call/cls_sint.c: Likewise.
++	* testsuite/libffi.call/cls_sshort.c: Likewise.
++	* testsuite/libffi.call/cls_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_uint.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/cls_ushort.c: Likewise.
++	* testsuite/libffi.call/nested_struct.c: Likewise.
++	* testsuite/libffi.call/nested_struct1.c: Likewise.
++	* testsuite/libffi.call/nested_struct2.c: Likewise.
++	* testsuite/libffi.call/nested_struct3.c: Likewise.
++	* testsuite/libffi.call/problem1.c: Likewise.
++	* testsuite/libffi.special/unwindtest.cc: Likewise.
++	* testsuite/libffi.call/cls_12byte.c: Likewise and set return value
++	to zero.
++	* testsuite/libffi.call/cls_16byte.c: Likewise.
++	* testsuite/libffi.call/cls_5byte.c: Likewise.
++
++2004-08-23  David Daney <daney@avtrex.com>
++
++	PR libgcj/13141
++	* src/mips/ffitarget.h (FFI_O32_SOFT_FLOAT): New ABI.
++	* src/mips/ffi.c (ffi_prep_args): Fix alignment calculation.
++	(ffi_prep_cif_machdep): Handle FFI_O32_SOFT_FLOAT floating point
++	parameters and return types.
++	(ffi_call): Handle FFI_O32_SOFT_FLOAT ABI.
++	(ffi_prep_closure): Ditto.
++	(ffi_closure_mips_inner_O32): Handle FFI_O32_SOFT_FLOAT ABI, fix
++	alignment calculations.
++	* src/mips/o32.S (ffi_closure_O32): Don't use floating point
++	instructions if FFI_O32_SOFT_FLOAT, make stack frame ABI compliant.
++
++2004-08-14  Casey Marshall <csm@gnu.org>
++
++	* src/mips/ffi.c (ffi_pref_cif_machdep): set `cif->flags' to
++	contain `FFI_TYPE_UINT64' as return type for any 64-bit
++	integer (O32 ABI only).
++	(ffi_prep_closure): new function.
++	(ffi_closure_mips_inner_O32): new function.
++	* src/mips/ffitarget.h: Define `FFI_CLOSURES' and
++	`FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32.
++	* src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return
++	64 bit integers correctly.
++	(ffi_closure_O32): new function.
++	Added DWARF-2 unwind info for both functions.
++
++2004-08-10  Andrew Haley  <aph@redhat.com>
++
++	* src/x86/ffi64.c (ffi_prep_args ): 8-align all stack arguments.
++
++2004-08-01  Robert Millan  <robertmh@gnu.org>
++
++	* configure.ac: Detect knetbsd-gnu and kfreebsd-gnu.
++	* configure: Regenerate.
++
++2004-07-30  Maciej W. Rozycki  <macro@linux-mips.org>
++
++	* acinclude.m4 (AC_FUNC_MMAP_BLACKLIST): Check for <sys/mman.h>
++	and mmap() explicitly instead of relying on preset autoconf cache
++	variables.
++	* aclocal.m4: Regenerate.
++	* configure: Regenerate.
++
++2004-07-11  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* src/s390/ffi.c (ffi_prep_args): Fix C aliasing violation.
++	(ffi_check_float_struct): Remove unused prototype.
++
++2004-06-30  Geoffrey Keating  <geoffk@apple.com>
++
++	* src/powerpc/ffi_darwin.c (flush_icache): ';' is a comment
++	character on Darwin, use '\n\t' instead.
++
++2004-06-26  Matthias Klose  <doko@debian.org>
++
++	* libtool-version: Fix typo in revision/age.
++
++2004-06-17  Matthias Klose  <doko@debian.org>
++
++	* libtool-version: New.
++	* Makefile.am (libffi_la_LDFLAGS): Use -version-info for soname.
++	* Makefile.in: Regenerate.
++
++2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
++
++	* Makefile.am: Remove useless multilib rules.
++	* Makefile.in: Regenerate.
++	* aclocal.m4: Regenerate with automake 1.8.5.
++	* configure.ac: Remove useless multilib configury.
++	* configure: Regenerate.
++
++2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
++
++	* .cvsignore: New file.
++
++2004-06-10  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/ia64/unix.S (ffi_call_unix): Insert group barrier break
++	fp_done.
++	(ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever
++	changed from 8.
++
++2004-06-06  Sean McNeil  <sean@mcneil.com>
++
++	* configure.ac: Add x86_64-*-freebsd* support.
++	* configure: Regenerate.
++
++2004-04-26  Joe Buck <jbuck@welsh-buck.org>
++
++	Bug 15093
++	* configure.ac: Test for existence of mmap and sys/mman.h before
++	checking blacklist.  Fix suggested by Jim Wilson.
++	* configure: Regenerate.
++
++2004-04-26  Matt Austern  <austern@apple.com>
++
++	* src/powerpc/darwin.S: Go through a non-lazy pointer for initial
++	FDE location.
++	* src/powerpc/darwin_closure.S: Likewise.
++
++2004-04-24  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization
++	error. Reported by Thomas Heller <theller@python.net>.
++	* testsuite/libffi.call/cls_multi_sshort.c (main): Likewise.
++	* testsuite/libffi.call/cls_multi_ushort.c (main): Likewise.
++
++2004-03-20  Matthias Klose  <doko@debian.org>
++
++	* src/pa/linux.S: Fix typo.
++
++2004-03-19  Matthias Klose  <doko@debian.org>
++
++	* Makefile.am: Update.
++	* Makefile.in: Regenerate.
++	* src/pa/ffi.h.in: Remove.
++	* src/pa/ffitarget.h: New file.
++
++2004-02-10  Randolph Chung  <tausq@debian.org>
++
++	* Makefile.am: Add PA support.
++	* Makefile.in: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* configure.ac: Add PA target.
++	* configure: Regenerate.
++	* src/pa/ffi.c: New file.
++	* src/pa/ffi.h.in: Add PA support.
++	* src/pa/linux.S: New file.
++	* prep_cif.c: Add PA support.
++
++2004-03-16  Hosaka Yuji  <hos@tamanegi.org>
++
++	* src/types.c: Fix alignment size of X86_WIN32 case int64 and
++	double.
++	* src/x86/ffi.c (ffi_prep_args): Replace ecif->cif->rtype->type
++	with ecif->cif->flags.
++	(ffi_call, ffi_prep_incoming_args_SYSV): Replace cif->rtype->type
++	with cif->flags.
++	(ffi_prep_cif_machdep): Add X86_WIN32 struct case.
++	(ffi_closure_SYSV): Add 1 or 2-bytes struct case for X86_WIN32.
++	* src/x86/win32.S (retstruct1b, retstruct2b, sc_retstruct1b,
++	sc_retstruct2b): Add for 1 or 2-bytes struct case.
++
++2004-03-15 Kelley Cook <kcook@gcc.gnu.org>
++
++	* configure.in: Rename file to ...
++	* configure.ac: ... this.
++	* fficonfig.h.in: Regenerate.
++	* Makefile.in: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2004-03-12  Matt Austern  <austern@apple.com>
++
++	* src/powerpc/darwin.S: Fix EH information so it corresponds to
++	changes in EH format resulting from addition of linkonce support.
++	* src/powerpc/darwin_closure.S: Likewise.
++
++2004-03-11  Andreas Tobler  <a.tobler@schweiz.ch>
++	    Paolo Bonzini  <bonzini@gnu.org>
++
++	* Makefile.am (AUTOMAKE_OPTIONS): Set them.
++	Remove VPATH. Remove rules for object files. Remove multilib support.
++	(AM_CCASFLAGS): Add.
++	* configure.in (AC_CONFIG_HEADERS): Relace AM_CONFIG_HEADER.
++	(AC_PREREQ): Bump version to 2.59.
++	(AC_INIT): Fill with version info and bug address.
++	(ORIGINAL_LD_FOR_MULTILIBS): Remove.
++	(AM_ENABLE_MULTILIB): Use this instead of AC_ARG_ENABLE.
++	De-precious CC so that the right flags are passed down to multilibs.
++	(AC_MSG_ERROR): Replace obsolete macro AC_ERROR.
++	(AC_CONFIG_FILES): Replace obsolete macro AC_LINK_FILES.
++	(AC_OUTPUT): Reorganize the output with AC_CONFIG_COMMANDS.
++	* configure: Rebuilt.
++	* aclocal.m4: Likewise.
++	* Makefile.in, include/Makefile.in, testsuite/Makefile.in: Likewise.
++	* fficonfig.h.in: Likewise.
++
++2004-03-11  Andreas Schwab  <schwab@suse.de>
++
++	* src/ia64/ffi.c (ffi_prep_incoming_args_UNIX): Get floating point
++	arguments from fp registers only for the first 8 parameter slots.
++	Don't convert a float parameter when passed in memory.
++
++2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
++
++	* configure: Regenerate for config/accross.m4 correction.
++
++2004-02-25  Matt Kraai  <kraai@alumni.cmu.edu>
++
++	* src/powerpc/ffi.c (ffi_prep_args_SYSV): Change
++	ecif->cif->bytes to bytes.
++	(ffi_prep_cif_machdep): Add braces around nested if statement.
++
++2004-02-09  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/types.c (pointer): POWERPC64 has 8 byte pointers.
++
++	* src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling.
++	(ffi_closure_helper_LINUX64): Fix typo.
++	* testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128
++	for powerpc64-*-*.
++	* testsuite/libffi.call/float.c: Likewise.
++	* testsuite/libffi.call/float2.c: Likewise.
++
++2004-02-08  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/powerpc/ffi.c (ffi_prep_cif_machdep <FFI_LINUX64>): Correct
++	long double function return and long double arg handling.
++	(ffi_closure_helper_LINUX64): Formatting.  Delete unused "ng" var.
++	Use "end_pfr" instead of "nf".  Correct long double handling.
++	Localise "temp".
++	* src/powerpc/linux64.S (ffi_call_LINUX64): Save f2 long double
++	return value.
++	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate
++	space for long double return value.  Adjust stack frame and offsets.
++	Load f2 long double return.
++
++2004-02-07  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/types.c: Use 16 byte long double for POWERPC64.
++
++2004-01-25  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* src/sparc/ffi.c (ffi_prep_args_v9): Shift the parameter array
++	when the structure return address is passed in %o0.
++	(ffi_V9_return_struct): Rename into ffi_v9_layout_struct.
++	(ffi_v9_layout_struct): Align the field following a nested structure
++	on a word boundary.  Use memmove instead of memcpy.
++	(ffi_call): Update call to ffi_V9_return_struct.
++	(ffi_prep_closure): Define 'ctx' only for V8.
++	(ffi_closure_sparc_inner): Clone into ffi_closure_sparc_inner_v8
++	and ffi_closure_sparc_inner_v9.
++	(ffi_closure_sparc_inner_v8): Return long doubles by reference.
++	Always skip the structure return address.  For structures and long
++	doubles, copy the argument directly.
++	(ffi_closure_sparc_inner_v9): Skip the structure return address only
++	if required.  Shift the maximum floating-point slot accordingly.  For
++	big structures, copy the argument directly; otherwise, left-justify the
++	argument and call ffi_v9_layout_struct to lay out the structure on
++	the stack.
++	* src/sparc/v8.S: Undef STACKFRAME before defining it.
++	(ffi_closure_v8): Pass the structure return address.  Update call to
++	ffi_closure_sparc_inner_v8.  Short-circuit FFI_TYPE_INT handling.
++	Skip the 'unimp' insn when returning long doubles and structures.
++	* src/sparc/v9.S: Undef STACKFRAME before defining it.
++	(ffi_closure_v9): Increase the frame size by 2 words.  Short-circuit
++	FFI_TYPE_INT handling.  Load structures both in integers and
++	floating-point registers on return.
++	* README: Update status of the SPARC port.
++
++2004-01-24  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/pyobjc-tc.c (main): Treat result value
++	as of type ffi_arg.
++	* testsuite/libffi.call/struct3.c (main): Fix CHECK.
++
++2004-01-22  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Treat result
++	value as of type ffi_arg, not unsigned int.
++
++2004-01-21  Michael Ritzert  <ritzert@t-online.de>
++
++	* ffi64.c (ffi_prep_args): Cast the RHS of an assignment instead
++	of the LHS.
++
++2004-01-12  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_32 for
++	Solaris.
++
++2004-01-08  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* testsuite/libffi.call/ffitest.h (allocate_mmap): Cast MAP_FAILED
++	to void *.
++
++2003-12-10  Richard Henderson  <rth@redhat.com>
++
++	* testsuite/libffi.call/cls_align_pointer.c: Cast pointers to
++	size_t instead of int.
++
++2003-12-04  Hosaka Yuji  <hos@tamanegi.org>
++
++	* testsuite/libffi.call/many_win32.c: Include <float.h>.
++	* testsuite/libffi.call/many_win32.c (main): Replace variable
++	int i with unsigned long ul.
++
++	* testsuite/libffi.call/cls_align_uint64.c: New test case.
++	* testsuite/libffi.call/cls_align_sint64.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint32.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint32.c: Likewise.
++	* testsuite/libffi.call/cls_align_uint16.c: Likewise.
++	* testsuite/libffi.call/cls_align_sint16.c: Likewise.
++	* testsuite/libffi.call/cls_align_float.c: Likewise.
++	* testsuite/libffi.call/cls_align_double.c: Likewise.
++	* testsuite/libffi.call/cls_align_longdouble.c: Likewise.
++	* testsuite/libffi.call/cls_align_pointer.c: Likewise.
++
++2003-12-02  Hosaka Yuji  <hos@tamanegi.org>
++
++	PR other/13221
++	* src/x86/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV):
++	Align arguments to 32 bits.
++
++2003-12-01  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	PR other/13221
++	* testsuite/libffi.call/cls_multi_sshort.c: New test case.
++	* testsuite/libffi.call/cls_multi_sshortchar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_schar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_ushortchar.c: Likewise.
++	* testsuite/libffi.call/cls_multi_ushort.c: Likewise.
++
++	* testsuite/libffi.special/unwindtest.cc: Cosmetics.
++
++2003-11-26  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* testsuite/libffi.call/ffitest.h: Include <fcntl.h>.
++	* testsuite/libffi.special/ffitestcxx.h: Likewise.
++
++2003-11-22  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* Makefile.in: Rebuilt.
++	* configure: Likewise.
++	* testsuite/libffi.special/unwindtest.cc: Convert the mmap to
++	the right type.
++
++2003-11-21  Andreas Jaeger  <aj@suse.de>
++	    Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* acinclude.m4: Add AC_FUNC_MMAP_BLACKLIST.
++	* configure.in: Call AC_FUNC_MMAP_BLACKLIST.
++	* Makefile.in: Rebuilt.
++	* aclocal.m4: Likewise.
++	* configure: Likewise.
++	* fficonfig.h.in: Likewise.
++	* testsuite/lib/libffi-dg.exp: Add include dir.
++	* testsuite/libffi.call/ffitest.h: Add MMAP definitions.
++	* testsuite/libffi.special/ffitestcxx.h: Likewise.
++	* testsuite/libffi.call/closure_fn0.c: Use MMAP functionality
++	for ffi_closure if available.
++	* testsuite/libffi.call/closure_fn1.c: Likewise.
++	* testsuite/libffi.call/closure_fn2.c: Likewise.
++	* testsuite/libffi.call/closure_fn3.c: Likewise.
++	* testsuite/libffi.call/closure_fn4.c: Likewise.
++	* testsuite/libffi.call/closure_fn5.c: Likewise.
++	* testsuite/libffi.call/cls_12byte.c: Likewise.
++	* testsuite/libffi.call/cls_16byte.c: Likewise.
++	* testsuite/libffi.call/cls_18byte.c: Likewise.
++	* testsuite/libffi.call/cls_19byte.c: Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte1.c: Likewise.
++	* testsuite/libffi.call/cls_24byte.c: Likewise.
++	* testsuite/libffi.call/cls_2byte.c: Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_3byte1.c: Likewise.
++	* testsuite/libffi.call/cls_3byte2.c: Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_4byte.c: Likewise.
++	* testsuite/libffi.call/cls_5byte.c: Likewise.
++	* testsuite/libffi.call/cls_64byte.c: Likewise.
++	* testsuite/libffi.call/cls_6byte.c: Likewise.
++	* testsuite/libffi.call/cls_7byte.c: Likewise.
++	* testsuite/libffi.call/cls_8byte.c: Likewise.
++	* testsuite/libffi.call/cls_9byte1.c: Likewise.
++	* testsuite/libffi.call/cls_9byte2.c: Likewise.
++	* testsuite/libffi.call/cls_double.c: Likewise.
++	* testsuite/libffi.call/cls_float.c: Likewise.
++	* testsuite/libffi.call/cls_schar.c: Likewise.
++	* testsuite/libffi.call/cls_sint.c: Likewise.
++	* testsuite/libffi.call/cls_sshort.c: Likewise.
++	* testsuite/libffi.call/cls_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_uint.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/cls_ushort.c: Likewise.
++	* testsuite/libffi.call/nested_struct.c: Likewise.
++	* testsuite/libffi.call/nested_struct1.c: Likewise.
++	* testsuite/libffi.call/nested_struct2.c: Likewise.
++	* testsuite/libffi.call/nested_struct3.c: Likewise.
++	* testsuite/libffi.call/problem1.c: Likewise.
++	* testsuite/libffi.special/unwindtest.cc: Likewise.
++
++2003-11-20  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/lib/libffi-dg.exp: Make the -lgcc_s conditional.
++
++2003-11-19  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/lib/libffi-dg.exp: Add DYLD_LIBRARY_PATH for darwin.
++	Add -lgcc_s to additional flags.
++
++2003-11-12  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* configure.in, include/Makefile.am: PR libgcj/11147, install
++	the ffitarget.h header file in a gcc versioned and target
++	dependent place.
++	* configure: Regenerated.
++	* Makefile.in, include/Makefile.in: Likewise.
++	* testsuite/Makefile.in: Likewise.
++
++2003-11-09  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/closure_fn0.c: Print result and check
++	with dg-output to make debugging easier.
++	* testsuite/libffi.call/closure_fn1.c: Likewise.
++	* testsuite/libffi.call/closure_fn2.c: Likewise.
++	* testsuite/libffi.call/closure_fn3.c: Likewise.
++	* testsuite/libffi.call/closure_fn4.c: Likewise.
++	* testsuite/libffi.call/closure_fn5.c: Likewise.
++	* testsuite/libffi.call/cls_12byte.c: Likewise.
++	* testsuite/libffi.call/cls_16byte.c: Likewise.
++	* testsuite/libffi.call/cls_18byte.c: Likewise.
++	* testsuite/libffi.call/cls_19byte.c: Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte1.c: Likewise.
++	* testsuite/libffi.call/cls_24byte.c: Likewise.
++	* testsuite/libffi.call/cls_2byte.c: Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_3byte1.c: Likewise.
++	* testsuite/libffi.call/cls_3byte2.c: Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_4byte.c: Likewise.
++	* testsuite/libffi.call/cls_5byte.c: Likewise.
++	* testsuite/libffi.call/cls_64byte.c: Likewise.
++	* testsuite/libffi.call/cls_6byte.c: Likewise.
++	* testsuite/libffi.call/cls_7byte.c: Likewise.
++	* testsuite/libffi.call/cls_8byte.c: Likewise.
++	* testsuite/libffi.call/cls_9byte1.c: Likewise.
++	* testsuite/libffi.call/cls_9byte2.c: Likewise.
++	* testsuite/libffi.call/cls_double.c: Likewise.
++	* testsuite/libffi.call/cls_float.c: Likewise.
++	* testsuite/libffi.call/cls_schar.c: Likewise.
++	* testsuite/libffi.call/cls_sint.c: Likewise.
++	* testsuite/libffi.call/cls_sshort.c: Likewise.
++	* testsuite/libffi.call/cls_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_uint.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/cls_ushort.c: Likewise.
++	* testsuite/libffi.call/problem1.c: Likewise.
++
++	* testsuite/libffi.special/unwindtest.cc: Make ffi_closure
++	static.
++
++2003-11-08  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/cls_9byte2.c: New test case.
++	* testsuite/libffi.call/cls_9byte1.c: Likewise.
++	* testsuite/libffi.call/cls_64byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte1.c: Likewise.
++	* testsuite/libffi.call/cls_19byte.c: Likewise.
++	* testsuite/libffi.call/cls_18byte.c: Likewise.
++	* testsuite/libffi.call/closure_fn4.c: Likewise.
++	* testsuite/libffi.call/closure_fn5.c: Likewise.
++	* testsuite/libffi.call/cls_schar.c: Likewise.
++	* testsuite/libffi.call/cls_sint.c: Likewise.
++	* testsuite/libffi.call/cls_sshort.c: Likewise.
++	* testsuite/libffi.call/nested_struct2.c: Likewise.
++	* testsuite/libffi.call/nested_struct3.c: Likewise.
++
++2003-11-08  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/cls_double.c: Do a check on the result.
++	* testsuite/libffi.call/cls_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_uint.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/cls_ushort.c: Likewise.
++	* testsuite/libffi.call/return_sc.c: Cleanup whitespaces.
++
++2003-11-06  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/prep_cif.c (ffi_prep_cif): Move the validity check after
++	the initialization.
++
++2003-10-23  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/java_raw_api.c (ffi_java_ptrarray_to_raw): Replace
++	FFI_ASSERT(FALSE) with FFI_ASSERT(0).
++
++2003-10-22  David Daney  <ddaney@avtrex.com>
++
++	* src/mips/ffitarget.h: Replace undefined UINT32 and friends with
++	__attribute__((__mode__(__SI__))) and friends.
++
++2003-10-22  Andreas Schwab  <schwab@suse.de>
++
++	* src/ia64/ffi.c: Replace FALSE/TRUE with false/true.
++
++2003-10-21  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* configure.in: AC_LINK_FILES(ffitarget.h).
++	* configure: Regenerate.
++	* Makefile.in: Likewise.
++	* include/Makefile.in: Likewise.
++	* testsuite/Makefile.in: Likewise.
++	* fficonfig.h.in: Likewise.
++
++2003-10-21  Paolo Bonzini  <bonzini@gnu.org>
++	    Richard Henderson  <rth@redhat.com>
++
++	Avoid that ffi.h includes fficonfig.h.
++
++	* Makefile.am (EXTRA_DIST): Include ffitarget.h files
++	(TARGET_SRC_MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX.
++	(TARGET_SRC_MIPS_SGI): Removed.
++	(MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX.
++	(MIPS_SGI): Removed.
++	(CLEANFILES): Removed.
++	(mostlyclean-am, clean-am, mostlyclean-sub, clean-sub): New
++	targets.
++	* acconfig.h: Removed.
++	* configure.in: Compute sizeofs only for double and long double.
++	Use them to define and subst HAVE_LONG_DOUBLE.  Include comments
++	into AC_DEFINE instead of using acconfig.h.  Create
++	include/ffitarget.h instead of include/fficonfig.h.  Rename
++	MIPS_GCC to MIPS_IRIX, drop MIPS_SGI since we are in gcc's tree.
++	AC_DEFINE EH_FRAME_FLAGS.
++	* include/Makefile.am (DISTCLEANFILES): New automake macro.
++	(hack_DATA): Add ffitarget.h.
++	* include/ffi.h.in: Remove all system specific definitions.
++	Declare raw API even if it is not installed, why bother?
++	Use limits.h instead of SIZEOF_* to define ffi_type_*.  Do
++	not define EH_FRAME_FLAGS, it is in fficonfig.h now.  Include
++	ffitarget.h instead of fficonfig.h.  Remove ALIGN macro.
++	(UINT_ARG, INT_ARG): Removed, use ffi_arg and ffi_sarg instead.
++	* include/ffi_common.h (bool): Do not define.
++	(ffi_assert): Accept failed assertion.
++	(ffi_type_test): Return void and accept file/line.
++	(FFI_ASSERT): Pass stringized failed assertion.
++	(FFI_ASSERT_AT): New macro.
++	(FFI_ASSERT_VALID_TYPE): New macro.
++	(UINT8, SINT8, UINT16, SINT16, UINT32, SINT32,
++	UINT64, SINT64): Define here with gcc's __attribute__ macro
++	instead of in ffi.h
++	(FLOAT32, ALIGN): Define here instead of in ffi.h
++	* include/ffi-mips.h: Removed.  Its content moved to
++	src/mips/ffitarget.h after separating assembly and C sections.
++	* src/alpha/ffi.c, src/alpha/ffi.c, src/java_raw_api.c
++	src/prep_cif.c, src/raw_api.c, src/ia64/ffi.c,
++	src/mips/ffi.c, src/mips/n32.S, src/mips/o32.S,
++	src/mips/ffitarget.h, src/sparc/ffi.c, src/x86/ffi64.c:
++	SIZEOF_ARG -> FFI_SIZEOF_ARG.
++	* src/ia64/ffi.c: Include stdbool.h (provided by GCC 2.95+).
++	* src/debug.c (ffi_assert): Accept stringized failed assertion.
++	(ffi_type_test): Rewritten.
++	* src/prep-cif.c (initialize_aggregate, ffi_prep_cif): Call
++	FFI_ASSERT_VALID_TYPE.
++	* src/alpha/ffitarget.h, src/arm/ffitarget.h,
++	src/ia64/ffitarget.h, src/m68k/ffitarget.h,
++	src/mips/ffitarget.h, src/powerpc/ffitarget.h,
++	src/s390/ffitarget.h, src/sh/ffitarget.h,
++	src/sh64/ffitarget.h, src/sparc/ffitarget.h,
++	src/x86/ffitarget.h: New files.
++	* src/alpha/osf.S, src/arm/sysv.S, src/ia64/unix.S,
++	src/m68k/sysv.S, src/mips/n32.S, src/mips/o32.S,
++	src/powerpc/aix.S, src/powerpc/darwin.S,
++	src/powerpc/ffi_darwin.c, src/powerpc/linux64.S,
++	src/powerpc/linux64_closure.S, src/powerpc/ppc_closure.S,
++	src/powerpc/sysv.S, src/s390/sysv.S, src/sh/sysv.S,
++	src/sh64/sysv.S, src/sparc/v8.S, src/sparc/v9.S,
++	src/x86/sysv.S, src/x86/unix64.S, src/x86/win32.S:
++	include fficonfig.h
++
++2003-10-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* src/mips/ffi.c: Use _ABIN32, _ABIO32 instead of external
++	_MIPS_SIM_NABI32, _MIPS_SIM_ABI32.
++
++2003-10-19  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Declare bytes again.
++	Used when FFI_DEBUG = 1.
++
++2003-10-14  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/types.c (double, longdouble): Default POWERPC64 to 8 byte size
++	and align.
++
++2003-10-06  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* include/ffi_mips.h: Define FFI_MIPS_N32 for N32/N64 ABIs,
++	FFI_MIPS_O32 for O32 ABI.
++
++2003-10-01  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_64 for
++	SPARC64. Cleanup whitespaces.
++
++2003-09-19  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* testsuite/libffi.call/closure_fn0.c: Xfail mips, arm,
++	strongarm, xscale. Cleanup whitespaces.
++	* testsuite/libffi.call/closure_fn1.c: Likewise.
++	* testsuite/libffi.call/closure_fn2.c: Likewise.
++	* testsuite/libffi.call/closure_fn3.c: Likewise.
++	* testsuite/libffi.call/cls_12byte.c: Likewise.
++	* testsuite/libffi.call/cls_16byte.c: Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte.c: Likewise.
++	* testsuite/libffi.call/cls_24byte.c: Likewise.
++	* testsuite/libffi.call/cls_2byte.c: Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_3byte1.c: Likewise.
++	* testsuite/libffi.call/cls_3byte2.c: Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_4byte.c: Likewise.
++	* testsuite/libffi.call/cls_5byte.c: Likewise.
++	* testsuite/libffi.call/cls_6byte.c: Likewise.
++	* testsuite/libffi.call/cls_7byte.c: Likewise.
++	* testsuite/libffi.call/cls_8byte.c: Likewise.
++	* testsuite/libffi.call/cls_double.c: Likewise.
++	* testsuite/libffi.call/cls_float.c: Likewise.
++	* testsuite/libffi.call/cls_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_uint.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/cls_ushort.c: Likewise.
++	* testsuite/libffi.call/nested_struct.c: Likewise.
++	* testsuite/libffi.call/nested_struct1.c: Likewise.
++	* testsuite/libffi.call/problem1.c: Likewise.
++	* testsuite/libffi.special/unwindtest.cc: Likewise.
++	* testsuite/libffi.call/pyobjc-tc.c: Cleanup whitespaces.
++
++2003-09-18  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/aix.S: Cleanup whitespaces.
++	* src/powerpc/aix_closure.S: Likewise.
++
++2003-09-18  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/darwin.S: Cleanup whitespaces, comment formatting.
++	* src/powerpc/darwin_closure.S: Likewise.
++	* src/powerpc/ffi_darwin.c: Likewise.
++
++2003-09-18  Andreas Tobler  <a.tobler@schweiz.ch>
++	    David Edelsohn  <edelsohn@gnu.org>
++
++	* src/types.c (double): Add AIX and Darwin to the right TYPEDEF.
++	* src/powerpc/aix_closure.S: Remove the pointer to the outgoing
++	parameter stack.
++	* src/powerpc/darwin_closure.S: Likewise.
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Handle structures
++	according to the Darwin/AIX ABI.
++	(ffi_prep_cif_machdep): Likewise.
++	(ffi_closure_helper_DARWIN): Likewise.
++	Remove the outgoing parameter stack logic. Simplify the evaluation
++	of the different CASE types.
++	(ffi_prep_clousure): Avoid the casts on lvalues. Change the branch
++	statement in the trampoline code.
++
++2003-09-18  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (ffi_prep_args): Take account into the alignement
++	for the register size.
++	(ffi_closure_helper_SYSV): Handle the structure return value
++	address correctly.
++	(ffi_closure_helper_SYSV): Return the appropriate type when
++	the registers are used for the structure return value.
++	* src/sh/sysv.S (ffi_closure_SYSV): Fix the stack layout for
++	the 64-bit return value.  Update copyright years.
++
++2003-09-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* testsuite/lib/libffi-dg.exp (libffi_target_compile): Search in
++	srcdir for ffi_mips.h.
++
++2003-09-12  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/prep_cif.c (initialize_aggregate): Include tail padding in
++	structure size.
++	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Correct
++	placement of float result.
++	* testsuite/libffi.special/unwindtest.cc (closure_test_fn1): Correct
++	cast of "resp" for big-endian 64 bit machines.
++
++2003-09-11  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/types.c (double, longdouble): Merge identical SH and ARM
++	typedefs, and add POWERPC64.
++	* src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for
++	struct split over gpr and rest.
++	(ffi_prep_cif_machdep): Correct intarg_count for structures.
++	* src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets.
++
++2003-09-09  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
++	passing correctly.
++
++2003-09-09  Alan Modra  <amodra@bigpond.net.au>
++
++	* configure: Regenerate.
++
++2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* Makefile.am: Remove build rules for ffitest.
++	* Makefile.in: Rebuilt.
++
++2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/java_raw_api.c: Include <stdlib.h> to fix compiler warning
++	about implicit declaration of abort().
++
++2003-09-04  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* Makefile.am: Add dejagnu test framework. Fixes PR other/11411.
++	* Makefile.in: Rebuilt.
++	* configure.in: Add dejagnu test framework.
++	* configure: Rebuilt.
++
++	* testsuite/Makefile.am: New file.
++	* testsuite/Makefile.in: Built
++	* testsuite/lib/libffi-dg.exp: New file.
++	* testsuite/config/default.exp: Likewise.
++	* testsuite/libffi.call/call.exp: Likewise.
++	* testsuite/libffi.call/ffitest.h: Likewise.
++	* testsuite/libffi.call/closure_fn0.c: Likewise.
++	* testsuite/libffi.call/closure_fn1.c: Likewise.
++	* testsuite/libffi.call/closure_fn2.c: Likewise.
++	* testsuite/libffi.call/closure_fn3.c: Likewise.
++	* testsuite/libffi.call/cls_1_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_3_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_4_1byte.c: Likewise.
++	* testsuite/libffi.call/cls_2byte.c: Likewise.
++	* testsuite/libffi.call/cls_3byte1.c: Likewise.
++	* testsuite/libffi.call/cls_3byte2.c: Likewise.
++	* testsuite/libffi.call/cls_4byte.c: Likewise.
++	* testsuite/libffi.call/cls_5byte.c: Likewise.
++	* testsuite/libffi.call/cls_6byte.c: Likewise.
++	* testsuite/libffi.call/cls_7byte.c: Likewise.
++	* testsuite/libffi.call/cls_8byte.c: Likewise.
++	* testsuite/libffi.call/cls_12byte.c: Likewise.
++	* testsuite/libffi.call/cls_16byte.c: Likewise.
++	* testsuite/libffi.call/cls_20byte.c: Likewise.
++	* testsuite/libffi.call/cls_24byte.c: Likewise.
++	* testsuite/libffi.call/cls_double.c: Likewise.
++	* testsuite/libffi.call/cls_float.c: Likewise.
++	* testsuite/libffi.call/cls_uchar.c: Likewise.
++	* testsuite/libffi.call/cls_uint.c: Likewise.
++	* testsuite/libffi.call/cls_ulonglong.c: Likewise.
++	* testsuite/libffi.call/cls_ushort.c: Likewise.
++	* testsuite/libffi.call/float.c: Likewise.
++	* testsuite/libffi.call/float1.c: Likewise.
++	* testsuite/libffi.call/float2.c: Likewise.
++	* testsuite/libffi.call/many.c: Likewise.
++	* testsuite/libffi.call/many_win32.c: Likewise.
++	* testsuite/libffi.call/nested_struct.c: Likewise.
++	* testsuite/libffi.call/nested_struct1.c: Likewise.
++	* testsuite/libffi.call/pyobjc-tc.c: Likewise.
++	* testsuite/libffi.call/problem1.c: Likewise.
++	* testsuite/libffi.call/promotion.c: Likewise.
++	* testsuite/libffi.call/return_ll.c: Likewise.
++	* testsuite/libffi.call/return_sc.c: Likewise.
++	* testsuite/libffi.call/return_uc.c: Likewise.
++	* testsuite/libffi.call/strlen.c: Likewise.
++	* testsuite/libffi.call/strlen_win32.c: Likewise.
++	* testsuite/libffi.call/struct1.c: Likewise.
++	* testsuite/libffi.call/struct2.c: Likewise.
++	* testsuite/libffi.call/struct3.c: Likewise.
++	* testsuite/libffi.call/struct4.c: Likewise.
++	* testsuite/libffi.call/struct5.c: Likewise.
++	* testsuite/libffi.call/struct6.c: Likewise.
++	* testsuite/libffi.call/struct7.c: Likewise.
++	* testsuite/libffi.call/struct8.c: Likewise.
++	* testsuite/libffi.call/struct9.c: Likewise.
++	* testsuite/libffi.special/special.exp: New file.
++	* testsuite/libffi.special/ffitestcxx.h: Likewise.
++	* testsuite/libffi.special/unwindtest.cc: Likewise.
++
++
++2003-08-13  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/ffi.c (OFS_INT16): Set 0 for little endian case.  Update
++	copyright years.
++
++2003-08-02  Alan Modra  <amodra@bigpond.net.au>
++
++	* src/powerpc/ffi.c (ffi_prep_args64): Modify for changed gcc
++	structure passing.
++	(ffi_closure_helper_LINUX64): Likewise.
++	* src/powerpc/linux64.S: Remove code writing to parm save area.
++	* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Use return
++	address in lr from ffi_closure_helper_LINUX64 call to calculate
++	table address.  Optimize function tail.
++
++2003-07-28  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/sparc/ffi.c: Handle all floating point registers.
++	* src/sparc/v9.S: Likewise. Fixes second part of PR target/11410.
++
++2003-07-11  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>
++
++	* README: Note that libffi is not part of GCC.  Update the project
++	URL and status.
++
++2003-06-19  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
++
++	* src/powerpc/ppc_closure.S: Include ffi.h.
++
++2003-06-13  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* src/x86/sysv.S: Avoid gas-only .uleb128/.sleb128 directives.
++	Use C style comments.
++
++2003-06-13  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
++
++	* Makefile.am: Add SHmedia support.  Fix a typo of SH support.
++	* Makefile.in: Regenerate.
++	* configure.in (sh64-*-linux*, sh5*-*-linux*): Add target.
++	* configure: Regenerate.
++	* include/ffi.h.in: Add SHmedia support.
++	* src/sh64/ffi.c: New file.
++	* src/sh64/sysv.S: New file.
++
++2003-05-16  Jakub Jelinek  <jakub@redhat.com>
++
++	* configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section
++	should be read-only.
++	* configure: Rebuilt.
++	* fficonfig.h.in: Rebuilt.
++	* include/ffi.h.in (EH_FRAME_FLAGS): Define.
++	* src/alpha/osf.S: Use EH_FRAME_FLAGS.
++	* src/powerpc/linux64.S: Likewise.
++	* src/powerpc/linux64_closure.S: Likewise.  Include ffi.h.
++	* src/powerpc/sysv.S: Use EH_FRAME_FLAGS.  Use pcrel encoding
++	if -fpic/-fPIC/-mrelocatable.
++	* src/powerpc/powerpc_closure.S: Likewise.
++	* src/sparc/v8.S: If HAVE_RO_EH_FRAME is defined, don't include
++	#write in .eh_frame flags.
++	* src/sparc/v9.S: Likewise.
++	* src/x86/unix64.S: Use EH_FRAME_FLAGS.
++	* src/x86/sysv.S: Likewise.  Use pcrel encoding if -fpic/-fPIC.
++	* src/s390/sysv.S: Use EH_FRAME_FLAGS.  Include ffi.h.
++
++2003-05-07  Jeff Sturm  <jsturm@one-point.com>
++
++	Fixes PR bootstrap/10656
++	* configure.in (HAVE_AS_REGISTER_PSEUDO_OP): Test assembler
++	support for .register pseudo-op.
++	* src/sparc/v8.S: Use it.
++	* fficonfig.h.in: Rebuilt.
++	* configure: Rebuilt.
++
++2003-04-18  Jakub Jelinek  <jakub@redhat.com>
++
++	* include/ffi.h.in (POWERPC64): Define if 64-bit.
++	(enum ffi_abi): Add FFI_LINUX64 on POWERPC.
++	Make it the default on POWERPC64.
++	(FFI_TRAMPOLINE_SIZE): Define to 24 on POWERPC64.
++	* configure.in: Change powerpc-*-linux* into powerpc*-*-linux*.
++	* configure: Rebuilt.
++	* src/powerpc/ffi.c (hidden): Define.
++	(ffi_prep_args_SYSV): Renamed from
++	ffi_prep_args.  Cast pointers to unsigned long to shut up warnings.
++	(NUM_GPR_ARG_REGISTERS64, NUM_FPR_ARG_REGISTERS64,
++	ASM_NEEDS_REGISTERS64): New.
++	(ffi_prep_args64): New function.
++	(ffi_prep_cif_machdep): Handle FFI_LINUX64 ABI.
++	(ffi_call): Likewise.
++	(ffi_prep_closure): Likewise.
++	(flush_icache): Surround by #ifndef POWERPC64.
++	(ffi_dblfl): New union type.
++	(ffi_closure_helper_SYSV): Use it to avoid aliasing problems.
++	(ffi_closure_helper_LINUX64): New function.
++	* src/powerpc/ppc_closure.S: Surround whole file by #ifndef
++	__powerpc64__.
++	* src/powerpc/sysv.S: Likewise.
++	(ffi_call_SYSV): Rename ffi_prep_args to ffi_prep_args_SYSV.
++	* src/powerpc/linux64.S: New file.
++	* src/powerpc/linux64_closure.S: New file.
++	* Makefile.am (EXTRA_DIST): Add src/powerpc/linux64.S and
++	src/powerpc/linux64_closure.S.
++	(TARGET_SRC_POWERPC): Likewise.
++
++	* src/ffitest.c (closure_test_fn, closure_test_fn1, closure_test_fn2,
++	closure_test_fn3): Fix result printing on big-endian 64-bit
++	machines.
++	(main): Print tst2_arg instead of uninitialized tst2_result.
++
++	* src/ffitest.c (main): Hide what closure pointer really points to
++	from the compiler.
++
++2003-04-16  Richard Earnshaw  <rearnsha@arm.com>
++
++	* configure.in (arm-*-netbsdelf*): Add configuration.
++	(configure): Regenerated.
++
++2003-04-04  Loren J. Rittle  <ljrittle@acm.org>
++
++	* include/Makefile.in: Regenerate.
++
++2003-03-21  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
++
++	* libffi/include/ffi.h.in: Define X86 instead of X86_64 in 32
++	bit mode.
++	* libffi/src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV):
++	Receive closure pointer through parameter, read args using
++	__builtin_dwarf_cfa.
++	(FFI_INIT_TRAMPOLINE): Send closure reference through eax.
++
++2003-03-12  Andreas Schwab  <schwab@suse.de>
++
++	* configure.in: Avoid trailing /. in toolexeclibdir.
++	* configure: Rebuilt.
++
++2003-03-03  Andreas Tobler <a.tobler@schweiz.ch>
++
++	* src/powerpc/darwin_closure.S: Recode to fit dynamic libraries.
++
++2003-02-06  Andreas Tobler <a.tobler@schweiz.ch>
++
++	* libffi/src/powerpc/darwin_closure.S:
++	Fix alignement bug, allocate 8 bytes for the result.
++	* libffi/src/powerpc/aix_closure.S:
++	Likewise.
++	* libffi/src/powerpc/ffi_darwin.c:
++	Update stackframe description for aix/darwin_closure.S.
++
++2003-02-06  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility
++	attribute.
++
++2003-01-31  Christian Cornelssen  <ccorn@cs.tu-berlin.de>,
++	    Andreas Schwab  <schwab@suse.de>
++
++	* configure.in: Adjust command to source config-ml.in to account
++	for changes to the libffi_basedir definition.
++	(libffi_basedir): Remove ${srcdir} from value and include trailing
++	slash if nonempty.
++
++	* configure: Regenerate.
++
++2003-01-29  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
++
++	* src/powerpc/ppc_closure.S: Recode to fit shared libs.
++
++2003-01-28  Andrew Haley  <aph@redhat.com>
++
++	* include/ffi.h.in: Enable FFI_CLOSURES for x86_64.
++	* src/x86/ffi64.c (ffi_prep_closure): New.
++	(ffi_closure_UNIX64_inner): New.
++	* src/x86/unix64.S (ffi_closure_UNIX64): New.
++
++2003-01-27  Alexandre Oliva  <aoliva@redhat.com>
++
++	* configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST.
++	Remove USE_LIBDIR conditional.
++	* Makefile.am (toolexecdir, toolexeclibdir): Don't override.
++	* Makefile.in, configure: Rebuilt.
++
++2003-01027  David Edelsohn  <edelsohn@gnu.org>
++
++	* Makefile.am (TARGET_SRC_POWERPC_AIX): Fix typo.
++	* Makefile.in: Regenerate.
++
++2003-01-22  Andrew Haley  <aph@redhat.com>
++
++	* src/powerpc/darwin.S (_ffi_call_AIX): Add Augmentation size to
++	unwind info.
++
++2003-01-21  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/darwin.S: Add unwind info.
++	* src/powerpc/darwin_closure.S: Likewise.
++
++2003-01-14  Andrew Haley  <aph@redhat.com>
++
++	* src/x86/ffi64.c (ffi_prep_args): Check for void retval.
++	(ffi_prep_cif_machdep): Likewise.
++	* src/x86/unix64.S: Add unwind info.
++
++2003-01-14  Andreas Jaeger  <aj@suse.de>
++
++	* src/ffitest.c (main): Only use ffi_closures if those are
++	supported.
++
++2003-01-13 Andreas Tobler <a.tobler@schweiz.ch>
++
++	* libffi/src/ffitest.c
++	 add closure testcases
++
++2003-01-13 Kevin B. Hendricks <khendricks@ivey.uwo.ca>
++
++	* libffi/src/powerpc/ffi.c
++	 fix alignment bug for float (4 byte aligned iso 8 byte)
++
++2003-01-09  Geoffrey Keating  <geoffk@apple.com>
++
++	* src/powerpc/ffi_darwin.c: Remove RCS version string.
++	* src/powerpc/darwin.S: Remove RCS version string.
++
++2003-01-03  Jeff Sturm  <jsturm@one-point.com>
++
++	* include/ffi.h.in: Add closure defines for SPARC, SPARC64.
++	* src/ffitest.c (main): Use static storage for closure.
++	* src/sparc/ffi.c (ffi_prep_closure, ffi_closure_sparc_inner): New.
++	* src/sparc/v8.S (ffi_closure_v8): New.
++	* src/sparc/v9.S (ffi_closure_v9): New.
++
++2002-11-10  Ranjit Mathew <rmathew@hotmail.com>
++
++	* include/ffi.h.in: Added FFI_STDCALL ffi_type
++	  enumeration for X86_WIN32.
++	* src/x86/win32.S: Added ffi_call_STDCALL function
++	  definition.
++	* src/x86/ffi.c (ffi_call/ffi_raw_call): Added
++	  switch cases for recognising FFI_STDCALL and
++	  calling ffi_call_STDCALL if target is X86_WIN32.
++	* src/ffitest.c (my_stdcall_strlen/stdcall_many):
++	  stdcall versions of the "my_strlen" and "many"
++	  test functions (for X86_WIN32).
++	  Added test cases to test stdcall invocation using
++	  these functions.
++
++2002-12-02  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* src/sh/sysv.S: Add DWARF2 unwind info.
++
++2002-11-27  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* src/s390/sysv.S (.eh_frame section): Make section read-only.
++
++2002-11-26  Jim Wilson  <wilson@redhat.com>
++
++	* src/types.c (FFI_TYPE_POINTER): Has size 8 on IA64.
++
++2002-11-23  H.J. Lu <hjl@gnu.org>
++
++	* acinclude.m4: Add dummy AM_PROG_LIBTOOL.
++	Include ../config/accross.m4.
++	* aclocal.m4; Rebuild.
++	* configure: Likewise.
++
++2002-11-15  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* src/s390/sysv.S (.eh_frame section): Adapt to pcrel FDE encoding.
++
++2002-11-11  DJ Delorie  <dj@redhat.com>
++
++	* configure.in: Look for common files in the right place.
++
++2002-10-08  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* src/java_raw_api.c (ffi_java_raw_to_ptrarray): Interpret
++	raw data as _Jv_word values, not ffi_raw.
++	(ffi_java_ptrarray_to_raw): Likewise.
++	(ffi_java_rvalue_to_raw): New function.
++	(ffi_java_raw_call): Call it.
++	(ffi_java_raw_to_rvalue): New function.
++	(ffi_java_translate_args): Call it.
++	* src/ffitest.c (closure_test_fn): Interpret return value
++	as ffi_arg, not int.
++	* src/s390/ffi.c (ffi_prep_cif_machdep): Add missing
++	FFI_TYPE_POINTER case.
++	(ffi_closure_helper_SYSV): Likewise.  Also, assume return
++	values extended to word size.
++
++2002-10-02  Andreas Jaeger  <aj@suse.de>
++
++	* src/x86/ffi64.c (ffi_prep_cif_machdep): Remove debug output.
++
++2002-10-01  Bo Thorsen  <bo@smetana.suse.de>
++
++	* include/ffi.h.in: Fix i386 win32 compilation.
++
++2002-09-30  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* configure.in: Add s390x-*-linux-* target.
++	* configure: Regenerate.
++	* include/ffi.h.in: Define S390X for s390x targets.
++	(FFI_CLOSURES): Define for s390/s390x.
++	(FFI_TRAMPOLINE_SIZE): Likewise.
++	(FFI_NATIVE_RAW_API): Likewise.
++	* src/prep_cif.c (ffi_prep_cif): Do not compute stack space for s390.
++	* src/types.c (FFI_TYPE_POINTER): Use 8-byte pointers on s390x.
++	* src/s390/ffi.c: Major rework of existing code.  Add support for
++	s390x targets.  Add closure support.
++	* src/s390/sysv.S: Likewise.
++
++2002-09-29  Richard Earnshaw  <rearnsha@arm.com>
++
++	* src/arm/sysv.S: Fix typo.
++
++2002-09-28  Richard Earnshaw  <rearnsha@arm.com>
++
++	* src/arm/sysv.S: If we don't have machine/asm.h and the pre-processor
++	has defined __USER_LABEL_PREFIX__, then use it in CNAME.
++	(ffi_call_SYSV): Handle soft-float.
++
++2002-09-27  Bo Thorsen  <bo@suse.de>
++
++	* include/ffi.h.in: Fix multilib x86-64 support.
++
++2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* Makefile.am (all-multi): Fix multilib parallel build.
++
++2002-07-19  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* configure.in (sh[34]*-*-linux*): Add brackets.
++	* configure: Regenerate.
++
++2002-07-18  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	* Makefile.am: Add SH support.
++	* Makefile.in: Regenerate.
++	* configure.in (sh-*-linux*, sh[34]*-*-linux*): Add target.
++	* configure: Regenerate.
++	* include/ffi.h.in: Add SH support.
++	* src/sh/ffi.c: New file.
++	* src/sh/sysv.S: New file.
++	* src/types.c: Add SH support.
++
++2002-07-16  Bo Thorsen  <bo@suse.de>
++
++	* src/x86/ffi64.c: New file that adds x86-64 support.
++	* src/x86/unix64.S: New file that handles argument setup for
++	x86-64.
++	* src/x86/sysv.S: Don't use this on x86-64.
++	* src/x86/ffi.c: Don't use this on x86-64.
++	Remove unused vars.
++	* src/prep_cif.c (ffi_prep_cif): Don't do stack size calculation
++	for x86-64.
++	* src/ffitest.c (struct6): New test that tests a special case in
++	the x86-64 ABI.
++	(struct7): Likewise.
++	(struct8): Likewise.
++	(struct9): Likewise.
++	(closure_test_fn): Silence warning about this when it's not used.
++	(main): Add the new tests.
++	(main): Fix a couple of wrong casts and silence some compiler warnings.
++	* include/ffi.h.in: Add x86-64 ABI definition.
++	* fficonfig.h.in: Regenerate.
++	* Makefile.am: Add x86-64 support.
++	* configure.in: Likewise.
++	* Makefile.in: Regenerate.
++	* configure: Likewise.
++
++2002-06-24  Bo Thorsen  <bo@suse.de>
++
++	* src/types.c: Merge settings for similar architectures.
++	Add x86-64 sizes and alignments.
++
++2002-06-23  Bo Thorsen  <bo@suse.de>
++
++	* src/arm/ffi.c (ffi_prep_args): Remove unused vars.
++	* src/sparc/ffi.c (ffi_prep_args_v8): Likewise.
++	* src/mips/ffi.c (ffi_prep_args): Likewise.
++	* src/m68k/ffi.c (ffi_prep_args): Likewise.
++
++2002-07-18  H.J. Lu  (hjl@gnu.org)
++
++	* Makefile.am (TARGET_SRC_MIPS_LINUX): New.
++	(libffi_la_SOURCES): Support MIPS_LINUX.
++	(libffi_convenience_la_SOURCES): Likewise.
++	* Makefile.in: Regenerated.
++
++	* configure.in (mips64*-*): Skip.
++	(mips*-*-linux*): New.
++	* configure: Regenerated.
++
++	* src/mips/ffi.c: Include <sgidefs.h>.
++
++2002-06-06  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* src/s390/sysv.S: Save/restore %r6.  Add DWARF-2 unwind info.
++
++2002-05-27  Roger Sayle  <roger@eyesopen.com>
++
++	* src/x86/ffi.c (ffi_prep_args): Remove reference to avn.
++
++2002-05-27  Bo Thorsen  <bo@suse.de>
++
++	* src/x86/ffi.c (ffi_prep_args): Remove unused variable and
++	fix formatting.
++
++2002-05-13  Andreas Tobler  <a.tobler@schweiz.ch>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_closure): Declare fd at
++	beginning of function (for older apple cc).
++
++2002-05-08  Alexandre Oliva  <aoliva@redhat.com>
++
++	* configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
++	script entry, and set LD to it when configuring multilibs.
++	* configure: Rebuilt.
++
++2002-05-05  Jason Thorpe  <thorpej@wasabisystems.com>
++
++	* configure.in (sparc64-*-netbsd*): Add target.
++	(sparc-*-netbsdelf*): Likewise.
++	* configure: Regenerate.
++
++2002-04-28  David S. Miller  <davem@redhat.com>
++
++	* configure.in, configure: Fix SPARC test in previous change.
++
++2002-04-29  Gerhard Tonn  <GerhardTonn@swol.de>
++
++	* Makefile.am: Add Linux for S/390 support.
++	* Makefile.in: Regenerate.
++	* configure.in: Add Linux for S/390 support.
++	* configure: Regenerate.
++	* include/ffi.h.in: Add Linux for S/390 support.
++	* src/s390/ffi.c: New file from libffi CVS tree.
++	* src/s390/sysv.S: New file from libffi CVS tree.
++
++2002-04-28  Jakub Jelinek  <jakub@redhat.com>
++
++	* configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working
++	%r_disp32().
++	* src/sparc/v8.S: Use it.
++	* src/sparc/v9.S: Likewise.
++	* fficonfig.h.in: Rebuilt.
++	* configure: Rebuilt.
++
++2002-04-08  Hans Boehm  <Hans_Boehm@hp.com>
++
++	* src/java_raw_api.c (ffi_java_raw_size): Handle FFI_TYPE_DOUBLE
++	correctly.
++	* src/ia64/unix.S: Add unwind information. Fix comments.
++	Save sp in a way that's compatible with unwind info.
++	(ffi_call_unix): Correctly restore sp in all cases.
++	* src/ia64/ffi.c: Add, fix comments.
++
++2002-04-08  Jakub Jelinek  <jakub@redhat.com>
++
++	* src/sparc/v8.S: Make .eh_frame dependent on target word size.
++
++2002-04-06  Jason Thorpe  <thorpej@wasabisystems.com>
++
++	* configure.in (alpha*-*-netbsd*): Add target.
++	* configure: Regenerate.
++
++2002-04-04  Jeff Sturm  <jsturm@one-point.com>
++
++	* src/sparc/v8.S: Add unwind info.
++	* src/sparc/v9.S: Likewise.
++
++2002-03-30  Krister Walfridsson  <cato@df.lth.se>
++
++	* configure.in: Enable i*86-*-netbsdelf*.
++	* configure: Rebuilt.
++
++2002-03-29  David Billinghurst <David.Billinghurst@riotinto.com>
++
++	PR other/2620
++	* src/mips/n32.s: Delete
++	* src/mips/o32.s: Delete
++
++2002-03-21  Loren J. Rittle  <ljrittle@acm.org>
++
++	* configure.in: Enable alpha*-*-freebsd*.
++	* configure: Rebuilt.
++
++2002-03-17  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
++
++	* Makefile.am: libfficonvenience -> libffi_convenience.
++	* Makefile.in: Rebuilt.
++
++	* Makefile.am: Define ffitest_OBJECTS.
++	* Makefile.in: Rebuilt.
++
++2002-03-07  Andreas Tobler  <toa@pop.agri.ch>
++	    David Edelsohn  <edelsohn@gnu.org>
++
++	* Makefile.am (EXTRA_DIST): Add Darwin and AIX closure files.
++	(TARGET_SRC_POWERPC_AIX): Add aix_closure.S.
++	(TARGET_SRC_POWERPC_DARWIN): Add darwin_closure.S.
++	* Makefile.in: Regenerate.
++	* include/ffi.h.in: Add AIX and Darwin closure definitions.
++	* src/powerpc/ffi_darwin.c (ffi_prep_closure): New function.
++	(flush_icache, flush_range): New functions.
++	(ffi_closure_helper_DARWIN): New function.
++	* src/powerpc/aix_closure.S: New file.
++	* src/powerpc/darwin_closure.S: New file.
++
++2002-02-24  Jeff Sturm  <jsturm@one-point.com>
++
++	* include/ffi.h.in: Add typedef for ffi_arg.
++	* src/ffitest.c (main): Declare rint with ffi_arg.
++
++2002-02-21  Andreas Tobler  <toa@pop.agri.ch>
++
++	* src/powerpc/ffi_darwin.c (ffi_prep_args): Skip appropriate
++	number of GPRs for floating-point arguments.
++
++2002-01-31  Anthony Green  <green@redhat.com>
++
++	* configure: Rebuilt.
++	* configure.in: Replace CHECK_SIZEOF and endian tests with
++	cross-compiler friendly macros.
++	* aclocal.m4 (AC_COMPILE_CHECK_SIZEOF, AC_C_BIGENDIAN_CROSS): New
++	macros.
++
++2002-01-18  David Edelsohn  <edelsohn@gnu.org>
++
++	* src/powerpc/darwin.S (_ffi_call_AIX): New.
++	* src/powerpc/aix.S (ffi_call_DARWIN): New.
++
++2002-01-17  David Edelsohn  <edelsohn@gnu.org>
++
++	* Makefile.am (EXTRA_DIST): Add Darwin and AIX files.
++	(TARGET_SRC_POWERPC_AIX): New.
++	(POWERPC_AIX): New stanza.
++	* Makefile.in: Regenerate.
++	* configure.in: Add AIX case.
++	* configure: Regenerate.
++	* include/ffi.h.in (ffi_abi): Add FFI_AIX.
++	* src/powerpc/ffi_darwin.c (ffi_status): Use "long" to scale frame
++	size.  Fix "long double" support.
++	(ffi_call): Add FFI_AIX case.
++	* src/powerpc/aix.S: New.
++
++2001-10-09  John Hornkvist  <john@toastedmarshmallow.com>
++
++	Implement Darwin PowerPC ABI.
++	* configure.in: Handle powerpc-*-darwin*.
++	* Makefile.am: Set source files for POWERPC_DARWIN.
++	* configure: Rebuilt.
++	* Makefile.in: Rebuilt.
++	* include/ffi.h.in: Define FFI_DARWIN and FFI_DEFAULT_ABI for
++	POWERPC_DARWIN.
++	* src/powerpc/darwin.S: New file.
++	* src/powerpc/ffi_darwin.c: New file.
++
++2001-10-07  Joseph S. Myers  <jsm28@cam.ac.uk>
++
++	* src/x86/ffi.c: Fix spelling error of "separate" as "seperate".
++
++2001-07-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* src/x86/sysv.S: Avoid gas-only .balign directive.
++	Use C style comments.
++
++2001-07-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* src/alpha/ffi.c (ffi_prep_closure): Avoid gas-only mnemonic.
++	Fixes PR bootstrap/3563.
++
++2001-06-26  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* src/alpha/osf.S (ffi_closure_osf): Use .rdata for ECOFF.
++
++2001-06-25  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	* configure.in: Recognize sparc*-sun-* host.
++	* configure: Regenerate.
++
++2001-06-06  Andrew Haley  <aph@redhat.com>
++
++	* src/alpha/osf.S (__FRAME_BEGIN__): Conditionalize for ELF.
++
++2001-06-03  Andrew Haley  <aph@redhat.com>
++
++	* src/alpha/osf.S: Add unwind info.
++	* src/powerpc/sysv.S: Add unwind info.
++	* src/powerpc/ppc_closure.S: Likewise.
++
++2000-05-31  Jeff Sturm  <jsturm@one-point.com>
++
++	* configure.in: Fix AC_ARG_ENABLE usage.
++	* configure: Rebuilt.
++
++2001-05-06  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
++
++	* configure.in: Remove warning about beta code.
++	* configure: Rebuilt.
++
++2001-04-25  Hans Boehm <Hans_Boehm@hp.com>
++
++	* src/ia64/unix.S: Restore stack pointer when returning from
++	ffi_closure_UNIX.
++	* src/ia64/ffi.c: Fix typo in comment.
++
++2001-04-18  Jim Wilson  <wilson@redhat.com>
++
++	* src/ia64/unix.S: Delete unnecessary increment and decrement of loc2
++	to eliminate RAW DV.
++
++2001-04-12  Bryce McKinlay  <bryce@albatross.co.nz>
++
++	* Makefile.am: Make a libtool convenience library.
++	* Makefile.in: Rebuilt.
++
++2001-03-29  Bryce McKinlay  <bryce@albatross.co.nz>
++
++	* configure.in: Use different syntax for subdirectory creation.
++	* configure: Rebuilt.
++
++2001-03-27  Jon Beniston  <jon@beniston.com>
++
++	* configure.in: Added X86_WIN32 target (Win32, CygWin, MingW).
++	* configure: Rebuilt.
++	* Makefile.am: Added X86_WIN32 target support.
++	* Makefile.in: Rebuilt.
++
++	* include/ffi.h.in: Added X86_WIN32 target support.
++
++	* src/ffitest.c: Doesn't run structure tests for X86_WIN32 targets.
++	* src/types.c: Added X86_WIN32 target support.
++
++	* src/x86/win32.S: New file. Based on sysv.S, but with EH
++	stuff removed and made to work with CygWin's gas.
++
++2001-03-26  Bryce McKinlay  <bryce@albatross.co.nz>
++
++	* configure.in: Make target subdirectory in build dir.
++	* Makefile.am: Override suffix based rules to specify correct output
++	subdirectory.
++	* Makefile.in: Rebuilt.
++	* configure: Rebuilt.
++
++2001-03-23  Kevin B Hendricks  <khendricks@ivey.uwo.ca>
++
++	* src/powerpc/ppc_closure.S: New file.
++	* src/powerpc/ffi.c (ffi_prep_args): Fixed ABI compatibility bug
++	involving long long and register pairs.
++	(ffi_prep_closure): New function.
++	(flush_icache): Likewise.
++	(ffi_closure_helper_SYSV): Likewise.
++	* include/ffi.h.in (FFI_CLOSURES): Define on PPC.
++	(FFI_TRAMPOLINE_SIZE): Likewise.
++	(FFI_NATIVE_RAW_API): Likewise.
++	* Makefile.in: Rebuilt.
++	* Makefile.am (EXTRA_DIST): Added src/powerpc/ppc_closure.S.
++	(TARGET_SRC_POWERPC): Likewise.
++
++2001-03-19  Tom Tromey  <tromey@redhat.com>
++
++	* Makefile.in: Rebuilt.
++	* Makefile.am (ffitest_LDFLAGS): New macro.
++
++2001-03-02  Nick Clifton  <nickc@redhat.com>
++
++	* include/ffi.h.in: Remove RCS ident string.
++	* include/ffi_mips.h: Remove RCS ident string.
++	* src/debug.c: Remove RCS ident string.
++	* src/ffitest.c: Remove RCS ident string.
++	* src/prep_cif.c: Remove RCS ident string.
++	* src/types.c: Remove RCS ident string.
++	* src/alpha/ffi.c: Remove RCS ident string.
++	* src/alpha/osf.S: Remove RCS ident string.
++	* src/arm/ffi.c: Remove RCS ident string.
++	* src/arm/sysv.S: Remove RCS ident string.
++	* src/mips/ffi.c: Remove RCS ident string.
++	* src/mips/n32.S: Remove RCS ident string.
++	* src/mips/o32.S: Remove RCS ident string.
++	* src/sparc/ffi.c: Remove RCS ident string.
++	* src/sparc/v8.S: Remove RCS ident string.
++	* src/sparc/v9.S: Remove RCS ident string.
++	* src/x86/ffi.c: Remove RCS ident string.
++	* src/x86/sysv.S: Remove RCS ident string.
++
++2001-02-08  Joseph S. Myers  <jsm28@cam.ac.uk>
++
++	* include/ffi.h.in: Change sourceware.cygnus.com references to
++	gcc.gnu.org.
++
++2000-12-09  Richard Henderson  <rth@redhat.com>
++
++	* src/alpha/ffi.c (ffi_call): Simplify struct return test.
++	(ffi_closure_osf_inner): Index rather than increment avalue
++	and arg_types.  Give ffi_closure_osf the raw return value type.
++	* src/alpha/osf.S (ffi_closure_osf): Handle return value type
++	promotion.
++
++2000-12-07  Richard Henderson  <rth@redhat.com>
++
++	* src/raw_api.c (ffi_translate_args): Fix typo.
++	(ffi_prep_closure): Likewise.
++
++	* include/ffi.h.in [ALPHA]: Define FFI_CLOSURES and
++	FFI_TRAMPOLINE_SIZE.
++	* src/alpha/ffi.c (ffi_prep_cif_machdep): Adjust minimal
++	cif->bytes for new ffi_call_osf implementation.
++	(ffi_prep_args): Absorb into ...
++	(ffi_call): ... here.  Do all stack allocation here and
++	avoid a callback function.
++	(ffi_prep_closure, ffi_closure_osf_inner): New.
++	* src/alpha/osf.S (ffi_call_osf): Reimplement with no callback.
++	(ffi_closure_osf): New.
++
++2000-09-10  Alexandre Oliva  <aoliva@redhat.com>
++
++	* config.guess, config.sub, install-sh: Removed.
++	* ltconfig, ltmain.sh, missing, mkinstalldirs: Likewise.
++	* Makefile.in: Rebuilt.
++
++	* acinclude.m4: Include libtool macros from the top level.
++	* aclocal.m4, configure: Rebuilt.
++
++2000-08-22  Alexandre Oliva  <aoliva@redhat.com>
++
++	* configure.in [i*86-*-freebsd*] (TARGET, TARGETDIR): Set.
++	* configure: Rebuilt.
++
++2000-05-11  Scott Bambrough  <scottb@netwinder.org>
++
++	* libffi/src/arm/sysv.S (ffi_call_SYSV): Doubles are not saved to
++	memory correctly.  Use conditional instructions, not branches where
++	possible.
++
++2000-05-04  Tom Tromey  <tromey@cygnus.com>
++
++	* configure: Rebuilt.
++	* configure.in: Match `arm*-*-linux-*'.
++	From Chris Dornan <cdornan@arm.com>.
++
++2000-04-28  Jakub Jelinek  <jakub@redhat.com>
++
++	* Makefile.am (SUBDIRS): Define.
++	(AM_MAKEFLAGS): Likewise.
++	(Multilib support.): Add section.
++	* Makefile.in: Rebuilt.
++	* ltconfig (extra_compiler_flags, extra_compiler_flags_value):
++	New variables. Set for gcc using -print-multi-lib. Export them
++	to libtool.
++	(sparc64-*-linux-gnu*): Use libsuff 64 for search paths.
++	* ltmain.sh (B|b|V): Don't throw away gcc's -B, -b and -V options
++	for -shared links.
++	(extra_compiler_flags_value, extra_compiler_flags): Check these
++	for extra compiler options which need to be passed down in
++	compiler_flags.
++
++2000-04-16  Anthony Green  <green@redhat.com>
++
++	* configure: Rebuilt.
++	* configure.in: Change i*86-pc-linux* to i*86-*-linux*.
++
++2000-04-14  Jakub Jelinek  <jakub@redhat.com>
++
++	* include/ffi.h.in (SPARC64): Define for 64bit SPARC builds.
++	Set SPARC FFI_DEFAULT_ABI based on SPARC64 define.
++	* src/sparc/ffi.c (ffi_prep_args_v8): Renamed from ffi_prep_args.
++	Replace all void * sizeofs with sizeof(int).
++	Only compare type with FFI_TYPE_LONGDOUBLE if LONGDOUBLE is
++	different than DOUBLE.
++	Remove FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases (handled elsewhere).
++	(ffi_prep_args_v9): New function.
++	(ffi_prep_cif_machdep): Handle V9 ABI and long long on V8.
++	(ffi_V9_return_struct): New function.
++	(ffi_call): Handle FFI_V9 ABI from 64bit code and FFI_V8 ABI from
++	32bit code (not yet cross-arch calls).
++	* src/sparc/v8.S: Add struct return delay nop.
++	Handle long long.
++	* src/sparc/v9.S: New file.
++	* src/prep_cif.c (ffi_prep_cif): Return structure pointer
++	is used on sparc64 only for structures larger than 32 bytes.
++	Pass by reference for structures is done for structure arguments
++	larger than 16 bytes.
++	* src/ffitest.c (main): Use 64bit rint on sparc64.
++	Run long long tests on sparc.
++	* src/types.c (FFI_TYPE_POINTER): Pointer is 64bit on alpha and
++	sparc64.
++	(FFI_TYPE_LONGDOUBLE): long double is 128 bit aligned to 128 bits
++	on sparc64.
++	* configure.in (sparc-*-linux*): New supported target.
++	(sparc64-*-linux*): Likewise.
++	* configure: Rebuilt.
++	* Makefile.am: Add v9.S to SPARC files.
++	* Makefile.in: Likewise.
++	(LINK): Surround $(CCLD) into double quotes, so that multilib
++	compiles work correctly.
++
++2000-04-04  Alexandre Petit-Bianco  <apbianco@cygnus.com>
++
++	* configure: Rebuilt.
++	* configure.in: (i*86-*-solaris*): New libffi target. Patch
++	proposed by Bryce McKinlay.
++
++2000-03-20  Tom Tromey  <tromey@cygnus.com>
++
++	* Makefile.in: Hand edit for java_raw_api.lo.
++
++2000-03-08  Bryce McKinlay  <bryce@albatross.co.nz>
++
++	* config.guess, config.sub: Update from the gcc tree.
++	Fix for PR libgcj/168.
++
++2000-03-03  Tom Tromey  <tromey@cygnus.com>
++
++	* Makefile.in: Fixed ia64 by hand.
++
++	* configure: Rebuilt.
++	* configure.in (--enable-multilib): New option.
++	(libffi_basedir): New subst.
++	(AC_OUTPUT): Added multilib code.
++
++2000-03-02  Tom Tromey  <tromey@cygnus.com>
++
++	* Makefile.in: Rebuilt.
++	* Makefile.am (TARGET_SRC_IA64): Use `ia64', not `alpha', as
++	directory name.
++
++2000-02-25  Hans Boehm <boehm@acm.org>
++
++	* src/ia64/ffi.c, src/ia64/ia64_flags.h, src/ia64/unix.S: New
++	files.
++	* src/raw_api.c (ffi_translate_args): Fixed typo in argument
++	list.
++	(ffi_prep_raw_closure): Use ffi_translate_args, not
++	ffi_closure_translate.
++	* src/java_raw_api.c: New file.
++	* src/ffitest.c (closure_test_fn): New function.
++	(main): Define `rint' as long long on IA64.  Added new test when
++	FFI_CLOSURES is defined.
++	* include/ffi.h.in (ALIGN): Use size_t, not unsigned.
++	(ffi_abi): Recognize IA64.
++	(ffi_raw): Added `flt' field.
++	Added "Java raw API" code.
++	* configure.in: Recognize ia64.
++	* Makefile.am (TARGET_SRC_IA64): New macro.
++	(libffi_la_common_SOURCES): Added java_raw_api.c.
++	(libffi_la_SOURCES): Define in IA64 case.
++
++2000-01-04  Tom Tromey  <tromey@cygnus.com>
++
++	* Makefile.in: Rebuilt with newer automake.
++
++1999-12-31  Tom Tromey  <tromey@cygnus.com>
++
++	* Makefile.am (INCLUDES): Added -I$(top_srcdir)/src.
++
++1999-09-01  Tom Tromey  <tromey@cygnus.com>
++
++	* include/ffi.h.in: Removed PACKAGE and VERSION defines and
++	undefs.
++	* fficonfig.h.in: Rebuilt.
++	* configure: Rebuilt.
++	* configure.in: Pass 3rd argument to AM_INIT_AUTOMAKE.
++	Use AM_PROG_LIBTOOL (automake 1.4 compatibility).
++	* acconfig.h: Don't #undef PACKAGE or VERSION.
++
++1999-08-09  Anthony Green  <green@cygnus.com>
++
++	* include/ffi.h.in: Try to work around messy header problem
++	with PACKAGE and VERSION.
++
++	* configure: Rebuilt.
++	* configure.in: Change version to 2.00-beta.
++
++	* fficonfig.h.in: Rebuilt.
++	* acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define.
++
++	* src/x86/ffi.c (ffi_raw_call): Rename.
++
++1999-08-02  Kresten Krab Thorup  <krab@dominiq.is.s.u-tokyo.ac.jp>
++
++	* src/x86/ffi.c (ffi_closure_SYSV): New function.
++	(ffi_prep_incoming_args_SYSV): Ditto.
++	(ffi_prep_closure): Ditto.
++	(ffi_closure_raw_SYSV): Ditto.
++	(ffi_prep_raw_closure): More ditto.
++	(ffi_call_raw): Final ditto.
++
++	* include/ffi.h.in: Add definitions for closure and raw API.
++
++	* src/x86/ffi.c (ffi_prep_cif_machdep): Added case for
++	FFI_TYPE_UINT64.
++
++	* Makefile.am (libffi_la_common_SOURCES): Added raw_api.c
++
++	* src/raw_api.c: New file.
++
++	* include/ffi.h.in (ffi_raw): New type.
++	(UINT_ARG, SINT_ARG): New defines.
++	(ffi_closure, ffi_raw_closure): New types.
++	(ffi_prep_closure, ffi_prep_raw_closure): New declarations.
++
++	* configure.in: Add check for endianness and sizeof void*.
++
++	* src/x86/sysv.S (ffi_call_SYSV): Call fixup routine via argument,
++	instead of directly.
++
++	* configure: Rebuilt.
++
++Thu Jul  8 14:28:42 1999  Anthony Green  <green@cygnus.com>
++
++	* configure.in: Add x86 and powerpc BeOS configurations.
++	From Makoto Kato <m_kato@ga2.so-net.ne.jp>.
++
++1999-05-09  Anthony Green  <green@cygnus.com>
++
++	* configure.in: Add warning about this being beta code.
++	Remove src/Makefile.am from the picture.
++	* configure: Rebuilt.
++
++	* Makefile.am: Move logic from src/Makefile.am.  Add changes
++	to support libffi as a target library.
++	* Makefile.in: Rebuilt.
++
++	* aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh:
++	Upgraded to new autoconf, automake, libtool.
++
++	* README: Tweaks.
++
++	* LICENSE: Update copyright date.
++
++	* src/Makefile.am, src/Makefile.in: Removed.
++
++1998-11-29  Anthony Green  <green@cygnus.com>
++
++	* include/ChangeLog: Removed.
++	* src/ChangeLog: Removed.
++	* src/mips/ChangeLog: Removed.
++	* src/sparc/ChangeLog: Remboved.
++	* src/x86/ChangeLog: Removed.
++
++	* ChangeLog.v1: Created.
+diff --git a/js/src/ctypes/libffi/ChangeLog.v1 b/js/src/ctypes/libffi/ChangeLog.v1
+--- a/js/src/ctypes/libffi/ChangeLog.v1
++++ b/js/src/ctypes/libffi/ChangeLog.v1
+@@ -1,13 +1,13 @@
+ The libffi version 1 ChangeLog archive.
+ 
+ Version 1 of libffi had per-directory ChangeLogs.  Current and future
+ versions have a single ChangeLog file in the root directory.  The
+-version 1 ChangeLogs have all been concatonated into this file for
++version 1 ChangeLogs have all been concatenated into this file for
+ future reference only.
+ 
+ --- libffi ----------------------------------------------------------------
+ 
+ Mon Oct  5 02:17:50 1998  Anthony Green  <green@cygnus.com>
+ 
+ 	* configure.in: Boosted rev.
+ 	* configure, Makefile.in, aclocal.m4: Rebuilt.
+diff --git a/js/src/ctypes/libffi/LICENSE b/js/src/ctypes/libffi/LICENSE
+--- a/js/src/ctypes/libffi/LICENSE
++++ b/js/src/ctypes/libffi/LICENSE
+@@ -1,21 +1,21 @@
+-libffi - Copyright (c) 1996-2009  Anthony Green, Red Hat, Inc and others.  
++libffi - Copyright (c) 1996-2014  Anthony Green, Red Hat, Inc and others.
+ See source files for details.
+ 
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ 
+-The above copyright notice and this permission notice shall be included
+-in all copies or substantial portions of the Software.
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
+ 
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+diff --git a/js/src/ctypes/libffi/Makefile.am b/js/src/ctypes/libffi/Makefile.am
+--- a/js/src/ctypes/libffi/Makefile.am
++++ b/js/src/ctypes/libffi/Makefile.am
+@@ -1,165 +1,212 @@
+ ## Process this with automake to create Makefile.in
+ 
+ AUTOMAKE_OPTIONS = foreign subdir-objects
+ 
++ACLOCAL_AMFLAGS = -I m4
++
+ SUBDIRS = include testsuite man
+ 
+-EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \
+-	src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
+-	src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \
+-	src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \
+-	src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \
+-	src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \
+-	src/ia64/unix.S \
+-	src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
+-	src/mips/ffitarget.h \
+-	src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
+-	src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
+-	src/powerpc/ffi.c src/powerpc/sysv.S \
+-	src/powerpc/linux64.S src/powerpc/linux64_closure.S \
+-	src/powerpc/ppc_closure.S src/powerpc/asm.h \
+-	src/powerpc/aix.S src/powerpc/darwin.S \
+-	src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \
+-	src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \
+-	src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \
+-	src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h \
+-	src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \
+-	src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
+-	src/sparc/ffi.c src/x86/darwin64.S \
+-	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \
+-	src/x86/darwin.S src/x86/freebsd.S \
+-	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
+-	src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
+-	src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \
+-	libtool-version ChangeLog.libffi m4/libtool.m4 \
+-	m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4
++EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj			\
++	 src/aarch64/ffi.c src/aarch64/ffitarget.h src/aarch64/sysv.S	\
++	 src/alpha/ffi.c src/alpha/osf.S			\
++	 src/alpha/ffitarget.h src/arc/ffi.c src/arc/arcompact.S	\
++	 src/arc/ffitarget.h src/arm/ffi.c src/arm/sysv.S		\
++	 src/arm/ffitarget.h src/avr32/ffi.c src/avr32/sysv.S		\
++	 src/avr32/ffitarget.h src/cris/ffi.c src/cris/sysv.S		\
++	 src/cris/ffitarget.h src/ia64/ffi.c src/ia64/ffitarget.h	\
++	 src/ia64/ia64_flags.h src/ia64/unix.S src/mips/ffi.c		\
++	 src/mips/n32.S src/mips/o32.S src/metag/ffi.c			\
++	 src/metag/ffitarget.h src/metag/sysv.S src/moxie/ffi.c		\
++	 src/moxie/ffitarget.h src/moxie/eabi.S src/mips/ffitarget.h	\
++	 src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h		\
++	 src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h		\
++	 src/m88k/ffi.c src/m88k/obsd.S src/m88k/ffitarget.h		\
++	 src/microblaze/ffi.c src/microblaze/sysv.S			\
++	 src/microblaze/ffitarget.h					\
++	 src/nios2/ffi.c src/nios2/ffitarget.h src/nios2/sysv.S		\
++	 src/powerpc/ffi.c src/powerpc/ffi_powerpc.h			\
++	 src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c		\
++	 src/powerpc/sysv.S src/powerpc/linux64.S			\
++	 src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S	\
++	 src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S	\
++	 src/powerpc/aix_closure.S src/powerpc/darwin_closure.S		\
++	 src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h		\
++	 src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h		\
++	 src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h src/sh64/ffi.c	\
++	 src/sh64/sysv.S src/sh64/ffitarget.h src/sparc/v8.S		\
++	 src/sparc/v9.S src/sparc/ffitarget.h src/sparc/ffi.c		\
++	 src/x86/darwin64.S src/x86/ffi.c src/x86/sysv.S		\
++	 src/x86/win32.S src/x86/darwin.S src/x86/win64.S		\
++	 src/x86/freebsd.S src/x86/ffi64.c src/x86/unix64.S		\
++	 src/x86/ffitarget.h src/pa/ffitarget.h src/pa/ffi.c		\
++	 src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c src/bfin/ffi.c	\
++	 src/bfin/ffitarget.h src/bfin/sysv.S src/frv/eabi.S		\
++	 src/frv/ffitarget.h src/dlmalloc.c src/tile/ffi.c		\
++	 src/tile/ffitarget.h src/tile/tile.S libtool-version		\
++	 src/vax/ffi.c src/vax/ffitarget.h src/vax/elfbsd.S		\
++	 src/xtensa/ffitarget.h src/xtensa/ffi.c src/xtensa/sysv.S	\
++	 ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4		\
++	 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4			\
++	 m4/ltversion.m4 src/arm/gentramp.sh src/debug.c msvcc.sh	\
++	 generate-darwin-source-and-headers.py				\
++	 libffi.xcodeproj/project.pbxproj src/arm/trampoline.S		\
++	 libtool-ldflags ChangeLog.libffi-3.1
+ 
+ info_TEXINFOS = doc/libffi.texi
+ 
+ ## ################################################################
+ 
+ ##
+ ## This section is for make and multilib madness.
+ ##
+ 
+ # Work around what appears to be a GNU make bug handling MAKEFLAGS
+ # values defined in terms of make variables, as is the case for CC and
+ # friends when we are called from the top level Makefile.
+ AM_MAKEFLAGS = \
+-	"AR_FLAGS=$(AR_FLAGS)" \
+-	"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
+-	"CFLAGS=$(CFLAGS)" \
+-	"CXXFLAGS=$(CXXFLAGS)" \
+-	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
+-	"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
+-	"INSTALL=$(INSTALL)" \
+-	"INSTALL_DATA=$(INSTALL_DATA)" \
+-	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+-	"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
+-	"JC1FLAGS=$(JC1FLAGS)" \
+-	"LDFLAGS=$(LDFLAGS)" \
+-	"LIBCFLAGS=$(LIBCFLAGS)" \
+-	"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
+-	"MAKE=$(MAKE)" \
+-	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
+-	"PICFLAG=$(PICFLAG)" \
+-	"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
+-	"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
+-	"SHELL=$(SHELL)" \
+-	"exec_prefix=$(exec_prefix)" \
+-	"infodir=$(infodir)" \
+-	"libdir=$(libdir)" \
+-	"mandir=$(mandir)" \
+-	"prefix=$(prefix)" \
+-	"AR=$(AR)" \
+-	"AS=$(AS)" \
+-	"CC=$(CC)" \
+-	"CXX=$(CXX)" \
+-	"LD=$(LD)" \
+-	"NM=$(NM)" \
+-	"RANLIB=$(RANLIB)" \
+-	"DESTDIR=$(DESTDIR)"
++	'AR_FLAGS=$(AR_FLAGS)' \
++	'CC_FOR_BUILD=$(CC_FOR_BUILD)' \
++	'CFLAGS=$(CFLAGS)' \
++	'CXXFLAGS=$(CXXFLAGS)' \
++	'CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)' \
++	'CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)' \
++	'INSTALL=$(INSTALL)' \
++	'INSTALL_DATA=$(INSTALL_DATA)' \
++	'INSTALL_PROGRAM=$(INSTALL_PROGRAM)' \
++	'INSTALL_SCRIPT=$(INSTALL_SCRIPT)' \
++	'JC1FLAGS=$(JC1FLAGS)' \
++	'LDFLAGS=$(LDFLAGS)' \
++	'LIBCFLAGS=$(LIBCFLAGS)' \
++	'LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)' \
++	'MAKE=$(MAKE)' \
++	'MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)' \
++	'PICFLAG=$(PICFLAG)' \
++	'PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)' \
++	'RUNTESTFLAGS=$(RUNTESTFLAGS)' \
++	'SHELL=$(SHELL)' \
++	'exec_prefix=$(exec_prefix)' \
++	'infodir=$(infodir)' \
++	'libdir=$(libdir)' \
++	'mandir=$(mandir)' \
++	'prefix=$(prefix)' \
++	'AR=$(AR)' \
++	'AS=$(AS)' \
++	'CC=$(CC)' \
++	'CXX=$(CXX)' \
++	'LD=$(LD)' \
++	'NM=$(NM)' \
++	'RANLIB=$(RANLIB)' \
++	'DESTDIR=$(DESTDIR)'
++
++# Subdir rules rely on $(FLAGS_TO_PASS)
++FLAGS_TO_PASS = $(AM_MAKEFLAGS)
+ 
+ MAKEOVERRIDES=
+ 
+-ACLOCAL_AMFLAGS=$(ACLOCAL_AMFLAGS) -I m4
+-
+-lib_LTLIBRARIES = libffi.la
++toolexeclib_LTLIBRARIES = libffi.la
+ noinst_LTLIBRARIES = libffi_convenience.la
+ 
+-libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
++libffi_la_SOURCES = src/prep_cif.c src/types.c \
+ 		src/raw_api.c src/java_raw_api.c src/closures.c
+ 
+ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = libffi.pc
+ 
+ nodist_libffi_la_SOURCES =
+ 
++if FFI_DEBUG
++nodist_libffi_la_SOURCES += src/debug.c
++endif
++
+ if MIPS
+ nodist_libffi_la_SOURCES += src/mips/ffi.c src/mips/o32.S src/mips/n32.S
+ endif
++if BFIN
++nodist_libffi_la_SOURCES += src/bfin/ffi.c src/bfin/sysv.S
++endif
+ if X86
+-nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S
++nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S src/x86/win32.S
+ endif
+ if X86_FREEBSD
+-nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/freebsd.S
++nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/freebsd.S src/x86/win32.S
+ endif
+ if X86_WIN32
+ nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S
+ endif
+ if X86_WIN64
+ nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win64.S
+ endif
+ if X86_DARWIN
+ nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S
++if X86_DARWIN32
++nodist_libffi_la_SOURCES += src/x86/win32.S
++endif
+ endif
+ if SPARC
+ nodist_libffi_la_SOURCES += src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
+ endif
+ if ALPHA
+ nodist_libffi_la_SOURCES += src/alpha/ffi.c src/alpha/osf.S
+ endif
+ if IA64
+ nodist_libffi_la_SOURCES += src/ia64/ffi.c src/ia64/unix.S
+ endif
+ if M32R
+ nodist_libffi_la_SOURCES += src/m32r/sysv.S src/m32r/ffi.c
+ endif
+ if M68K
+ nodist_libffi_la_SOURCES += src/m68k/ffi.c src/m68k/sysv.S
+ endif
++if M88K
++nodist_libffi_la_SOURCES += src/m88k/ffi.c src/m88k/obsd.S
++endif
++if MOXIE
++nodist_libffi_la_SOURCES += src/moxie/ffi.c src/moxie/eabi.S
++endif
++if MICROBLAZE
++nodist_libffi_la_SOURCES += src/microblaze/ffi.c src/microblaze/sysv.S
++endif
++if NIOS2
++nodist_libffi_la_SOURCES += src/nios2/sysv.S src/nios2/ffi.c
++endif
+ if POWERPC
+-nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
++nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
+ endif
+ if POWERPC_AIX
+ nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
+ endif
+ if POWERPC_DARWIN
+ nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
+ endif
+ if POWERPC_FREEBSD
+-nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
++nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
++endif
++if AARCH64
++nodist_libffi_la_SOURCES += src/aarch64/sysv.S src/aarch64/ffi.c
++endif
++if ARC
++nodist_libffi_la_SOURCES += src/arc/arcompact.S src/arc/ffi.c
+ endif
+ if ARM
+ nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c
++if FFI_EXEC_TRAMPOLINE_TABLE
++nodist_libffi_la_SOURCES += src/arm/trampoline.S
++endif
+ endif
+ if AVR32
+ nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c
+ endif
+ if LIBFFI_CRIS
+ nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c
+ endif
+ if FRV
+ nodist_libffi_la_SOURCES += src/frv/eabi.S src/frv/ffi.c
+ endif
+-if MOXIE
+-nodist_libffi_la_SOURCES += src/moxie/eabi.S src/moxie/ffi.c
+-endif
+ if S390
+ nodist_libffi_la_SOURCES += src/s390/sysv.S src/s390/ffi.c
+ endif
+ if X86_64
+ nodist_libffi_la_SOURCES += src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
+ endif
+ if SH
+ nodist_libffi_la_SOURCES += src/sh/sysv.S src/sh/ffi.c
+@@ -168,31 +215,40 @@ if SH64
+ nodist_libffi_la_SOURCES += src/sh64/sysv.S src/sh64/ffi.c
+ endif
+ if PA_LINUX
+ nodist_libffi_la_SOURCES += src/pa/linux.S src/pa/ffi.c
+ endif
+ if PA_HPUX
+ nodist_libffi_la_SOURCES += src/pa/hpux32.S src/pa/ffi.c
+ endif
++if TILE
++nodist_libffi_la_SOURCES += src/tile/tile.S src/tile/ffi.c
++endif
++if XTENSA
++nodist_libffi_la_SOURCES += src/xtensa/sysv.S src/xtensa/ffi.c
++endif
++if METAG
++nodist_libffi_la_SOURCES += src/metag/sysv.S src/metag/ffi.c
++endif
++if VAX
++nodist_libffi_la_SOURCES += src/vax/elfbsd.S src/vax/ffi.c
++endif
+ 
+ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+ 
+-AM_CFLAGS = -Wall -g -fexceptions
++LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/libtool-ldflags $(LDFLAGS))
++
++AM_CFLAGS =
+ if FFI_DEBUG
+ # Build debug. Define FFI_DEBUG on the commandline so that, when building with
+ # MSVC, it can link against the debug CRT.
+ AM_CFLAGS += -DFFI_DEBUG
+-else
+-# Build opt.
+-AM_CFLAGS += -O2
+ endif
+ 
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
++libffi_la_LDFLAGS = -no-undefined -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
+ 
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+ 
+-# No install-html or install-pdf support in automake yet
+-.PHONY: install-html install-pdf
+-install-html:
+-install-pdf:
++dist-hook:
++	if [ -d $(top_srcdir)/.git ] ; then git -C $(top_srcdir) log --no-decorate ; else echo 'See git log for history.' ; fi > $(distdir)/ChangeLog
+diff --git a/js/src/ctypes/libffi/Makefile.in b/js/src/ctypes/libffi/Makefile.in
+--- a/js/src/ctypes/libffi/Makefile.in
++++ b/js/src/ctypes/libffi/Makefile.in
+@@ -1,27 +1,71 @@
+-# Makefile.in generated by automake 1.11.1 from Makefile.am.
++# Makefile.in generated by automake 1.13.4 from Makefile.am.
+ # @configure_input@
+ 
+-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+-# Inc.
++# Copyright (C) 1994-2013 Free Software Foundation, Inc.
++
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ 
+ 
+ VPATH = @srcdir@
++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
++am__make_running_with_option = \
++  case $${target_option-} in \
++      ?) ;; \
++      *) echo "am__make_running_with_option: internal error: invalid" \
++              "target option '$${target_option-}' specified" >&2; \
++         exit 1;; \
++  esac; \
++  has_opt=no; \
++  sane_makeflags=$$MAKEFLAGS; \
++  if $(am__is_gnu_make); then \
++    sane_makeflags=$$MFLAGS; \
++  else \
++    case $$MAKEFLAGS in \
++      *\\[\ \	]*) \
++        bs=\\; \
++        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
++          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
++    esac; \
++  fi; \
++  skip_next=no; \
++  strip_trailopt () \
++  { \
++    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
++  }; \
++  for flg in $$sane_makeflags; do \
++    test $$skip_next = yes && { skip_next=no; continue; }; \
++    case $$flg in \
++      *=*|--*) continue;; \
++        -*I) strip_trailopt 'I'; skip_next=yes;; \
++      -*I?*) strip_trailopt 'I';; \
++        -*O) strip_trailopt 'O'; skip_next=yes;; \
++      -*O?*) strip_trailopt 'O';; \
++        -*l) strip_trailopt 'l'; skip_next=yes;; \
++      -*l?*) strip_trailopt 'l';; \
++      -[dEDm]) skip_next=yes;; \
++      -[JT]) skip_next=yes;; \
++    esac; \
++    case $$flg in \
++      *$$target_option*) has_opt=yes; break;; \
++    esac; \
++  done; \
++  test $$has_opt = yes
++am__make_dryrun = (target_option=n; $(am__make_running_with_option))
++am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -31,56 +75,79 @@ NORMAL_INSTALL = :
+ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+-@MIPS_TRUE@am__append_1 = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
+-@X86_TRUE@am__append_2 = src/x86/ffi.c src/x86/sysv.S
+-@X86_FREEBSD_TRUE@am__append_3 = src/x86/ffi.c src/x86/freebsd.S
+-@X86_WIN32_TRUE@am__append_4 = src/x86/ffi.c src/x86/win32.S
+-@X86_WIN64_TRUE@am__append_5 = src/x86/ffi.c src/x86/win64.S
+-@X86_DARWIN_TRUE@am__append_6 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S
+-@SPARC_TRUE@am__append_7 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
+-@ALPHA_TRUE@am__append_8 = src/alpha/ffi.c src/alpha/osf.S
+-@IA64_TRUE@am__append_9 = src/ia64/ffi.c src/ia64/unix.S
+-@M32R_TRUE@am__append_10 = src/m32r/sysv.S src/m32r/ffi.c
+-@M68K_TRUE@am__append_11 = src/m68k/ffi.c src/m68k/sysv.S
+-@POWERPC_TRUE@am__append_12 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
+-@POWERPC_AIX_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
+-@POWERPC_DARWIN_TRUE@am__append_14 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
+-@POWERPC_FREEBSD_TRUE@am__append_15 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
+-@ARM_TRUE@am__append_16 = src/arm/sysv.S src/arm/ffi.c
+-@AVR32_TRUE@am__append_17 = src/avr32/sysv.S src/avr32/ffi.c
+-@LIBFFI_CRIS_TRUE@am__append_18 = src/cris/sysv.S src/cris/ffi.c
+-@FRV_TRUE@am__append_19 = src/frv/eabi.S src/frv/ffi.c
+-@MOXIE_TRUE@am__append_20 = src/moxie/eabi.S src/moxie/ffi.c
+-@S390_TRUE@am__append_21 = src/s390/sysv.S src/s390/ffi.c
+-@X86_64_TRUE@am__append_22 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
+-@SH_TRUE@am__append_23 = src/sh/sysv.S src/sh/ffi.c
+-@SH64_TRUE@am__append_24 = src/sh64/sysv.S src/sh64/ffi.c
+-@PA_LINUX_TRUE@am__append_25 = src/pa/linux.S src/pa/ffi.c
+-@PA_HPUX_TRUE@am__append_26 = src/pa/hpux32.S src/pa/ffi.c
++@FFI_DEBUG_TRUE@am__append_1 = src/debug.c
++@MIPS_TRUE@am__append_2 = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
++@BFIN_TRUE@am__append_3 = src/bfin/ffi.c src/bfin/sysv.S
++@X86_TRUE@am__append_4 = src/x86/ffi.c src/x86/sysv.S src/x86/win32.S
++@X86_FREEBSD_TRUE@am__append_5 = src/x86/ffi.c src/x86/freebsd.S src/x86/win32.S
++@X86_WIN32_TRUE@am__append_6 = src/x86/ffi.c src/x86/win32.S
++@X86_WIN64_TRUE@am__append_7 = src/x86/ffi.c src/x86/win64.S
++@X86_DARWIN_TRUE@am__append_8 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S
++@X86_DARWIN32_TRUE@@X86_DARWIN_TRUE@am__append_9 = src/x86/win32.S
++@SPARC_TRUE@am__append_10 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
++@ALPHA_TRUE@am__append_11 = src/alpha/ffi.c src/alpha/osf.S
++@IA64_TRUE@am__append_12 = src/ia64/ffi.c src/ia64/unix.S
++@M32R_TRUE@am__append_13 = src/m32r/sysv.S src/m32r/ffi.c
++@M68K_TRUE@am__append_14 = src/m68k/ffi.c src/m68k/sysv.S
++@M88K_TRUE@am__append_15 = src/m88k/ffi.c src/m88k/obsd.S
++@MOXIE_TRUE@am__append_16 = src/moxie/ffi.c src/moxie/eabi.S
++@MICROBLAZE_TRUE@am__append_17 = src/microblaze/ffi.c src/microblaze/sysv.S
++@NIOS2_TRUE@am__append_18 = src/nios2/sysv.S src/nios2/ffi.c
++@POWERPC_TRUE@am__append_19 = src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S
++@POWERPC_AIX_TRUE@am__append_20 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S
++@POWERPC_DARWIN_TRUE@am__append_21 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S
++@POWERPC_FREEBSD_TRUE@am__append_22 = src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/sysv.S src/powerpc/ppc_closure.S
++@AARCH64_TRUE@am__append_23 = src/aarch64/sysv.S src/aarch64/ffi.c
++@ARC_TRUE@am__append_24 = src/arc/arcompact.S src/arc/ffi.c
++@ARM_TRUE@am__append_25 = src/arm/sysv.S src/arm/ffi.c
++@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__append_26 = src/arm/trampoline.S
++@AVR32_TRUE@am__append_27 = src/avr32/sysv.S src/avr32/ffi.c
++@LIBFFI_CRIS_TRUE@am__append_28 = src/cris/sysv.S src/cris/ffi.c
++@FRV_TRUE@am__append_29 = src/frv/eabi.S src/frv/ffi.c
++@S390_TRUE@am__append_30 = src/s390/sysv.S src/s390/ffi.c
++@X86_64_TRUE@am__append_31 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
++@SH_TRUE@am__append_32 = src/sh/sysv.S src/sh/ffi.c
++@SH64_TRUE@am__append_33 = src/sh64/sysv.S src/sh64/ffi.c
++@PA_LINUX_TRUE@am__append_34 = src/pa/linux.S src/pa/ffi.c
++@PA_HPUX_TRUE@am__append_35 = src/pa/hpux32.S src/pa/ffi.c
++@TILE_TRUE@am__append_36 = src/tile/tile.S src/tile/ffi.c
++@XTENSA_TRUE@am__append_37 = src/xtensa/sysv.S src/xtensa/ffi.c
++@METAG_TRUE@am__append_38 = src/metag/sysv.S src/metag/ffi.c
++@VAX_TRUE@am__append_39 = src/vax/elfbsd.S src/vax/ffi.c
+ # Build debug. Define FFI_DEBUG on the commandline so that, when building with
+ # MSVC, it can link against the debug CRT.
+-@FFI_DEBUG_TRUE@am__append_27 = -DFFI_DEBUG
+-# Build opt.
+-@FFI_DEBUG_FALSE@am__append_28 = -O2
++@FFI_DEBUG_TRUE@am__append_40 = -DFFI_DEBUG
+ subdir = .
+-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+-	$(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \
+-	$(srcdir)/doc/version.texi $(srcdir)/fficonfig.h.in \
+-	$(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog \
+-	compile config.guess config.sub depcomp install-sh ltmain.sh \
+-	mdate-sh missing texinfo.tex
++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
++	$(top_srcdir)/configure $(am__configure_deps) \
++	$(srcdir)/fficonfig.h.in $(srcdir)/libffi.pc.in depcomp \
++	mdate-sh $(srcdir)/doc/version.texi $(srcdir)/doc/stamp-vti \
++	texinfo.tex README compile config.guess config.sub install-sh \
++	missing ltmain.sh
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
++am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \
++	$(top_srcdir)/m4/ax_append_flag.m4 \
++	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
++	$(top_srcdir)/m4/ax_cflags_warn_all.m4 \
++	$(top_srcdir)/m4/ax_check_compile_flag.m4 \
++	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
++	$(top_srcdir)/m4/ax_configure_args.m4 \
++	$(top_srcdir)/m4/ax_enable_builddir.m4 \
++	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
++	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
++	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
++	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
++	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+  configure.lineno config.status.lineno
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = fficonfig.h
+ CONFIG_CLEAN_FILES = libffi.pc
+@@ -101,149 +168,272 @@ am__nobase_list = $(am__nobase_strip_set
+   sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+   $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+     if (++n[$$2] == $(am__install_max)) \
+       { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+     END { for (dir in files) print dir, files[dir] }'
+ am__base_list = \
+   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" \
++am__uninstall_files_from_dir = { \
++  test -z "$$files" \
++    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
++    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
++         $(am__cd) "$$dir" && rm -f $$files; }; \
++  }
++am__installdirs = "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(infodir)" \
+ 	"$(DESTDIR)$(pkgconfigdir)"
+-LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
++LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
+ libffi_la_LIBADD =
+ am__dirstamp = $(am__leading_dot)dirstamp
+-am_libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \
+-	src/raw_api.lo src/java_raw_api.lo src/closures.lo
+-@MIPS_TRUE@am__objects_1 = src/mips/ffi.lo src/mips/o32.lo \
++am_libffi_la_OBJECTS = src/prep_cif.lo src/types.lo src/raw_api.lo \
++	src/java_raw_api.lo src/closures.lo
++@FFI_DEBUG_TRUE@am__objects_1 = src/debug.lo
++@MIPS_TRUE@am__objects_2 = src/mips/ffi.lo src/mips/o32.lo \
+ @MIPS_TRUE@	src/mips/n32.lo
+-@X86_TRUE@am__objects_2 = src/x86/ffi.lo src/x86/sysv.lo
+-@X86_FREEBSD_TRUE@am__objects_3 = src/x86/ffi.lo src/x86/freebsd.lo
+-@X86_WIN32_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/win32.lo
+-@X86_WIN64_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/win64.lo
+-@X86_DARWIN_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/darwin.lo \
++@BFIN_TRUE@am__objects_3 = src/bfin/ffi.lo src/bfin/sysv.lo
++@X86_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/sysv.lo \
++@X86_TRUE@	src/x86/win32.lo
++@X86_FREEBSD_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/freebsd.lo \
++@X86_FREEBSD_TRUE@	src/x86/win32.lo
++@X86_WIN32_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/win32.lo
++@X86_WIN64_TRUE@am__objects_7 = src/x86/ffi.lo src/x86/win64.lo
++@X86_DARWIN_TRUE@am__objects_8 = src/x86/ffi.lo src/x86/darwin.lo \
+ @X86_DARWIN_TRUE@	src/x86/ffi64.lo src/x86/darwin64.lo
+-@SPARC_TRUE@am__objects_7 = src/sparc/ffi.lo src/sparc/v8.lo \
++@X86_DARWIN32_TRUE@@X86_DARWIN_TRUE@am__objects_9 = src/x86/win32.lo
++@SPARC_TRUE@am__objects_10 = src/sparc/ffi.lo src/sparc/v8.lo \
+ @SPARC_TRUE@	src/sparc/v9.lo
+-@ALPHA_TRUE@am__objects_8 = src/alpha/ffi.lo src/alpha/osf.lo
+-@IA64_TRUE@am__objects_9 = src/ia64/ffi.lo src/ia64/unix.lo
+-@M32R_TRUE@am__objects_10 = src/m32r/sysv.lo src/m32r/ffi.lo
+-@M68K_TRUE@am__objects_11 = src/m68k/ffi.lo src/m68k/sysv.lo
+-@POWERPC_TRUE@am__objects_12 = src/powerpc/ffi.lo src/powerpc/sysv.lo \
++@ALPHA_TRUE@am__objects_11 = src/alpha/ffi.lo src/alpha/osf.lo
++@IA64_TRUE@am__objects_12 = src/ia64/ffi.lo src/ia64/unix.lo
++@M32R_TRUE@am__objects_13 = src/m32r/sysv.lo src/m32r/ffi.lo
++@M68K_TRUE@am__objects_14 = src/m68k/ffi.lo src/m68k/sysv.lo
++@M88K_TRUE@am__objects_15 = src/m88k/ffi.lo src/m88k/obsd.lo
++@MOXIE_TRUE@am__objects_16 = src/moxie/ffi.lo src/moxie/eabi.lo
++@MICROBLAZE_TRUE@am__objects_17 = src/microblaze/ffi.lo \
++@MICROBLAZE_TRUE@	src/microblaze/sysv.lo
++@NIOS2_TRUE@am__objects_18 = src/nios2/sysv.lo src/nios2/ffi.lo
++@POWERPC_TRUE@am__objects_19 = src/powerpc/ffi.lo \
++@POWERPC_TRUE@	src/powerpc/ffi_sysv.lo \
++@POWERPC_TRUE@	src/powerpc/ffi_linux64.lo src/powerpc/sysv.lo \
+ @POWERPC_TRUE@	src/powerpc/ppc_closure.lo \
+ @POWERPC_TRUE@	src/powerpc/linux64.lo \
+ @POWERPC_TRUE@	src/powerpc/linux64_closure.lo
+-@POWERPC_AIX_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \
++@POWERPC_AIX_TRUE@am__objects_20 = src/powerpc/ffi_darwin.lo \
+ @POWERPC_AIX_TRUE@	src/powerpc/aix.lo \
+ @POWERPC_AIX_TRUE@	src/powerpc/aix_closure.lo
+-@POWERPC_DARWIN_TRUE@am__objects_14 = src/powerpc/ffi_darwin.lo \
++@POWERPC_DARWIN_TRUE@am__objects_21 = src/powerpc/ffi_darwin.lo \
+ @POWERPC_DARWIN_TRUE@	src/powerpc/darwin.lo \
+ @POWERPC_DARWIN_TRUE@	src/powerpc/darwin_closure.lo
+-@POWERPC_FREEBSD_TRUE@am__objects_15 = src/powerpc/ffi.lo \
++@POWERPC_FREEBSD_TRUE@am__objects_22 = src/powerpc/ffi.lo \
++@POWERPC_FREEBSD_TRUE@	src/powerpc/ffi_sysv.lo \
+ @POWERPC_FREEBSD_TRUE@	src/powerpc/sysv.lo \
+ @POWERPC_FREEBSD_TRUE@	src/powerpc/ppc_closure.lo
+-@ARM_TRUE@am__objects_16 = src/arm/sysv.lo src/arm/ffi.lo
+-@AVR32_TRUE@am__objects_17 = src/avr32/sysv.lo src/avr32/ffi.lo
+-@LIBFFI_CRIS_TRUE@am__objects_18 = src/cris/sysv.lo src/cris/ffi.lo
+-@FRV_TRUE@am__objects_19 = src/frv/eabi.lo src/frv/ffi.lo
+-@MOXIE_TRUE@am__objects_20 = src/moxie/eabi.lo src/moxie/ffi.lo
+-@S390_TRUE@am__objects_21 = src/s390/sysv.lo src/s390/ffi.lo
+-@X86_64_TRUE@am__objects_22 = src/x86/ffi64.lo src/x86/unix64.lo \
++@AARCH64_TRUE@am__objects_23 = src/aarch64/sysv.lo src/aarch64/ffi.lo
++@ARC_TRUE@am__objects_24 = src/arc/arcompact.lo src/arc/ffi.lo
++@ARM_TRUE@am__objects_25 = src/arm/sysv.lo src/arm/ffi.lo
++@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__objects_26 = src/arm/trampoline.lo
++@AVR32_TRUE@am__objects_27 = src/avr32/sysv.lo src/avr32/ffi.lo
++@LIBFFI_CRIS_TRUE@am__objects_28 = src/cris/sysv.lo src/cris/ffi.lo
++@FRV_TRUE@am__objects_29 = src/frv/eabi.lo src/frv/ffi.lo
++@S390_TRUE@am__objects_30 = src/s390/sysv.lo src/s390/ffi.lo
++@X86_64_TRUE@am__objects_31 = src/x86/ffi64.lo src/x86/unix64.lo \
+ @X86_64_TRUE@	src/x86/ffi.lo src/x86/sysv.lo
+-@SH_TRUE@am__objects_23 = src/sh/sysv.lo src/sh/ffi.lo
+-@SH64_TRUE@am__objects_24 = src/sh64/sysv.lo src/sh64/ffi.lo
+-@PA_LINUX_TRUE@am__objects_25 = src/pa/linux.lo src/pa/ffi.lo
+-@PA_HPUX_TRUE@am__objects_26 = src/pa/hpux32.lo src/pa/ffi.lo
++@SH_TRUE@am__objects_32 = src/sh/sysv.lo src/sh/ffi.lo
++@SH64_TRUE@am__objects_33 = src/sh64/sysv.lo src/sh64/ffi.lo
++@PA_LINUX_TRUE@am__objects_34 = src/pa/linux.lo src/pa/ffi.lo
++@PA_HPUX_TRUE@am__objects_35 = src/pa/hpux32.lo src/pa/ffi.lo
++@TILE_TRUE@am__objects_36 = src/tile/tile.lo src/tile/ffi.lo
++@XTENSA_TRUE@am__objects_37 = src/xtensa/sysv.lo src/xtensa/ffi.lo
++@METAG_TRUE@am__objects_38 = src/metag/sysv.lo src/metag/ffi.lo
++@VAX_TRUE@am__objects_39 = src/vax/elfbsd.lo src/vax/ffi.lo
+ nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ 	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ 	$(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ 	$(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ 	$(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ 	$(am__objects_15) $(am__objects_16) $(am__objects_17) \
+ 	$(am__objects_18) $(am__objects_19) $(am__objects_20) \
+ 	$(am__objects_21) $(am__objects_22) $(am__objects_23) \
+-	$(am__objects_24) $(am__objects_25) $(am__objects_26)
++	$(am__objects_24) $(am__objects_25) $(am__objects_26) \
++	$(am__objects_27) $(am__objects_28) $(am__objects_29) \
++	$(am__objects_30) $(am__objects_31) $(am__objects_32) \
++	$(am__objects_33) $(am__objects_34) $(am__objects_35) \
++	$(am__objects_36) $(am__objects_37) $(am__objects_38) \
++	$(am__objects_39)
+ libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \
+ 	$(nodist_libffi_la_OBJECTS)
+-libffi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++AM_V_lt = $(am__v_lt_@AM_V@)
++am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
++am__v_lt_0 = --silent
++am__v_lt_1 = 
++libffi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ 	$(libffi_la_LDFLAGS) $(LDFLAGS) -o $@
+ libffi_convenience_la_LIBADD =
+-am__objects_27 = src/debug.lo src/prep_cif.lo src/types.lo \
+-	src/raw_api.lo src/java_raw_api.lo src/closures.lo
+-am_libffi_convenience_la_OBJECTS = $(am__objects_27)
+-am__objects_28 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
++am__objects_40 = src/prep_cif.lo src/types.lo src/raw_api.lo \
++	src/java_raw_api.lo src/closures.lo
++am_libffi_convenience_la_OBJECTS = $(am__objects_40)
++am__objects_41 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
+ 	$(am__objects_4) $(am__objects_5) $(am__objects_6) \
+ 	$(am__objects_7) $(am__objects_8) $(am__objects_9) \
+ 	$(am__objects_10) $(am__objects_11) $(am__objects_12) \
+ 	$(am__objects_13) $(am__objects_14) $(am__objects_15) \
+ 	$(am__objects_16) $(am__objects_17) $(am__objects_18) \
+ 	$(am__objects_19) $(am__objects_20) $(am__objects_21) \
+ 	$(am__objects_22) $(am__objects_23) $(am__objects_24) \
+-	$(am__objects_25) $(am__objects_26)
+-nodist_libffi_convenience_la_OBJECTS = $(am__objects_28)
++	$(am__objects_25) $(am__objects_26) $(am__objects_27) \
++	$(am__objects_28) $(am__objects_29) $(am__objects_30) \
++	$(am__objects_31) $(am__objects_32) $(am__objects_33) \
++	$(am__objects_34) $(am__objects_35) $(am__objects_36) \
++	$(am__objects_37) $(am__objects_38) $(am__objects_39)
++nodist_libffi_convenience_la_OBJECTS = $(am__objects_41)
+ libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \
+ 	$(nodist_libffi_convenience_la_OBJECTS)
++AM_V_P = $(am__v_P_@AM_V@)
++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
++am__v_P_0 = false
++am__v_P_1 = :
++AM_V_GEN = $(am__v_GEN_@AM_V@)
++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
++am__v_GEN_0 = @echo "  GEN     " $@;
++am__v_GEN_1 = 
++AM_V_at = $(am__v_at_@AM_V@)
++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
++am__v_at_0 = @
++am__v_at_1 = 
+ DEFAULT_INCLUDES = -I.@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
+ am__mv = mv -f
+ CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
+-LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+-	--mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
++LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
++	$(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \
++	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
++	$(AM_CCASFLAGS) $(CCASFLAGS)
++AM_V_CPPAS = $(am__v_CPPAS_@AM_V@)
++am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@)
++am__v_CPPAS_0 = @echo "  CPPAS   " $@;
++am__v_CPPAS_1 = 
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
++	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
++	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
++	$(AM_CFLAGS) $(CFLAGS)
++AM_V_CC = $(am__v_CC_@AM_V@)
++am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
++am__v_CC_0 = @echo "  CC      " $@;
++am__v_CC_1 = 
+ CCLD = $(CC)
+-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+-	$(LDFLAGS) -o $@
++LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
++	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++	$(AM_LDFLAGS) $(LDFLAGS) -o $@
++AM_V_CCLD = $(am__v_CCLD_@AM_V@)
++am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
++am__v_CCLD_0 = @echo "  CCLD    " $@;
++am__v_CCLD_1 = 
+ SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \
+ 	$(libffi_convenience_la_SOURCES) \
+ 	$(nodist_libffi_convenience_la_SOURCES)
+ DIST_SOURCES = $(libffi_la_SOURCES) $(libffi_convenience_la_SOURCES)
+-INFO_DEPS =
++AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
++am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
++am__v_DVIPS_0 = @echo "  DVIPS   " $@;
++am__v_DVIPS_1 = 
++AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
++am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
++am__v_MAKEINFO_0 = @echo "  MAKEINFO" $@;
++am__v_MAKEINFO_1 = 
++AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
++am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
++am__v_INFOHTML_0 = @echo "  INFOHTML" $@;
++am__v_INFOHTML_1 = 
++AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
++am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
++am__v_TEXI2DVI_0 = @echo "  TEXI2DVI" $@;
++am__v_TEXI2DVI_1 = 
++AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
++am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
++am__v_TEXI2PDF_0 = @echo "  TEXI2PDF" $@;
++am__v_TEXI2PDF_1 = 
++AM_V_texinfo = $(am__v_texinfo_@AM_V@)
++am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
++am__v_texinfo_0 = -q
++am__v_texinfo_1 = 
++AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
++am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
++am__v_texidevnull_0 = > /dev/null
++am__v_texidevnull_1 = 
++INFO_DEPS = $(srcdir)/doc/libffi.info
+ am__TEXINFO_TEX_DIR = $(srcdir)
+ DVIS = doc/libffi.dvi
+ PDFS = doc/libffi.pdf
+ PSS = doc/libffi.ps
+ HTMLS = doc/libffi.html
+ TEXINFOS = doc/libffi.texi
+ TEXI2DVI = texi2dvi
+ TEXI2PDF = $(TEXI2DVI) --pdf --batch
+ MAKEINFOHTML = $(MAKEINFO) --html
+ AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+ DVIPS = dvips
+-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+-	html-recursive info-recursive install-data-recursive \
+-	install-dvi-recursive install-exec-recursive \
+-	install-html-recursive install-info-recursive \
+-	install-pdf-recursive install-ps-recursive install-recursive \
+-	installcheck-recursive installdirs-recursive pdf-recursive \
+-	ps-recursive uninstall-recursive
++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
++	ctags-recursive dvi-recursive html-recursive info-recursive \
++	install-data-recursive install-dvi-recursive \
++	install-exec-recursive install-html-recursive \
++	install-info-recursive install-pdf-recursive \
++	install-ps-recursive install-recursive installcheck-recursive \
++	installdirs-recursive pdf-recursive ps-recursive \
++	tags-recursive uninstall-recursive
++am__can_run_installinfo = \
++  case $$AM_UPDATE_INFO_DIR in \
++    n|no|NO) false;; \
++    *) (install-info --version) >/dev/null 2>&1;; \
++  esac
+ DATA = $(pkgconfig_DATA)
+ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+   distclean-recursive maintainer-clean-recursive
+-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+-	distdir dist dist-all distcheck
++am__recursive_targets = \
++  $(RECURSIVE_TARGETS) \
++  $(RECURSIVE_CLEAN_TARGETS) \
++  $(am__extra_recursive_targets)
++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
++	cscope distdir dist dist-all distcheck
++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
++	$(LISP)fficonfig.h.in
++# Read a list of newline-separated strings from the standard input,
++# and print each of them once, without duplicates.  Input order is
++# *not* preserved.
++am__uniquify_input = $(AWK) '\
++  BEGIN { nonempty = 0; } \
++  { items[$$0] = 1; nonempty = 1; } \
++  END { if (nonempty) { for (i in items) print i; }; } \
++'
++# Make sure the list of sources is unique.  This is necessary because,
++# e.g., the same source file might be shared among _SOURCES variables
++# for different programs/libraries.
++am__define_uniq_tagged_files = \
++  list='$(am__tagged_files)'; \
++  unique=`for i in $$list; do \
++    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++  done | $(am__uniquify_input)`
+ ETAGS = etags
+ CTAGS = ctags
++CSCOPE = cscope
+ DIST_SUBDIRS = $(SUBDIRS)
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ distdir = $(PACKAGE)-$(VERSION)
+ top_distdir = $(distdir)
+ am__remove_distdir = \
+-  { test ! -d "$(distdir)" \
+-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+-         && rm -fr "$(distdir)"; }; }
++  if test -d "$(distdir)"; then \
++    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++      && rm -rf "$(distdir)" \
++      || { sleep 5 && rm -rf "$(distdir)"; }; \
++  else :; fi
++am__post_remove_distdir = $(am__remove_distdir)
+ am__relativize = \
+   dir0=`pwd`; \
+   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+   sed_rest='s,^[^/]*/*,,'; \
+   sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+   sed_butlast='s,/*[^/]*$$,,'; \
+   while test -n "$$dir1"; do \
+     first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+@@ -261,21 +451,25 @@ am__relativize = \
+         dir0="$$dir0"/"$$first"; \
+       fi; \
+     fi; \
+     dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+   done; \
+   reldir="$$dir2"
+ DIST_ARCHIVES = $(distdir).tar.gz
+ GZIP_ENV = --best
++DIST_TARGETS = dist-gzip
+ distuninstallcheck_listfiles = find . -type f -print
++am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
++  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+ distcleancheck_listfiles = find . -type f -print
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMTAR = @AMTAR@
++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+ AM_LTLDFLAGS = @AM_LTLDFLAGS@
+ AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
+ AR = @AR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ CC = @CC@
+@@ -284,75 +478,82 @@ CCASDEPMODE = @CCASDEPMODE@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXEEXT = @EXEEXT@
++FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
+ FGREP = @FGREP@
+ GREP = @GREP@
+ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
++HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LD = @LD@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIPO = @LIPO@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+ OBJDUMP = @OBJDUMP@
+ OBJEXT = @OBJEXT@
+ OTOOL = @OTOOL@
+ OTOOL64 = @OTOOL64@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
++PRTDIAG = @PRTDIAG@
+ RANLIB = @RANLIB@
+ SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ TARGET = @TARGET@
+ TARGETDIR = @TARGETDIR@
+ VERSION = @VERSION@
+ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
++ax_enable_builddir_sed = @ax_enable_builddir_sed@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ builddir = @builddir@
+ datadir = @datadir@
+@@ -368,69 +569,86 @@ host_vendor = @host_vendor@
+ htmldir = @htmldir@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localedir = @localedir@
+ localstatedir = @localstatedir@
+-lt_ECHO = @lt_ECHO@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ oldincludedir = @oldincludedir@
+ pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ srcdir = @srcdir@
++sys_symbol_underscore = @sys_symbol_underscore@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
+ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign subdir-objects
++ACLOCAL_AMFLAGS = -I m4
+ SUBDIRS = include testsuite man
+-EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \
+-	src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
+-	src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \
+-	src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \
+-	src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \
+-	src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \
+-	src/ia64/unix.S \
+-	src/mips/ffi.c src/mips/n32.S src/mips/o32.S \
+-	src/mips/ffitarget.h \
+-	src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
+-	src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
+-	src/powerpc/ffi.c src/powerpc/sysv.S \
+-	src/powerpc/linux64.S src/powerpc/linux64_closure.S \
+-	src/powerpc/ppc_closure.S src/powerpc/asm.h \
+-	src/powerpc/aix.S src/powerpc/darwin.S \
+-	src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \
+-	src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \
+-	src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \
+-	src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h \
+-	src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \
+-	src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \
+-	src/sparc/ffi.c src/x86/darwin64.S \
+-	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \
+-	src/x86/darwin.S src/x86/freebsd.S \
+-	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
+-	src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
+-	src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \
+-	libtool-version ChangeLog.libffi m4/libtool.m4 \
+-	m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4
++EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj			\
++	 src/aarch64/ffi.c src/aarch64/ffitarget.h src/aarch64/sysv.S	\
++	 src/alpha/ffi.c src/alpha/osf.S			\
++	 src/alpha/ffitarget.h src/arc/ffi.c src/arc/arcompact.S	\
++	 src/arc/ffitarget.h src/arm/ffi.c src/arm/sysv.S		\
++	 src/arm/ffitarget.h src/avr32/ffi.c src/avr32/sysv.S		\
++	 src/avr32/ffitarget.h src/cris/ffi.c src/cris/sysv.S		\
++	 src/cris/ffitarget.h src/ia64/ffi.c src/ia64/ffitarget.h	\
++	 src/ia64/ia64_flags.h src/ia64/unix.S src/mips/ffi.c		\
++	 src/mips/n32.S src/mips/o32.S src/metag/ffi.c			\
++	 src/metag/ffitarget.h src/metag/sysv.S src/moxie/ffi.c		\
++	 src/moxie/ffitarget.h src/moxie/eabi.S src/mips/ffitarget.h	\
++	 src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h		\
++	 src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h		\
++	 src/m88k/ffi.c src/m88k/obsd.S src/m88k/ffitarget.h		\
++	 src/microblaze/ffi.c src/microblaze/sysv.S			\
++	 src/microblaze/ffitarget.h					\
++	 src/nios2/ffi.c src/nios2/ffitarget.h src/nios2/sysv.S		\
++	 src/powerpc/ffi.c src/powerpc/ffi_powerpc.h			\
++	 src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c		\
++	 src/powerpc/sysv.S src/powerpc/linux64.S			\
++	 src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S	\
++	 src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S	\
++	 src/powerpc/aix_closure.S src/powerpc/darwin_closure.S		\
++	 src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h		\
++	 src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h		\
++	 src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h src/sh64/ffi.c	\
++	 src/sh64/sysv.S src/sh64/ffitarget.h src/sparc/v8.S		\
++	 src/sparc/v9.S src/sparc/ffitarget.h src/sparc/ffi.c		\
++	 src/x86/darwin64.S src/x86/ffi.c src/x86/sysv.S		\
++	 src/x86/win32.S src/x86/darwin.S src/x86/win64.S		\
++	 src/x86/freebsd.S src/x86/ffi64.c src/x86/unix64.S		\
++	 src/x86/ffitarget.h src/pa/ffitarget.h src/pa/ffi.c		\
++	 src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c src/bfin/ffi.c	\
++	 src/bfin/ffitarget.h src/bfin/sysv.S src/frv/eabi.S		\
++	 src/frv/ffitarget.h src/dlmalloc.c src/tile/ffi.c		\
++	 src/tile/ffitarget.h src/tile/tile.S libtool-version		\
++	 src/vax/ffi.c src/vax/ffitarget.h src/vax/elfbsd.S		\
++	 src/xtensa/ffitarget.h src/xtensa/ffi.c src/xtensa/sysv.S	\
++	 ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4		\
++	 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4			\
++	 m4/ltversion.m4 src/arm/gentramp.sh src/debug.c msvcc.sh	\
++	 generate-darwin-source-and-headers.py				\
++	 libffi.xcodeproj/project.pbxproj src/arm/trampoline.S		\
++	 libtool-ldflags ChangeLog.libffi-3.1
+ 
+ info_TEXINFOS = doc/libffi.texi
+ 
+ # Work around what appears to be a GNU make bug handling MAKEFLAGS
+ # values defined in terms of make variables, as is the case for CC and
+ # friends when we are called from the top level Makefile.
+ AM_MAKEFLAGS = \
+ 	'AR_FLAGS=$(AR_FLAGS)' \
+@@ -462,46 +680,54 @@ AM_MAKEFLAGS = \
+ 	'AS=$(AS)' \
+ 	'CC=$(CC)' \
+ 	'CXX=$(CXX)' \
+ 	'LD=$(LD)' \
+ 	'NM=$(NM)' \
+ 	'RANLIB=$(RANLIB)' \
+ 	'DESTDIR=$(DESTDIR)'
+ 
++
++# Subdir rules rely on $(FLAGS_TO_PASS)
++FLAGS_TO_PASS = $(AM_MAKEFLAGS)
+ MAKEOVERRIDES = 
+-ACLOCAL_AMFLAGS = $(ACLOCAL_AMFLAGS) -I m4
+-lib_LTLIBRARIES = libffi.la
++toolexeclib_LTLIBRARIES = libffi.la
+ noinst_LTLIBRARIES = libffi_convenience.la
+-libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
++libffi_la_SOURCES = src/prep_cif.c src/types.c \
+ 		src/raw_api.c src/java_raw_api.c src/closures.c
+ 
+ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = libffi.pc
+ nodist_libffi_la_SOURCES = $(am__append_1) $(am__append_2) \
+ 	$(am__append_3) $(am__append_4) $(am__append_5) \
+ 	$(am__append_6) $(am__append_7) $(am__append_8) \
+ 	$(am__append_9) $(am__append_10) $(am__append_11) \
+ 	$(am__append_12) $(am__append_13) $(am__append_14) \
+ 	$(am__append_15) $(am__append_16) $(am__append_17) \
+ 	$(am__append_18) $(am__append_19) $(am__append_20) \
+ 	$(am__append_21) $(am__append_22) $(am__append_23) \
+-	$(am__append_24) $(am__append_25) $(am__append_26)
++	$(am__append_24) $(am__append_25) $(am__append_26) \
++	$(am__append_27) $(am__append_28) $(am__append_29) \
++	$(am__append_30) $(am__append_31) $(am__append_32) \
++	$(am__append_33) $(am__append_34) $(am__append_35) \
++	$(am__append_36) $(am__append_37) $(am__append_38) \
++	$(am__append_39)
+ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+-AM_CFLAGS = -Wall -g -fexceptions $(am__append_27) $(am__append_28)
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
++LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/libtool-ldflags $(LDFLAGS))
++AM_CFLAGS = $(am__append_40)
++libffi_la_LDFLAGS = -no-undefined -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+ all: fficonfig.h
+ 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+ 
+ .SUFFIXES:
+ .SUFFIXES: .S .c .dvi .lo .o .obj .ps
+-am--refresh:
++am--refresh: Makefile
+ 	@:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ 	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ 		&& exit 0; \
+@@ -527,111 +753,125 @@ Makefile: $(srcdir)/Makefile.in $(top_bu
+ 
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	$(am__cd) $(srcdir) && $(AUTOCONF)
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+ $(am__aclocal_m4_deps):
+ 
+ fficonfig.h: stamp-h1
+-	@if test ! -f $@; then \
+-	  rm -f stamp-h1; \
+-	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+-	else :; fi
++	@if test ! -f $@; then rm -f stamp-h1; else :; fi
++	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+ 
+ stamp-h1: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status
+ 	@rm -f stamp-h1
+ 	cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h
+ $(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+ 	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ 	rm -f stamp-h1
+ 	touch $@
+ 
+ distclean-hdr:
+ 	-rm -f fficonfig.h stamp-h1
+ libffi.pc: $(top_builddir)/config.status $(srcdir)/libffi.pc.in
+ 	cd $(top_builddir) && $(SHELL) ./config.status $@
+-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
++
++clean-noinstLTLIBRARIES:
++	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
++	@list='$(noinst_LTLIBRARIES)'; \
++	locs=`for p in $$list; do echo $$p; done | \
++	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
++	      sort -u`; \
++	test -z "$$locs" || { \
++	  echo rm -f $${locs}; \
++	  rm -f $${locs}; \
++	}
++
++install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++	@list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \
+ 	list2=; for p in $$list; do \
+ 	  if test -f $$p; then \
+ 	    list2="$$list2 $$p"; \
+ 	  else :; fi; \
+ 	done; \
+ 	test -z "$$list2" || { \
+-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(toolexeclibdir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(toolexeclibdir)" || exit 1; \
++	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(toolexeclibdir)'"; \
++	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(toolexeclibdir)"; \
+ 	}
+ 
+-uninstall-libLTLIBRARIES:
++uninstall-toolexeclibLTLIBRARIES:
+ 	@$(NORMAL_UNINSTALL)
+-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++	@list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \
+ 	for p in $$list; do \
+ 	  $(am__strip_dir) \
+-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
++	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$f'"; \
++	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$f"; \
+ 	done
+ 
+-clean-libLTLIBRARIES:
+-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+-	  test "$$dir" != "$$p" || dir=.; \
+-	  echo "rm -f \"$${dir}/so_locations\""; \
+-	  rm -f "$${dir}/so_locations"; \
+-	done
+-
+-clean-noinstLTLIBRARIES:
+-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+-	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+-	  test "$$dir" != "$$p" || dir=.; \
+-	  echo "rm -f \"$${dir}/so_locations\""; \
+-	  rm -f "$${dir}/so_locations"; \
+-	done
++clean-toolexeclibLTLIBRARIES:
++	-test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES)
++	@list='$(toolexeclib_LTLIBRARIES)'; \
++	locs=`for p in $$list; do echo $$p; done | \
++	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
++	      sort -u`; \
++	test -z "$$locs" || { \
++	  echo rm -f $${locs}; \
++	  rm -f $${locs}; \
++	}
+ src/$(am__dirstamp):
+ 	@$(MKDIR_P) src
+ 	@: > src/$(am__dirstamp)
+ src/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/$(DEPDIR)
+ 	@: > src/$(DEPDIR)/$(am__dirstamp)
+-src/debug.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+ src/prep_cif.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+ src/types.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+ src/raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+ src/java_raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+ src/closures.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
++src/debug.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+ src/mips/$(am__dirstamp):
+ 	@$(MKDIR_P) src/mips
+ 	@: > src/mips/$(am__dirstamp)
+ src/mips/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/mips/$(DEPDIR)
+ 	@: > src/mips/$(DEPDIR)/$(am__dirstamp)
+ src/mips/ffi.lo: src/mips/$(am__dirstamp) \
+ 	src/mips/$(DEPDIR)/$(am__dirstamp)
+ src/mips/o32.lo: src/mips/$(am__dirstamp) \
+ 	src/mips/$(DEPDIR)/$(am__dirstamp)
+ src/mips/n32.lo: src/mips/$(am__dirstamp) \
+ 	src/mips/$(DEPDIR)/$(am__dirstamp)
++src/bfin/$(am__dirstamp):
++	@$(MKDIR_P) src/bfin
++	@: > src/bfin/$(am__dirstamp)
++src/bfin/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/bfin/$(DEPDIR)
++	@: > src/bfin/$(DEPDIR)/$(am__dirstamp)
++src/bfin/ffi.lo: src/bfin/$(am__dirstamp) \
++	src/bfin/$(DEPDIR)/$(am__dirstamp)
++src/bfin/sysv.lo: src/bfin/$(am__dirstamp) \
++	src/bfin/$(DEPDIR)/$(am__dirstamp)
+ src/x86/$(am__dirstamp):
+ 	@$(MKDIR_P) src/x86
+ 	@: > src/x86/$(am__dirstamp)
+ src/x86/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/x86/$(DEPDIR)
+ 	@: > src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/ffi.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/sysv.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
++src/x86/win32.lo: src/x86/$(am__dirstamp) \
++	src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/freebsd.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
+-src/x86/win32.lo: src/x86/$(am__dirstamp) \
+-	src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/win64.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/darwin.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/ffi64.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
+ src/x86/darwin64.lo: src/x86/$(am__dirstamp) \
+ 	src/x86/$(DEPDIR)/$(am__dirstamp)
+@@ -682,24 +922,68 @@ src/m68k/$(am__dirstamp):
+ 	@: > src/m68k/$(am__dirstamp)
+ src/m68k/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/m68k/$(DEPDIR)
+ 	@: > src/m68k/$(DEPDIR)/$(am__dirstamp)
+ src/m68k/ffi.lo: src/m68k/$(am__dirstamp) \
+ 	src/m68k/$(DEPDIR)/$(am__dirstamp)
+ src/m68k/sysv.lo: src/m68k/$(am__dirstamp) \
+ 	src/m68k/$(DEPDIR)/$(am__dirstamp)
++src/m88k/$(am__dirstamp):
++	@$(MKDIR_P) src/m88k
++	@: > src/m88k/$(am__dirstamp)
++src/m88k/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/m88k/$(DEPDIR)
++	@: > src/m88k/$(DEPDIR)/$(am__dirstamp)
++src/m88k/ffi.lo: src/m88k/$(am__dirstamp) \
++	src/m88k/$(DEPDIR)/$(am__dirstamp)
++src/m88k/obsd.lo: src/m88k/$(am__dirstamp) \
++	src/m88k/$(DEPDIR)/$(am__dirstamp)
++src/moxie/$(am__dirstamp):
++	@$(MKDIR_P) src/moxie
++	@: > src/moxie/$(am__dirstamp)
++src/moxie/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/moxie/$(DEPDIR)
++	@: > src/moxie/$(DEPDIR)/$(am__dirstamp)
++src/moxie/ffi.lo: src/moxie/$(am__dirstamp) \
++	src/moxie/$(DEPDIR)/$(am__dirstamp)
++src/moxie/eabi.lo: src/moxie/$(am__dirstamp) \
++	src/moxie/$(DEPDIR)/$(am__dirstamp)
++src/microblaze/$(am__dirstamp):
++	@$(MKDIR_P) src/microblaze
++	@: > src/microblaze/$(am__dirstamp)
++src/microblaze/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/microblaze/$(DEPDIR)
++	@: > src/microblaze/$(DEPDIR)/$(am__dirstamp)
++src/microblaze/ffi.lo: src/microblaze/$(am__dirstamp) \
++	src/microblaze/$(DEPDIR)/$(am__dirstamp)
++src/microblaze/sysv.lo: src/microblaze/$(am__dirstamp) \
++	src/microblaze/$(DEPDIR)/$(am__dirstamp)
++src/nios2/$(am__dirstamp):
++	@$(MKDIR_P) src/nios2
++	@: > src/nios2/$(am__dirstamp)
++src/nios2/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/nios2/$(DEPDIR)
++	@: > src/nios2/$(DEPDIR)/$(am__dirstamp)
++src/nios2/sysv.lo: src/nios2/$(am__dirstamp) \
++	src/nios2/$(DEPDIR)/$(am__dirstamp)
++src/nios2/ffi.lo: src/nios2/$(am__dirstamp) \
++	src/nios2/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/$(am__dirstamp):
+ 	@$(MKDIR_P) src/powerpc
+ 	@: > src/powerpc/$(am__dirstamp)
+ src/powerpc/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/powerpc/$(DEPDIR)
+ 	@: > src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/ffi.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
++src/powerpc/ffi_sysv.lo: src/powerpc/$(am__dirstamp) \
++	src/powerpc/$(DEPDIR)/$(am__dirstamp)
++src/powerpc/ffi_linux64.lo: src/powerpc/$(am__dirstamp) \
++	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/sysv.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/ppc_closure.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/linux64.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/linux64_closure.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+@@ -708,26 +992,48 @@ src/powerpc/ffi_darwin.lo: src/powerpc/$
+ src/powerpc/aix.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/aix_closure.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/darwin.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ src/powerpc/darwin_closure.lo: src/powerpc/$(am__dirstamp) \
+ 	src/powerpc/$(DEPDIR)/$(am__dirstamp)
++src/aarch64/$(am__dirstamp):
++	@$(MKDIR_P) src/aarch64
++	@: > src/aarch64/$(am__dirstamp)
++src/aarch64/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/aarch64/$(DEPDIR)
++	@: > src/aarch64/$(DEPDIR)/$(am__dirstamp)
++src/aarch64/sysv.lo: src/aarch64/$(am__dirstamp) \
++	src/aarch64/$(DEPDIR)/$(am__dirstamp)
++src/aarch64/ffi.lo: src/aarch64/$(am__dirstamp) \
++	src/aarch64/$(DEPDIR)/$(am__dirstamp)
++src/arc/$(am__dirstamp):
++	@$(MKDIR_P) src/arc
++	@: > src/arc/$(am__dirstamp)
++src/arc/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/arc/$(DEPDIR)
++	@: > src/arc/$(DEPDIR)/$(am__dirstamp)
++src/arc/arcompact.lo: src/arc/$(am__dirstamp) \
++	src/arc/$(DEPDIR)/$(am__dirstamp)
++src/arc/ffi.lo: src/arc/$(am__dirstamp) \
++	src/arc/$(DEPDIR)/$(am__dirstamp)
+ src/arm/$(am__dirstamp):
+ 	@$(MKDIR_P) src/arm
+ 	@: > src/arm/$(am__dirstamp)
+ src/arm/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/arm/$(DEPDIR)
+ 	@: > src/arm/$(DEPDIR)/$(am__dirstamp)
+ src/arm/sysv.lo: src/arm/$(am__dirstamp) \
+ 	src/arm/$(DEPDIR)/$(am__dirstamp)
+ src/arm/ffi.lo: src/arm/$(am__dirstamp) \
+ 	src/arm/$(DEPDIR)/$(am__dirstamp)
++src/arm/trampoline.lo: src/arm/$(am__dirstamp) \
++	src/arm/$(DEPDIR)/$(am__dirstamp)
+ src/avr32/$(am__dirstamp):
+ 	@$(MKDIR_P) src/avr32
+ 	@: > src/avr32/$(am__dirstamp)
+ src/avr32/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/avr32/$(DEPDIR)
+ 	@: > src/avr32/$(DEPDIR)/$(am__dirstamp)
+ src/avr32/sysv.lo: src/avr32/$(am__dirstamp) \
+ 	src/avr32/$(DEPDIR)/$(am__dirstamp)
+@@ -748,26 +1054,16 @@ src/frv/$(am__dirstamp):
+ 	@: > src/frv/$(am__dirstamp)
+ src/frv/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/frv/$(DEPDIR)
+ 	@: > src/frv/$(DEPDIR)/$(am__dirstamp)
+ src/frv/eabi.lo: src/frv/$(am__dirstamp) \
+ 	src/frv/$(DEPDIR)/$(am__dirstamp)
+ src/frv/ffi.lo: src/frv/$(am__dirstamp) \
+ 	src/frv/$(DEPDIR)/$(am__dirstamp)
+-src/moxie/$(am__dirstamp):
+-	@$(MKDIR_P) src/moxie
+-	@: > src/moxie/$(am__dirstamp)
+-src/moxie/$(DEPDIR)/$(am__dirstamp):
+-	@$(MKDIR_P) src/moxie/$(DEPDIR)
+-	@: > src/moxie/$(DEPDIR)/$(am__dirstamp)
+-src/moxie/eabi.lo: src/moxie/$(am__dirstamp) \
+-	src/moxie/$(DEPDIR)/$(am__dirstamp)
+-src/moxie/ffi.lo: src/moxie/$(am__dirstamp) \
+-	src/moxie/$(DEPDIR)/$(am__dirstamp)
+ src/s390/$(am__dirstamp):
+ 	@$(MKDIR_P) src/s390
+ 	@: > src/s390/$(am__dirstamp)
+ src/s390/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/s390/$(DEPDIR)
+ 	@: > src/s390/$(DEPDIR)/$(am__dirstamp)
+ src/s390/sysv.lo: src/s390/$(am__dirstamp) \
+ 	src/s390/$(DEPDIR)/$(am__dirstamp)
+@@ -800,282 +1096,297 @@ src/pa/$(am__dirstamp):
+ src/pa/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/pa/$(DEPDIR)
+ 	@: > src/pa/$(DEPDIR)/$(am__dirstamp)
+ src/pa/linux.lo: src/pa/$(am__dirstamp) \
+ 	src/pa/$(DEPDIR)/$(am__dirstamp)
+ src/pa/ffi.lo: src/pa/$(am__dirstamp) src/pa/$(DEPDIR)/$(am__dirstamp)
+ src/pa/hpux32.lo: src/pa/$(am__dirstamp) \
+ 	src/pa/$(DEPDIR)/$(am__dirstamp)
+-libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES) 
+-	$(libffi_la_LINK) -rpath $(libdir) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
+-libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES) 
+-	$(LINK)  $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_LIBADD) $(LIBS)
++src/tile/$(am__dirstamp):
++	@$(MKDIR_P) src/tile
++	@: > src/tile/$(am__dirstamp)
++src/tile/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/tile/$(DEPDIR)
++	@: > src/tile/$(DEPDIR)/$(am__dirstamp)
++src/tile/tile.lo: src/tile/$(am__dirstamp) \
++	src/tile/$(DEPDIR)/$(am__dirstamp)
++src/tile/ffi.lo: src/tile/$(am__dirstamp) \
++	src/tile/$(DEPDIR)/$(am__dirstamp)
++src/xtensa/$(am__dirstamp):
++	@$(MKDIR_P) src/xtensa
++	@: > src/xtensa/$(am__dirstamp)
++src/xtensa/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/xtensa/$(DEPDIR)
++	@: > src/xtensa/$(DEPDIR)/$(am__dirstamp)
++src/xtensa/sysv.lo: src/xtensa/$(am__dirstamp) \
++	src/xtensa/$(DEPDIR)/$(am__dirstamp)
++src/xtensa/ffi.lo: src/xtensa/$(am__dirstamp) \
++	src/xtensa/$(DEPDIR)/$(am__dirstamp)
++src/metag/$(am__dirstamp):
++	@$(MKDIR_P) src/metag
++	@: > src/metag/$(am__dirstamp)
++src/metag/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/metag/$(DEPDIR)
++	@: > src/metag/$(DEPDIR)/$(am__dirstamp)
++src/metag/sysv.lo: src/metag/$(am__dirstamp) \
++	src/metag/$(DEPDIR)/$(am__dirstamp)
++src/metag/ffi.lo: src/metag/$(am__dirstamp) \
++	src/metag/$(DEPDIR)/$(am__dirstamp)
++src/vax/$(am__dirstamp):
++	@$(MKDIR_P) src/vax
++	@: > src/vax/$(am__dirstamp)
++src/vax/$(DEPDIR)/$(am__dirstamp):
++	@$(MKDIR_P) src/vax/$(DEPDIR)
++	@: > src/vax/$(DEPDIR)/$(am__dirstamp)
++src/vax/elfbsd.lo: src/vax/$(am__dirstamp) \
++	src/vax/$(DEPDIR)/$(am__dirstamp)
++src/vax/ffi.lo: src/vax/$(am__dirstamp) \
++	src/vax/$(DEPDIR)/$(am__dirstamp)
++
++libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES) $(EXTRA_libffi_la_DEPENDENCIES) 
++	$(AM_V_CCLD)$(libffi_la_LINK) -rpath $(toolexeclibdir) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
++
++libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES) $(EXTRA_libffi_convenience_la_DEPENDENCIES) 
++	$(AM_V_CCLD)$(LINK)  $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_LIBADD) $(LIBS)
+ 
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+-	-rm -f src/alpha/ffi.$(OBJEXT)
+-	-rm -f src/alpha/ffi.lo
+-	-rm -f src/alpha/osf.$(OBJEXT)
+-	-rm -f src/alpha/osf.lo
+-	-rm -f src/arm/ffi.$(OBJEXT)
+-	-rm -f src/arm/ffi.lo
+-	-rm -f src/arm/sysv.$(OBJEXT)
+-	-rm -f src/arm/sysv.lo
+-	-rm -f src/avr32/ffi.$(OBJEXT)
+-	-rm -f src/avr32/ffi.lo
+-	-rm -f src/avr32/sysv.$(OBJEXT)
+-	-rm -f src/avr32/sysv.lo
+-	-rm -f src/closures.$(OBJEXT)
+-	-rm -f src/closures.lo
+-	-rm -f src/cris/ffi.$(OBJEXT)
+-	-rm -f src/cris/ffi.lo
+-	-rm -f src/cris/sysv.$(OBJEXT)
+-	-rm -f src/cris/sysv.lo
+-	-rm -f src/debug.$(OBJEXT)
+-	-rm -f src/debug.lo
+-	-rm -f src/frv/eabi.$(OBJEXT)
+-	-rm -f src/frv/eabi.lo
+-	-rm -f src/frv/ffi.$(OBJEXT)
+-	-rm -f src/frv/ffi.lo
+-	-rm -f src/ia64/ffi.$(OBJEXT)
+-	-rm -f src/ia64/ffi.lo
+-	-rm -f src/ia64/unix.$(OBJEXT)
+-	-rm -f src/ia64/unix.lo
+-	-rm -f src/java_raw_api.$(OBJEXT)
+-	-rm -f src/java_raw_api.lo
+-	-rm -f src/m32r/ffi.$(OBJEXT)
+-	-rm -f src/m32r/ffi.lo
+-	-rm -f src/m32r/sysv.$(OBJEXT)
+-	-rm -f src/m32r/sysv.lo
+-	-rm -f src/m68k/ffi.$(OBJEXT)
+-	-rm -f src/m68k/ffi.lo
+-	-rm -f src/m68k/sysv.$(OBJEXT)
+-	-rm -f src/m68k/sysv.lo
+-	-rm -f src/mips/ffi.$(OBJEXT)
+-	-rm -f src/mips/ffi.lo
+-	-rm -f src/mips/n32.$(OBJEXT)
+-	-rm -f src/mips/n32.lo
+-	-rm -f src/mips/o32.$(OBJEXT)
+-	-rm -f src/mips/o32.lo
+-	-rm -f src/moxie/eabi.$(OBJEXT)
+-	-rm -f src/moxie/eabi.lo
+-	-rm -f src/moxie/ffi.$(OBJEXT)
+-	-rm -f src/moxie/ffi.lo
+-	-rm -f src/pa/ffi.$(OBJEXT)
+-	-rm -f src/pa/ffi.lo
+-	-rm -f src/pa/hpux32.$(OBJEXT)
+-	-rm -f src/pa/hpux32.lo
+-	-rm -f src/pa/linux.$(OBJEXT)
+-	-rm -f src/pa/linux.lo
+-	-rm -f src/powerpc/aix.$(OBJEXT)
+-	-rm -f src/powerpc/aix.lo
+-	-rm -f src/powerpc/aix_closure.$(OBJEXT)
+-	-rm -f src/powerpc/aix_closure.lo
+-	-rm -f src/powerpc/darwin.$(OBJEXT)
+-	-rm -f src/powerpc/darwin.lo
+-	-rm -f src/powerpc/darwin_closure.$(OBJEXT)
+-	-rm -f src/powerpc/darwin_closure.lo
+-	-rm -f src/powerpc/ffi.$(OBJEXT)
+-	-rm -f src/powerpc/ffi.lo
+-	-rm -f src/powerpc/ffi_darwin.$(OBJEXT)
+-	-rm -f src/powerpc/ffi_darwin.lo
+-	-rm -f src/powerpc/linux64.$(OBJEXT)
+-	-rm -f src/powerpc/linux64.lo
+-	-rm -f src/powerpc/linux64_closure.$(OBJEXT)
+-	-rm -f src/powerpc/linux64_closure.lo
+-	-rm -f src/powerpc/ppc_closure.$(OBJEXT)
+-	-rm -f src/powerpc/ppc_closure.lo
+-	-rm -f src/powerpc/sysv.$(OBJEXT)
+-	-rm -f src/powerpc/sysv.lo
+-	-rm -f src/prep_cif.$(OBJEXT)
+-	-rm -f src/prep_cif.lo
+-	-rm -f src/raw_api.$(OBJEXT)
+-	-rm -f src/raw_api.lo
+-	-rm -f src/s390/ffi.$(OBJEXT)
+-	-rm -f src/s390/ffi.lo
+-	-rm -f src/s390/sysv.$(OBJEXT)
+-	-rm -f src/s390/sysv.lo
+-	-rm -f src/sh/ffi.$(OBJEXT)
+-	-rm -f src/sh/ffi.lo
+-	-rm -f src/sh/sysv.$(OBJEXT)
+-	-rm -f src/sh/sysv.lo
+-	-rm -f src/sh64/ffi.$(OBJEXT)
+-	-rm -f src/sh64/ffi.lo
+-	-rm -f src/sh64/sysv.$(OBJEXT)
+-	-rm -f src/sh64/sysv.lo
+-	-rm -f src/sparc/ffi.$(OBJEXT)
+-	-rm -f src/sparc/ffi.lo
+-	-rm -f src/sparc/v8.$(OBJEXT)
+-	-rm -f src/sparc/v8.lo
+-	-rm -f src/sparc/v9.$(OBJEXT)
+-	-rm -f src/sparc/v9.lo
+-	-rm -f src/types.$(OBJEXT)
+-	-rm -f src/types.lo
+-	-rm -f src/x86/darwin.$(OBJEXT)
+-	-rm -f src/x86/darwin.lo
+-	-rm -f src/x86/darwin64.$(OBJEXT)
+-	-rm -f src/x86/darwin64.lo
+-	-rm -f src/x86/ffi.$(OBJEXT)
+-	-rm -f src/x86/ffi.lo
+-	-rm -f src/x86/ffi64.$(OBJEXT)
+-	-rm -f src/x86/ffi64.lo
+-	-rm -f src/x86/freebsd.$(OBJEXT)
+-	-rm -f src/x86/freebsd.lo
+-	-rm -f src/x86/sysv.$(OBJEXT)
+-	-rm -f src/x86/sysv.lo
+-	-rm -f src/x86/unix64.$(OBJEXT)
+-	-rm -f src/x86/unix64.lo
+-	-rm -f src/x86/win32.$(OBJEXT)
+-	-rm -f src/x86/win32.lo
+-	-rm -f src/x86/win64.$(OBJEXT)
+-	-rm -f src/x86/win64.lo
++	-rm -f src/*.$(OBJEXT)
++	-rm -f src/*.lo
++	-rm -f src/aarch64/*.$(OBJEXT)
++	-rm -f src/aarch64/*.lo
++	-rm -f src/alpha/*.$(OBJEXT)
++	-rm -f src/alpha/*.lo
++	-rm -f src/arc/*.$(OBJEXT)
++	-rm -f src/arc/*.lo
++	-rm -f src/arm/*.$(OBJEXT)
++	-rm -f src/arm/*.lo
++	-rm -f src/avr32/*.$(OBJEXT)
++	-rm -f src/avr32/*.lo
++	-rm -f src/bfin/*.$(OBJEXT)
++	-rm -f src/bfin/*.lo
++	-rm -f src/cris/*.$(OBJEXT)
++	-rm -f src/cris/*.lo
++	-rm -f src/frv/*.$(OBJEXT)
++	-rm -f src/frv/*.lo
++	-rm -f src/ia64/*.$(OBJEXT)
++	-rm -f src/ia64/*.lo
++	-rm -f src/m32r/*.$(OBJEXT)
++	-rm -f src/m32r/*.lo
++	-rm -f src/m68k/*.$(OBJEXT)
++	-rm -f src/m68k/*.lo
++	-rm -f src/m88k/*.$(OBJEXT)
++	-rm -f src/m88k/*.lo
++	-rm -f src/metag/*.$(OBJEXT)
++	-rm -f src/metag/*.lo
++	-rm -f src/microblaze/*.$(OBJEXT)
++	-rm -f src/microblaze/*.lo
++	-rm -f src/mips/*.$(OBJEXT)
++	-rm -f src/mips/*.lo
++	-rm -f src/moxie/*.$(OBJEXT)
++	-rm -f src/moxie/*.lo
++	-rm -f src/nios2/*.$(OBJEXT)
++	-rm -f src/nios2/*.lo
++	-rm -f src/pa/*.$(OBJEXT)
++	-rm -f src/pa/*.lo
++	-rm -f src/powerpc/*.$(OBJEXT)
++	-rm -f src/powerpc/*.lo
++	-rm -f src/s390/*.$(OBJEXT)
++	-rm -f src/s390/*.lo
++	-rm -f src/sh/*.$(OBJEXT)
++	-rm -f src/sh/*.lo
++	-rm -f src/sh64/*.$(OBJEXT)
++	-rm -f src/sh64/*.lo
++	-rm -f src/sparc/*.$(OBJEXT)
++	-rm -f src/sparc/*.lo
++	-rm -f src/tile/*.$(OBJEXT)
++	-rm -f src/tile/*.lo
++	-rm -f src/vax/*.$(OBJEXT)
++	-rm -f src/vax/*.lo
++	-rm -f src/x86/*.$(OBJEXT)
++	-rm -f src/x86/*.lo
++	-rm -f src/xtensa/*.$(OBJEXT)
++	-rm -f src/xtensa/*.lo
+ 
+ distclean-compile:
+ 	-rm -f *.tab.c
+ 
+ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/closures.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/debug.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/java_raw_api.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/prep_cif.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/raw_api.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/types.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/aarch64/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/aarch64/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/osf.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/arc/$(DEPDIR)/arcompact.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/arc/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/sysv.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/trampoline.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/sysv.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/bfin/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/bfin/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/eabi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/unix.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/sysv.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/m88k/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/m88k/$(DEPDIR)/obsd.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/metag/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/metag/$(DEPDIR)/sysv.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/microblaze/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/microblaze/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/n32.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/o32.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/moxie/$(DEPDIR)/eabi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/moxie/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/nios2/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/nios2/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/hpux32.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/linux.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix_closure.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin_closure.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_darwin.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_linux64.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64_closure.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ppc_closure.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/v8.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/v9.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/tile/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/tile/$(DEPDIR)/tile.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/vax/$(DEPDIR)/elfbsd.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/vax/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/darwin.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/darwin64.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi64.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/freebsd.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/sysv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/unix64.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win32.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win64.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/xtensa/$(DEPDIR)/ffi.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/xtensa/$(DEPDIR)/sysv.Plo@am__quote@
+ 
+-%.o: %.S
+-@am__fastdepCCAS_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
++.S.o:
++@am__fastdepCCAS_TRUE@	$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ @am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ @am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+-@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCCAS_FALSE@	$(CPPASCOMPILE) -c -o $@ $<
++@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $<
+ 
+-%.obj: %.S
+-@am__fastdepCCAS_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
++.S.obj:
++@am__fastdepCCAS_TRUE@	$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ @am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ @am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+-@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCCAS_FALSE@	$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
++@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ 
+-%.lo: %.S
+-@am__fastdepCCAS_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
++.S.lo:
++@am__fastdepCCAS_TRUE@	$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ @am__fastdepCCAS_TRUE@	$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ @am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+-@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCCAS_FALSE@	$(LTCPPASCOMPILE) -c -o $@ $<
++@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $<
+ 
+-%.o: %.c
+-@am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
++.c.o:
++@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
++@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+ 
+-%.obj: %.c
+-@am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
++.c.obj:
++@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
++@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ 
+-%.lo: %.c
+-@am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
++.c.lo:
++@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
++@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ 	-rm -rf src/.libs src/_libs
++	-rm -rf src/aarch64/.libs src/aarch64/_libs
+ 	-rm -rf src/alpha/.libs src/alpha/_libs
++	-rm -rf src/arc/.libs src/arc/_libs
+ 	-rm -rf src/arm/.libs src/arm/_libs
+ 	-rm -rf src/avr32/.libs src/avr32/_libs
++	-rm -rf src/bfin/.libs src/bfin/_libs
+ 	-rm -rf src/cris/.libs src/cris/_libs
+ 	-rm -rf src/frv/.libs src/frv/_libs
+ 	-rm -rf src/ia64/.libs src/ia64/_libs
+ 	-rm -rf src/m32r/.libs src/m32r/_libs
+ 	-rm -rf src/m68k/.libs src/m68k/_libs
++	-rm -rf src/m88k/.libs src/m88k/_libs
++	-rm -rf src/metag/.libs src/metag/_libs
++	-rm -rf src/microblaze/.libs src/microblaze/_libs
+ 	-rm -rf src/mips/.libs src/mips/_libs
+ 	-rm -rf src/moxie/.libs src/moxie/_libs
++	-rm -rf src/nios2/.libs src/nios2/_libs
+ 	-rm -rf src/pa/.libs src/pa/_libs
+ 	-rm -rf src/powerpc/.libs src/powerpc/_libs
+ 	-rm -rf src/s390/.libs src/s390/_libs
+ 	-rm -rf src/sh/.libs src/sh/_libs
+ 	-rm -rf src/sh64/.libs src/sh64/_libs
+ 	-rm -rf src/sparc/.libs src/sparc/_libs
++	-rm -rf src/tile/.libs src/tile/_libs
++	-rm -rf src/vax/.libs src/vax/_libs
+ 	-rm -rf src/x86/.libs src/x86/_libs
++	-rm -rf src/xtensa/.libs src/xtensa/_libs
+ 
+ distclean-libtool:
+ 	-rm -f libtool config.lt
+ doc/$(am__dirstamp):
+ 	@$(MKDIR_P) doc
+ 	@: > doc/$(am__dirstamp)
+ 
+ $(srcdir)/doc/libffi.info: doc/libffi.texi $(srcdir)/doc/version.texi
+-	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
++	$(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ 	am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ 	rm -rf $$backupdir && mkdir $$backupdir && \
+ 	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ 	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ 	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ 	  done; \
+ 	else :; fi && \
+ 	cd "$$am__cwd"; \
+@@ -1087,28 +1398,30 @@ doc/$(am__dirstamp):
+ 	else \
+ 	  rc=$$?; \
+ 	  $(am__cd) $(srcdir) && \
+ 	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ 	fi; \
+ 	rm -rf $$backupdir; exit $$rc
+ 
+ doc/libffi.dvi: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
+-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
++	$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ 	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+-	$(TEXI2DVI) -o $@ `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi
++	$(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
++	`test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi
+ 
+ doc/libffi.pdf: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
+-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
++	$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ 	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+-	$(TEXI2PDF) -o $@ `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi
++	$(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
++	`test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi
+ 
+ doc/libffi.html: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
+-	rm -rf $(@:.html=.htp)
+-	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
++	$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
++	$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+ 	 -o $(@:.html=.htp) `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi; \
+ 	then \
+ 	  rm -rf $@; \
+ 	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ 	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ 	else \
+ 	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ 	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+@@ -1129,19 +1442,19 @@ doc/libffi.html: doc/libffi.texi $(srcdi
+ 	-@rm -f vti.tmp
+ 	@cp $(srcdir)/doc/version.texi $@
+ 
+ mostlyclean-vti:
+ 	-rm -f vti.tmp
+ 
+ maintainer-clean-vti:
+ @MAINTAINER_MODE_TRUE@	-rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi
+-%.ps: %.dvi
+-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+-	$(DVIPS) -o $@ $<
++.dvi.ps:
++	$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
++	$(DVIPS) $(AM_V_texinfo) -o $@ $<
+ 
+ uninstall-dvi-am:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ 	for p in $$list; do \
+ 	  $(am__strip_dir) \
+ 	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ 	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+@@ -1153,19 +1466,17 @@ uninstall-html-am:
+ 	for p in $$list; do \
+ 	  $(am__strip_dir) \
+ 	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ 	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ 	done
+ 
+ uninstall-info-am:
+ 	@$(PRE_UNINSTALL)
+-	@if test -d '$(DESTDIR)$(infodir)' && \
+-	    (install-info --version && \
+-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
++	@if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ 	  list='$(INFO_DEPS)'; \
+ 	  for file in $$list; do \
+ 	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ 	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ 	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ 	  done; \
+ 	else :; fi
+@@ -1212,184 +1523,155 @@ dist-info: $(INFO_DEPS)
+ 	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ 	      test -f "$(distdir)/$$relfile" || \
+ 		cp -p $$file "$(distdir)/$$relfile"; \
+ 	    else :; fi; \
+ 	  done; \
+ 	done
+ 
+ mostlyclean-aminfo:
+-	-rm -rf libffi.aux libffi.cp libffi.cps libffi.fn libffi.ky libffi.log \
+-	  libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr
++	-rm -rf doc/libffi.t2d doc/libffi.t2p
+ 
+ clean-aminfo:
+ 	-test -z "doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html" \
+ 	|| rm -rf doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html
+ 
+ maintainer-clean-aminfo:
+ 	@list='$(INFO_DEPS)'; for i in $$list; do \
+ 	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ 	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ 	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ 	done
+ install-pkgconfigDATA: $(pkgconfig_DATA)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ 	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
++	fi; \
+ 	for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  echo "$$d$$p"; \
+ 	done | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ 	done
+ 
+ uninstall-pkgconfigDATA:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
++	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+ 
+ # This directory's subdirectories are mostly independent; you can cd
+-# into them and run `make' without going through this Makefile.
+-# To change the values of `make' variables: instead of editing Makefiles,
+-# (1) if the variable is set in `config.status', edit `config.status'
+-#     (which will cause the Makefiles to be regenerated when you run `make');
+-# (2) otherwise, pass the desired values on the `make' command line.
+-$(RECURSIVE_TARGETS):
+-	@fail= failcom='exit 1'; \
+-	for f in x $$MAKEFLAGS; do \
+-	  case $$f in \
+-	    *=* | --[!k]*);; \
+-	    *k*) failcom='fail=yes';; \
+-	  esac; \
+-	done; \
++# into them and run 'make' without going through this Makefile.
++# To change the values of 'make' variables: instead of editing Makefiles,
++# (1) if the variable is set in 'config.status', edit 'config.status'
++#     (which will cause the Makefiles to be regenerated when you run 'make');
++# (2) otherwise, pass the desired values on the 'make' command line.
++$(am__recursive_targets):
++	@fail=; \
++	if $(am__make_keepgoing); then \
++	  failcom='fail=yes'; \
++	else \
++	  failcom='exit 1'; \
++	fi; \
+ 	dot_seen=no; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+-	list='$(SUBDIRS)'; for subdir in $$list; do \
++	case "$@" in \
++	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++	  *) list='$(SUBDIRS)' ;; \
++	esac; \
++	for subdir in $$list; do \
+ 	  echo "Making $$target in $$subdir"; \
+ 	  if test "$$subdir" = "."; then \
+ 	    dot_seen=yes; \
+ 	    local_target="$$target-am"; \
+ 	  else \
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	  || eval $$failcom; \
+ 	done; \
+ 	if test "$$dot_seen" = "no"; then \
+ 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ 	fi; test -z "$$fail"
+ 
+-$(RECURSIVE_CLEAN_TARGETS):
+-	@fail= failcom='exit 1'; \
+-	for f in x $$MAKEFLAGS; do \
+-	  case $$f in \
+-	    *=* | --[!k]*);; \
+-	    *k*) failcom='fail=yes';; \
+-	  esac; \
+-	done; \
+-	dot_seen=no; \
+-	case "$@" in \
+-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+-	  *) list='$(SUBDIRS)' ;; \
+-	esac; \
+-	rev=''; for subdir in $$list; do \
+-	  if test "$$subdir" = "."; then :; else \
+-	    rev="$$subdir $$rev"; \
+-	  fi; \
+-	done; \
+-	rev="$$rev ."; \
+-	target=`echo $@ | sed s/-recursive//`; \
+-	for subdir in $$rev; do \
+-	  echo "Making $$target in $$subdir"; \
+-	  if test "$$subdir" = "."; then \
+-	    local_target="$$target-am"; \
+-	  else \
+-	    local_target="$$target"; \
+-	  fi; \
+-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+-	  || eval $$failcom; \
+-	done && test -z "$$fail"
+-tags-recursive:
+-	list='$(SUBDIRS)'; for subdir in $$list; do \
+-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+-	done
+-ctags-recursive:
+-	list='$(SUBDIRS)'; for subdir in $$list; do \
+-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+-	done
++ID: $(am__tagged_files)
++	$(am__define_uniq_tagged_files); mkid -fID $$unique
++tags: tags-recursive
++TAGS: tags
+ 
+-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+-	unique=`for i in $$list; do \
+-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+-	  done | \
+-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+-	mkid -fID $$unique
+-tags: TAGS
+-
+-TAGS: tags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \
+-		$(TAGS_FILES) $(LISP)
++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ 	set x; \
+ 	here=`pwd`; \
+ 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ 	  include_option=--etags-include; \
+ 	  empty_fix=.; \
+ 	else \
+ 	  include_option=--include; \
+ 	  empty_fix=; \
+ 	fi; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+ 	    test ! -f $$subdir/TAGS || \
+ 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ 	  fi; \
+ 	done; \
+-	list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \
+-	unique=`for i in $$list; do \
+-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+-	  done | \
+-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	$(am__define_uniq_tagged_files); \
+ 	shift; \
+ 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ 	  test -n "$$unique" || unique=$$empty_fix; \
+ 	  if test $$# -gt 0; then \
+ 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	      "$$@" $$unique; \
+ 	  else \
+ 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	      $$unique; \
+ 	  fi; \
+ 	fi
+-ctags: CTAGS
+-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \
+-		$(TAGS_FILES) $(LISP)
+-	list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \
+-	unique=`for i in $$list; do \
+-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+-	  done | \
+-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++ctags: ctags-recursive
++
++CTAGS: ctags
++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
++	$(am__define_uniq_tagged_files); \
+ 	test -z "$(CTAGS_ARGS)$$unique" \
+ 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ 	     $$unique
+ 
+ GTAGS:
+ 	here=`$(am__cd) $(top_builddir) && pwd` \
+ 	  && $(am__cd) $(top_srcdir) \
+ 	  && gtags -i $(GTAGS_ARGS) "$$here"
++cscope: cscope.files
++	test ! -s cscope.files \
++	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
++clean-cscope:
++	-rm -f cscope.files
++cscope.files: clean-cscope cscopelist
++cscopelist: cscopelist-recursive
++
++cscopelist-am: $(am__tagged_files)
++	list='$(am__tagged_files)'; \
++	case "$(srcdir)" in \
++	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
++	  *) sdir=$(subdir)/$(srcdir) ;; \
++	esac; \
++	for i in $$list; do \
++	  if test -f "$$i"; then \
++	    echo "$(subdir)/$$i"; \
++	  else \
++	    echo "$$sdir/$$i"; \
++	  fi; \
++	done >> $(top_builddir)/cscope.files
+ 
+ distclean-tags:
+ 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+ 
+ distdir: $(DISTFILES)
+ 	$(am__remove_distdir)
+ 	test -d "$(distdir)" || mkdir "$(distdir)"
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	list='$(DISTFILES)'; \
+ 	  dist_files=`for file in $$list; do echo $$file; done | \
+@@ -1415,23 +1697,20 @@ distdir: $(DISTFILES)
+ 	  else \
+ 	    test -f "$(distdir)/$$file" \
+ 	    || cp -p $$d/$$file "$(distdir)/$$file" \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+ 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ 	  if test "$$subdir" = .; then :; else \
+-	    test -d "$(distdir)/$$subdir" \
+-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+-	    || exit 1; \
+-	  fi; \
+-	done
+-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+-	  if test "$$subdir" = .; then :; else \
++	    $(am__make_dryrun) \
++	      || test -d "$(distdir)/$$subdir" \
++	      || $(MKDIR_P) "$(distdir)/$$subdir" \
++	      || exit 1; \
+ 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ 	    $(am__relativize); \
+ 	    new_distdir=$$reldir; \
+ 	    dir1=$$subdir; dir2="$(top_distdir)"; \
+ 	    $(am__relativize); \
+ 	    new_top_distdir=$$reldir; \
+ 	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ 	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+@@ -1443,87 +1722,88 @@ distdir: $(DISTFILES)
+ 		am__skip_length_check=: \
+ 		am__skip_mode_fix=: \
+ 	        distdir) \
+ 	      || exit 1; \
+ 	  fi; \
+ 	done
+ 	$(MAKE) $(AM_MAKEFLAGS) \
+ 	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+-	  dist-info
++	  dist-info dist-hook
+ 	-test -n "$(am__skip_mode_fix)" \
+ 	|| find "$(distdir)" -type d ! -perm -755 \
+ 		-exec chmod u+rwx,go+rx {} \; -o \
+ 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ 	|| chmod -R a+r "$(distdir)"
+ dist-gzip: distdir
+ 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+-	$(am__remove_distdir)
++	$(am__post_remove_distdir)
+ 
+ dist-bzip2: distdir
+-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+-	$(am__remove_distdir)
++	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
++	$(am__post_remove_distdir)
+ 
+-dist-lzma: distdir
+-	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+-	$(am__remove_distdir)
++dist-lzip: distdir
++	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
++	$(am__post_remove_distdir)
+ 
+ dist-xz: distdir
+-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+-	$(am__remove_distdir)
++	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
++	$(am__post_remove_distdir)
+ 
+ dist-tarZ: distdir
+ 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+-	$(am__remove_distdir)
++	$(am__post_remove_distdir)
+ 
+ dist-shar: distdir
+ 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+-	$(am__remove_distdir)
++	$(am__post_remove_distdir)
+ 
+ dist-zip: distdir
+ 	-rm -f $(distdir).zip
+ 	zip -rq $(distdir).zip $(distdir)
+-	$(am__remove_distdir)
++	$(am__post_remove_distdir)
+ 
+-dist dist-all: distdir
+-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+-	$(am__remove_distdir)
++dist dist-all:
++	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
++	$(am__post_remove_distdir)
+ 
+ # This target untars the dist file and tries a VPATH configuration.  Then
+ # it guarantees that the distribution is self-contained by making another
+ # tarfile.
+ distcheck: dist
+ 	case '$(DIST_ARCHIVES)' in \
+ 	*.tar.gz*) \
+ 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ 	*.tar.bz2*) \
+ 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+-	*.tar.lzma*) \
+-	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
++	*.tar.lz*) \
++	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ 	*.tar.xz*) \
+ 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ 	*.tar.Z*) \
+ 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ 	*.shar.gz*) \
+ 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ 	*.zip*) \
+ 	  unzip $(distdir).zip ;;\
+ 	esac
+-	chmod -R a-w $(distdir); chmod a+w $(distdir)
+-	mkdir $(distdir)/_build
+-	mkdir $(distdir)/_inst
++	chmod -R a-w $(distdir)
++	chmod u+w $(distdir)
++	mkdir $(distdir)/_build $(distdir)/_inst
+ 	chmod a-w $(distdir)
+ 	test -d $(distdir)/_build || exit 0; \
+ 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ 	  && am__cwd=`pwd` \
+ 	  && $(am__cd) $(distdir)/_build \
+ 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ 	    $(DISTCHECK_CONFIGURE_FLAGS) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) check \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) install \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+@@ -1537,23 +1817,31 @@ distcheck: dist
+ 	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ 	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ 	  && rm -rf "$$dc_destdir" \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+ 	  && rm -rf $(DIST_ARCHIVES) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ 	  && cd "$$am__cwd" \
+ 	  || exit 1
+-	$(am__remove_distdir)
++	$(am__post_remove_distdir)
+ 	@(echo "$(distdir) archives ready for distribution: "; \
+ 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+ distuninstallcheck:
+-	@$(am__cd) '$(distuninstallcheck_dir)' \
+-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
++	@test -n '$(distuninstallcheck_dir)' || { \
++	  echo 'ERROR: trying to run $@ with an empty' \
++	       '$$(distuninstallcheck_dir)' >&2; \
++	  exit 1; \
++	}; \
++	$(am__cd) '$(distuninstallcheck_dir)' || { \
++	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
++	  exit 1; \
++	}; \
++	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ 	   || { echo "ERROR: files left after uninstall:" ; \
+ 	        if test -n "$(DESTDIR)"; then \
+ 	          echo "  (check DESTDIR support)"; \
+ 	        fi ; \
+ 	        $(distuninstallcheck_listfiles) ; \
+ 	        exit 1; } >&2
+ distcleancheck: distclean
+ 	@if test '$(srcdir)' = . ; then \
+@@ -1564,89 +1852,115 @@ distcleancheck: distclean
+ 	  || { echo "ERROR: files left in build directory after distclean:" ; \
+ 	       $(distcleancheck_listfiles) ; \
+ 	       exit 1; } >&2
+ check-am: all-am
+ check: check-recursive
+ all-am: Makefile $(INFO_DEPS) $(LTLIBRARIES) $(DATA) fficonfig.h
+ installdirs: installdirs-recursive
+ installdirs-am:
+-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(pkgconfigdir)"; do \
++	for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+ 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ 	done
+ install: install-recursive
+ install-exec: install-exec-recursive
+ install-data: install-data-recursive
+ uninstall: uninstall-recursive
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-recursive
+ install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ 	-rm -f doc/$(am__dirstamp)
+ 	-rm -f src/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/$(am__dirstamp)
++	-rm -f src/aarch64/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/aarch64/$(am__dirstamp)
+ 	-rm -f src/alpha/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/alpha/$(am__dirstamp)
++	-rm -f src/arc/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/arc/$(am__dirstamp)
+ 	-rm -f src/arm/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/arm/$(am__dirstamp)
+ 	-rm -f src/avr32/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/avr32/$(am__dirstamp)
++	-rm -f src/bfin/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/bfin/$(am__dirstamp)
+ 	-rm -f src/cris/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/cris/$(am__dirstamp)
+ 	-rm -f src/frv/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/frv/$(am__dirstamp)
+ 	-rm -f src/ia64/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/ia64/$(am__dirstamp)
+ 	-rm -f src/m32r/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/m32r/$(am__dirstamp)
+ 	-rm -f src/m68k/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/m68k/$(am__dirstamp)
++	-rm -f src/m88k/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/m88k/$(am__dirstamp)
++	-rm -f src/metag/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/metag/$(am__dirstamp)
++	-rm -f src/microblaze/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/microblaze/$(am__dirstamp)
+ 	-rm -f src/mips/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/mips/$(am__dirstamp)
+ 	-rm -f src/moxie/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/moxie/$(am__dirstamp)
++	-rm -f src/nios2/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/nios2/$(am__dirstamp)
+ 	-rm -f src/pa/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/pa/$(am__dirstamp)
+ 	-rm -f src/powerpc/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/powerpc/$(am__dirstamp)
+ 	-rm -f src/s390/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/s390/$(am__dirstamp)
+ 	-rm -f src/sh/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/sh/$(am__dirstamp)
+ 	-rm -f src/sh64/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/sh64/$(am__dirstamp)
+ 	-rm -f src/sparc/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/sparc/$(am__dirstamp)
++	-rm -f src/tile/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/tile/$(am__dirstamp)
++	-rm -f src/vax/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/vax/$(am__dirstamp)
+ 	-rm -f src/x86/$(DEPDIR)/$(am__dirstamp)
+ 	-rm -f src/x86/$(am__dirstamp)
++	-rm -f src/xtensa/$(DEPDIR)/$(am__dirstamp)
++	-rm -f src/xtensa/$(am__dirstamp)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+ 	@echo "it deletes files that may require special tools to rebuild."
+ clean: clean-recursive
+ 
+-clean-am: clean-aminfo clean-generic clean-libLTLIBRARIES \
+-	clean-libtool clean-noinstLTLIBRARIES mostlyclean-am
++clean-am: clean-aminfo clean-generic clean-libtool \
++	clean-noinstLTLIBRARIES clean-toolexeclibLTLIBRARIES \
++	mostlyclean-am
+ 
+ distclean: distclean-recursive
+ 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+-	-rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/moxie/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR)
++	-rm -rf src/$(DEPDIR) src/aarch64/$(DEPDIR) src/alpha/$(DEPDIR) src/arc/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/bfin/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/m88k/$(DEPDIR) src/metag/$(DEPDIR) src/microblaze/$(DEPDIR) src/mips/$(DEPDIR) src/moxie/$(DEPDIR) src/nios2/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/tile/$(DEPDIR) src/vax/$(DEPDIR) src/x86/$(DEPDIR) src/xtensa/$(DEPDIR)
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-compile distclean-generic \
+ 	distclean-hdr distclean-libtool distclean-tags
+ 
+ dvi: dvi-recursive
+ 
+ dvi-am: $(DVIS)
+ 
+@@ -1659,56 +1973,68 @@ info: info-recursive
+ info-am: $(INFO_DEPS)
+ 
+ install-data-am: install-info-am install-pkgconfigDATA
+ 
+ install-dvi: install-dvi-recursive
+ 
+ install-dvi-am: $(DVIS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+ 	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
++	fi; \
+ 	for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  echo "$$d$$p"; \
+ 	done | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ 	done
+-install-exec-am: install-libLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES
++
++install-html: install-html-recursive
+ 
+ install-html-am: $(HTMLS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+ 	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
++	fi; \
+ 	for p in $$list; do \
+ 	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  $(am__strip_dir) \
+-	  if test -d "$$d$$p"; then \
++	  d2=$$d$$p; \
++	  if test -d "$$d2"; then \
+ 	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ 	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+-	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+-	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
++	    echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ 	  else \
+-	    list2="$$list2 $$d$$p"; \
++	    list2="$$list2 $$d2"; \
+ 	  fi; \
+ 	done; \
+ 	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ 	done; }
+ install-info: install-info-recursive
+ 
+ install-info-am: $(INFO_DEPS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ 	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
++	fi; \
+ 	for file in $$list; do \
+ 	  case $$file in \
+ 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ 	  esac; \
+ 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ 	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ 	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ 	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+@@ -1716,57 +2042,64 @@ install-info-am: $(INFO_DEPS)
+ 	      echo "$$ifile"; \
+ 	    else : ; fi; \
+ 	  done; \
+ 	done | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ 	@$(POST_INSTALL)
+-	@if (install-info --version && \
+-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
++	@if $(am__can_run_installinfo); then \
+ 	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ 	  for file in $$list; do \
+ 	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ 	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ 	  done; \
+ 	else : ; fi
+ install-man:
+ 
++install-pdf: install-pdf-recursive
++
+ install-pdf-am: $(PDFS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+ 	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
++	fi; \
+ 	for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  echo "$$d$$p"; \
+ 	done | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+ install-ps: install-ps-recursive
+ 
+ install-ps-am: $(PSS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+ 	@list='$(PSS)'; test -n "$(psdir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
++	fi; \
+ 	for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  echo "$$d$$p"; \
+ 	done | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-recursive
+ 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ 	-rm -rf $(top_srcdir)/autom4te.cache
+-	-rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/moxie/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR)
++	-rm -rf src/$(DEPDIR) src/aarch64/$(DEPDIR) src/alpha/$(DEPDIR) src/arc/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/bfin/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/m88k/$(DEPDIR) src/metag/$(DEPDIR) src/microblaze/$(DEPDIR) src/mips/$(DEPDIR) src/moxie/$(DEPDIR) src/nios2/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/tile/$(DEPDIR) src/vax/$(DEPDIR) src/x86/$(DEPDIR) src/xtensa/$(DEPDIR)
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ 	maintainer-clean-generic maintainer-clean-vti
+ 
+ mostlyclean: mostlyclean-recursive
+ 
+ mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
+ 	mostlyclean-generic mostlyclean-libtool mostlyclean-vti
+@@ -1775,46 +2108,44 @@ pdf: pdf-recursive
+ 
+ pdf-am: $(PDFS)
+ 
+ ps: ps-recursive
+ 
+ ps-am: $(PSS)
+ 
+ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+-	uninstall-libLTLIBRARIES uninstall-pdf-am \
+-	uninstall-pkgconfigDATA uninstall-ps-am
++	uninstall-pdf-am uninstall-pkgconfigDATA uninstall-ps-am \
++	uninstall-toolexeclibLTLIBRARIES
+ 
+-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+-	ctags-recursive install-am install-strip tags-recursive
++.MAKE: $(am__recursive_targets) all install-am install-strip
+ 
+-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+-	all all-am am--refresh check check-am clean clean-aminfo \
+-	clean-generic clean-libLTLIBRARIES clean-libtool \
+-	clean-noinstLTLIBRARIES ctags ctags-recursive dist dist-all \
+-	dist-bzip2 dist-gzip dist-info dist-lzma dist-shar dist-tarZ \
+-	dist-xz dist-zip distcheck distclean distclean-compile \
+-	distclean-generic distclean-hdr distclean-libtool \
+-	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+-	dvi-am html html-am info info-am install install-am \
+-	install-data install-data-am install-dvi install-dvi-am \
+-	install-exec install-exec-am install-html install-html-am \
+-	install-info install-info-am install-libLTLIBRARIES \
++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
++	am--refresh check check-am clean clean-aminfo clean-cscope \
++	clean-generic clean-libtool clean-noinstLTLIBRARIES \
++	clean-toolexeclibLTLIBRARIES cscope cscopelist-am ctags \
++	ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \
++	dist-info dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
++	distcheck distclean distclean-compile distclean-generic \
++	distclean-hdr distclean-libtool distclean-tags distcleancheck \
++	distdir distuninstallcheck dvi dvi-am html html-am info \
++	info-am install install-am install-data install-data-am \
++	install-dvi install-dvi-am install-exec install-exec-am \
++	install-html install-html-am install-info install-info-am \
+ 	install-man install-pdf install-pdf-am install-pkgconfigDATA \
+-	install-ps install-ps-am install-strip installcheck \
+-	installcheck-am installdirs installdirs-am maintainer-clean \
++	install-ps install-ps-am install-strip \
++	install-toolexeclibLTLIBRARIES installcheck installcheck-am \
++	installdirs installdirs-am maintainer-clean \
+ 	maintainer-clean-aminfo maintainer-clean-generic \
+ 	maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+-	mostlyclean-vti pdf pdf-am ps ps-am tags tags-recursive \
+-	uninstall uninstall-am uninstall-dvi-am uninstall-html-am \
+-	uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \
+-	uninstall-pkgconfigDATA uninstall-ps-am
++	mostlyclean-vti pdf pdf-am ps ps-am tags tags-am uninstall \
++	uninstall-am uninstall-dvi-am uninstall-html-am \
++	uninstall-info-am uninstall-pdf-am uninstall-pkgconfigDATA \
++	uninstall-ps-am uninstall-toolexeclibLTLIBRARIES
+ 
+ 
+-# No install-html or install-pdf support in automake yet
+-.PHONY: install-html install-pdf
+-install-html:
+-install-pdf:
++dist-hook:
++	if [ -d $(top_srcdir)/.git ] ; then git -C $(top_srcdir) log --no-decorate ; else echo 'See git log for history.' ; fi > $(distdir)/ChangeLog
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff --git a/js/src/ctypes/libffi/README b/js/src/ctypes/libffi/README
+--- a/js/src/ctypes/libffi/README
++++ b/js/src/ctypes/libffi/README
+@@ -1,12 +1,12 @@
+ Status
+ ======
+ 
+-libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web
++libffi-3.1 was released on TBD.  Check the libffi web
+ page for updates: <URL:http://sourceware.org/libffi/>.
+ 
+ 
+ What is libffi?
+ ===============
+ 
+ Compilers for high level languages generate code that follow certain
+ conventions. These conventions are necessary, in part, for separate
+@@ -38,70 +38,102 @@ between the two languages.
+ 
+ Supported Platforms
+ ===================
+ 
+ Libffi has been ported to many different platforms.
+ For specific configuration details and testing status, please
+ refer to the wiki page here:
+ 
+- http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10
++ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.1
+ 
+ At the time of release, the following basic configurations have been
+ tested:
+ 
+-|--------------+------------------|
+-| Architecture | Operating System |
+-|--------------+------------------|
+-| Alpha        | Linux            |
+-| Alpha        | Tru64            |
+-| ARM          | Linux            |
+-| AVR32        | Linux            |
+-| HPPA         | HPUX             |
+-| IA-64        | Linux            |
+-| MIPS         | IRIX             |
+-| MIPS         | Linux            |
+-| MIPS64       | Linux            |
+-| PowerPC      | Linux            |
+-| PowerPC      | Mac OSX          |
+-| PowerPC      | FreeBSD          |
+-| PowerPC64    | Linux            |
+-| S390         | Linux            |
+-| S390X        | Linux            |
+-| SPARC        | Linux            |
+-| SPARC        | Solaris          |
+-| SPARC64      | Linux            |
+-| SPARC64      | FreeBSD          |
+-| X86          | FreeBSD          |
+-| X86          | kFreeBSD         |
+-| X86          | Linux            |
+-| X86          | Mac OSX          |
+-| X86          | OpenBSD          |
+-| X86          | OS/2             |
+-| X86          | Solaris          |
+-| X86          | Windows/Cygwin   |
+-| X86          | Windows/MingW    |
+-| X86-64       | FreeBSD          |
+-| X86-64       | Linux            |
+-| X86-64       | OpenBSD          |
+-| X86-64       | Windows/MingW    |
+-|--------------+------------------|
++|-----------------+------------------+-------------------------|
++| Architecture    | Operating System | Compiler                |
++|-----------------+------------------+-------------------------|
++| AArch64 (ARM64) | iOS              | Clang                   |
++| AArch64         | Linux            | GCC                     |
++| Alpha           | Linux            | GCC                     |
++| Alpha           | Tru64            | GCC                     |
++| ARC             | Linux            | GCC                     |
++| ARM             | Linux            | GCC                     |
++| ARM             | iOS              | GCC                     |
++| AVR32           | Linux            | GCC                     |
++| Blackfin        | uClinux          | GCC                     |
++| HPPA            | HPUX             | GCC                     |
++| IA-64           | Linux            | GCC                     |
++| M68K            | FreeMiNT         | GCC                     |
++| M68K            | Linux            | GCC                     |
++| M68K            | RTEMS            | GCC                     |
++| M88K            | OpenBSD/mvme88k  | GCC                     |
++| Meta            | Linux            | GCC                     |
++| MicroBlaze      | Linux            | GCC                     |
++| MIPS            | IRIX             | GCC                     |
++| MIPS            | Linux            | GCC                     |
++| MIPS            | RTEMS            | GCC                     |
++| MIPS64          | Linux            | GCC                     |
++| Moxie           | Bare metal       | GCC                     |
++| Nios II         | Linux            | GCC                     |
++| PowerPC 32-bit  | AIX              | IBM XL C                |
++| PowerPC 64-bit  | AIX              | IBM XL C                |
++| PowerPC         | AMIGA            | GCC                     |
++| PowerPC         | Linux            | GCC                     |
++| PowerPC         | Mac OSX          | GCC                     |
++| PowerPC         | FreeBSD          | GCC                     |
++| PowerPC 64-bit  | FreeBSD          | GCC                     |
++| PowerPC 64-bit  | Linux ELFv1      | GCC                     |
++| PowerPC 64-bit  | Linux ELFv2      | GCC                     |
++| S390            | Linux            | GCC                     |
++| S390X           | Linux            | GCC                     |
++| SPARC           | Linux            | GCC                     |
++| SPARC           | Solaris          | GCC                     |
++| SPARC           | Solaris          | Oracle Solaris Studio C |
++| SPARC64         | Linux            | GCC                     |
++| SPARC64         | FreeBSD          | GCC                     |
++| SPARC64         | Solaris          | Oracle Solaris Studio C |
++| TILE-Gx/TILEPro | Linux            | GCC                     |
++| VAX             | OpenBSD/vax      | GCC                     |
++| X86             | FreeBSD          | GCC                     |
++| X86             | GNU HURD         | GCC                     |
++| X86             | Interix          | GCC                     |
++| X86             | kFreeBSD         | GCC                     |
++| X86             | Linux            | GCC                     |
++| X86             | Mac OSX          | GCC                     |
++| X86             | OpenBSD          | GCC                     |
++| X86             | OS/2             | GCC                     |
++| X86             | Solaris          | GCC                     |
++| X86             | Solaris          | Oracle Solaris Studio C |
++| X86             | Windows/Cygwin   | GCC                     |
++| X86             | Windows/MingW    | GCC                     |
++| X86-64          | FreeBSD          | GCC                     |
++| X86-64          | Linux            | GCC                     |
++| X86-64          | Linux/x32        | GCC                     |
++| X86-64          | OpenBSD          | GCC                     |
++| X86-64          | Solaris          | Oracle Solaris Studio C |
++| X86-64          | Windows/MingW    | GCC                     |
++| Xtensa          | Linux            | GCC                     |
++|-----------------+------------------+-------------------------|
+ 
+ Please send additional platform test results to
+ libffi-discuss@sourceware.org and feel free to update the wiki page
+ above.
+ 
+ Installing libffi
+ =================
+ 
+ First you must configure the distribution for your particular
+ system. Go to the directory you wish to build libffi in and run the
+ "configure" program found in the root directory of the libffi source
+ distribution.
+ 
++If you're building libffi directly from version control, configure won't
++exist yet; run ./autogen.sh first.
++
+ You may want to tell configure where to install the libffi library and
+ header files. To do that, use the --prefix configure switch.  Libffi
+ will install under /usr/local by default. 
+ 
+ If you want to enable extra run-time debugging checks use the the
+ --enable-debug configure switch. This is useful when your program dies
+ mysteriously while using libffi. 
+ 
+@@ -117,37 +149,93 @@ wrapper script during configuration like
+ path/to/configure CC=path/to/msvcc.sh LD=link CPP=\"cl -nologo -EP\"
+ 
+ For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64".
+ You may also need to specify --build appropriately. When building with MSVC
+ under a MingW environment, you may need to remove the line in configure
+ that sets 'fix_srcfile_path' to a 'cygpath' command. ('cygpath' is not
+ present in MingW, and is not required when using MingW-style paths.)
+ 
++For iOS builds, the 'libffi.xcodeproj' Xcode project is available.
++
+ Configure has many other options. Use "configure --help" to see them all.
+ 
+ Once configure has finished, type "make". Note that you must be using
+-GNU make.  You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
++GNU make.  You can ftp GNU make from ftp.gnu.org:/pub/gnu/make .
+ 
+ To ensure that libffi is working as advertised, type "make check".
+ This will require that you have DejaGNU installed.
+ 
+ To install the library and header files, type "make install".
+ 
+ 
+ History
+ =======
+ 
+-See the ChangeLog files for details.
++See the git log for details at http://github.com/atgreen/libffi.
+ 
+-3.0.10 ???-??-??
+-        Fix the N64 build on mips-sgi-irix6.5.
++3.1 TBD
++        Add AArch64 (ARM64) iOS support.
++        Add Nios II support.
++        Add m88k and DEC VAX support.
++	Add support for stdcall, thiscall, and fastcall on non-Windows
++	  32-bit x86 targets such as Linux.
++	Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi
++	  fixes.
++	Make the testsuite more robust: eliminated several spurious
++	  failures.
++	Archive off the manually maintained ChangeLog in favor of git
++	  log.
++
++3.0.13 Mar-17-13
++	Add Meta support.
++	Add missing Moxie bits.
++	Fix stack alignment bug on 32-bit x86.
++	Build fix for m68000 targets.
++	Build fix for soft-float Power targets.
++	Fix the install dir location for some platforms when building
++	  with GCC (OS X, Solaris).
++	Fix Cygwin regression.
++
++3.0.12 Feb-11-13
++        Add Moxie support.
++	Add AArch64 support.
++	Add Blackfin support.
++	Add TILE-Gx/TILEPro support.
++	Add MicroBlaze support.
++	Add Xtensa support.
++	Add support for PaX enabled kernels with MPROTECT.
++	Add support for native vendor compilers on
++	  Solaris and AIX.
++	Work around LLVM/GCC interoperability issue on x86_64.
++
++3.0.11 Apr-11-12
++        Lots of build fixes.
++	Add support for variadic functions (ffi_prep_cif_var).
++	Add Linux/x32 support.
++	Add thiscall, fastcall and MSVC cdecl support on Windows.
++	Add Amiga and newer MacOS support.
++	Add m68k FreeMiNT support.
++	Integration with iOS' xcode build tools.
++	Fix Octeon and MC68881 support.
++	Fix code pessimizations.
++
++3.0.10 Aug-23-11
++        Add support for Apple's iOS.
++	Add support for ARM VFP ABI.
++        Add RTEMS support for MIPS and M68K.
++	Fix instruction cache clearing problems on
++	  ARM and SPARC.
++	Fix the N64 build on mips-sgi-irix6.5.
++	Enable builds with Microsoft's compiler.
++	Enable x86 builds with Oracle's Solaris compiler.
++	Fix support for calling code compiled with Oracle's Sparc
++	  Solaris compiler.
+ 	Testsuite fixes for Tru64 Unix.
+-	Enable builds with Microsoft's compiler.
+-	Enable x86 builds with Sun's compiler.
++	Additional platform support.
+ 
+ 3.0.9 Dec-31-09
+         Add AVR32 and win64 ports.  Add ARM softfp support.
+ 	Many fixes for AIX, Solaris, HP-UX, *BSD.
+ 	Several PowerPC and x86-64 bug fixes.
+ 	Build DLL for windows.
+ 
+ 3.0.8 Dec-19-08
+@@ -267,50 +355,59 @@ 1.01 Oct-8-96
+ 
+ 1.00 Oct-7-96
+ 	First release. No public announcement.
+ 
+ 
+ Authors & Credits
+ =================
+ 
+-libffi was originally written by Anthony Green <green@redhat.com>.
++libffi was originally written by Anthony Green <green@moxielogic.com>.
+ 
+ The developers of the GNU Compiler Collection project have made
+ innumerable valuable contributions.  See the ChangeLog file for
+ details.
+ 
+ Some of the ideas behind libffi were inspired by Gianni Mariani's free
+ gencall library for Silicon Graphics machines.
+ 
+ The closure mechanism was designed and implemented by Kresten Krab
+ Thorup.
+ 
+ Major processor architecture ports were contributed by the following
+ developers:
+ 
++aarch64		Marcus Shawcroft, James Greenhalgh
+ alpha		Richard Henderson
+ arm		Raffaele Sena
++blackfin        Alexandre Keunecke I. de Mendonca
+ cris		Simon Posnjak, Hans-Peter Nilsson
+ frv		Anthony Green
+ ia64		Hans Boehm
+ m32r		Kazuhiro Inaoka
+ m68k		Andreas Schwab
++m88k		Miod Vallat
++microblaze	Nathan Rossi
+ mips		Anthony Green, Casey Marshall
+ mips64		David Daney
++moxie		Anthony Green
++nios ii		Sandra Loosemore
+ pa		Randolph Chung, Dave Anglin, Andreas Tobler
+ powerpc		Geoffrey Keating, Andreas Tobler, 
+ 			 David Edelsohn, John Hornkvist
+ powerpc64	Jakub Jelinek
+ s390		Gerhard Tonn, Ulrich Weigand
+ sh		Kaz Kojima
+ sh64		Kaz Kojima
+ sparc		Anthony Green, Gordon Irlam
++tile-gx/tilepro Walter Lee
++vax		Miod Vallat
+ x86		Anthony Green, Jon Beniston
+ x86-64		Bo Thorsen
++xtensa		Chris Zankel
+ 
+ Jesper Skov and Andrew Haley both did more than their fair share of
+ stepping through the code and tracking down bugs.
+ 
+ Thanks also to Tom Tromey for bug fixes, documentation and
+ configuration help.
+ 
+ Thanks to Jim Blandy, who provided some useful feedback on the libffi
+@@ -318,10 +415,11 @@ interface.
+ 
+ Andreas Tobler has done a tremendous amount of work on the testsuite.
+ 
+ Alex Oliva solved the executable page problem for SElinux.
+ 
+ The list above is almost certainly incomplete and inaccurate.  I'm
+ happy to make corrections or additions upon request.
+ 
+-If you have a problem, or have found a bug, please send a note to
+-green@redhat.com.
++If you have a problem, or have found a bug, please send a note to the
++author at green@moxielogic.com, or the project mailing list at
++libffi-discuss@sourceware.org.
+diff --git a/js/src/ctypes/libffi/aclocal.m4 b/js/src/ctypes/libffi/aclocal.m4
+--- a/js/src/ctypes/libffi/aclocal.m4
++++ b/js/src/ctypes/libffi/aclocal.m4
+@@ -1,7390 +1,40 @@
+-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
++# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
+ 
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
++# Copyright (C) 1996-2013 Free Software Foundation, Inc.
++
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
++m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+ m4_ifndef([AC_AUTOCONF_VERSION],
+   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
+-[m4_warning([this file was generated for autoconf 2.65.
++m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
++[m4_warning([this file was generated for autoconf 2.69.
+ You have another version of autoconf.  It may work, but is not guaranteed to.
+ If you have problems, you may need to regenerate the build system entirely.
+-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+-
+-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+-#
+-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+-#   Written by Gordon Matzigkeit, 1996
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-m4_define([_LT_COPYING], [dnl
+-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+-#   Written by Gordon Matzigkeit, 1996
+-#
+-#   This file is part of GNU Libtool.
+-#
+-# GNU Libtool is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License as
+-# published by the Free Software Foundation; either version 2 of
+-# the License, or (at your option) any later version.
+-#
+-# As a special exception to the GNU General Public License,
+-# if you distribute this file as part of a program or library that
+-# is built using GNU Libtool, you may include this file under the
+-# same distribution terms that you use for the rest of that program.
+-#
+-# GNU Libtool is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with GNU Libtool; see the file COPYING.  If not, a copy
+-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+-# obtained by writing to the Free Software Foundation, Inc.,
+-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+-])
+-
+-# serial 56 LT_INIT
+-
+-
+-# LT_PREREQ(VERSION)
+-# ------------------
+-# Complain and exit if this libtool version is less that VERSION.
+-m4_defun([LT_PREREQ],
+-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+-       [m4_default([$3],
+-		   [m4_fatal([Libtool version $1 or higher is required],
+-		             63)])],
+-       [$2])])
+-
+-
+-# _LT_CHECK_BUILDDIR
+-# ------------------
+-# Complain if the absolute build directory name contains unusual characters
+-m4_defun([_LT_CHECK_BUILDDIR],
+-[case `pwd` in
+-  *\ * | *\	*)
+-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+-esac
+-])
+-
+-
+-# LT_INIT([OPTIONS])
+-# ------------------
+-AC_DEFUN([LT_INIT],
+-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+-AC_BEFORE([$0], [LT_LANG])dnl
+-AC_BEFORE([$0], [LT_OUTPUT])dnl
+-AC_BEFORE([$0], [LTDL_INIT])dnl
+-m4_require([_LT_CHECK_BUILDDIR])dnl
+-
+-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+-dnl unless we require an AC_DEFUNed macro:
+-AC_REQUIRE([LTOPTIONS_VERSION])dnl
+-AC_REQUIRE([LTSUGAR_VERSION])dnl
+-AC_REQUIRE([LTVERSION_VERSION])dnl
+-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+-m4_require([_LT_PROG_LTMAIN])dnl
+-
+-dnl Parse OPTIONS
+-_LT_SET_OPTIONS([$0], [$1])
+-
+-# This can be used to rebuild libtool when needed
+-LIBTOOL_DEPS="$ltmain"
+-
+-# Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+-AC_SUBST(LIBTOOL)dnl
+-
+-_LT_SETUP
+-
+-# Only expand once:
+-m4_define([LT_INIT])
+-])# LT_INIT
+-
+-# Old names:
+-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+-
+-
+-# _LT_CC_BASENAME(CC)
+-# -------------------
+-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+-m4_defun([_LT_CC_BASENAME],
+-[for cc_temp in $1""; do
+-  case $cc_temp in
+-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+-    \-*) ;;
+-    *) break;;
+-  esac
+-done
+-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+-])
+-
+-
+-# _LT_FILEUTILS_DEFAULTS
+-# ----------------------
+-# It is okay to use these file commands and assume they have been set
+-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+-m4_defun([_LT_FILEUTILS_DEFAULTS],
+-[: ${CP="cp -f"}
+-: ${MV="mv -f"}
+-: ${RM="rm -f"}
+-])# _LT_FILEUTILS_DEFAULTS
+-
+-
+-# _LT_SETUP
+-# ---------
+-m4_defun([_LT_SETUP],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+-_LT_DECL([], [host_alias], [0], [The host system])dnl
+-_LT_DECL([], [host], [0])dnl
+-_LT_DECL([], [host_os], [0])dnl
+-dnl
+-_LT_DECL([], [build_alias], [0], [The build system])dnl
+-_LT_DECL([], [build], [0])dnl
+-_LT_DECL([], [build_os], [0])dnl
+-dnl
+-AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([LT_PATH_LD])dnl
+-AC_REQUIRE([LT_PATH_NM])dnl
+-dnl
+-AC_REQUIRE([AC_PROG_LN_S])dnl
+-test -z "$LN_S" && LN_S="ln -s"
+-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+-dnl
+-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+-dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+-m4_require([_LT_CMD_RELOAD])dnl
+-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+-
+-_LT_CONFIG_LIBTOOL_INIT([
+-# See if we are running on zsh, and set the options which allow our
+-# commands through without removal of \ escapes INIT.
+-if test -n "\${ZSH_VERSION+set}" ; then
+-   setopt NO_GLOB_SUBST
+-fi
+-])
+-if test -n "${ZSH_VERSION+set}" ; then
+-   setopt NO_GLOB_SUBST
+-fi
+-
+-_LT_CHECK_OBJDIR
+-
+-m4_require([_LT_TAG_COMPILER])dnl
+-_LT_PROG_ECHO_BACKSLASH
+-
+-case $host_os in
+-aix3*)
+-  # AIX sometimes has problems with the GCC collect2 program.  For some
+-  # reason, if we set the COLLECT_NAMES environment variable, the problems
+-  # vanish in a puff of smoke.
+-  if test "X${COLLECT_NAMES+set}" != Xset; then
+-    COLLECT_NAMES=
+-    export COLLECT_NAMES
+-  fi
+-  ;;
+-esac
+-
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+-
+-# Same as above, but do not quote variable references.
+-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+-
+-# Sed substitution to delay expansion of an escaped shell variable in a
+-# double_quote_subst'ed string.
+-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+-
+-# Sed substitution to delay expansion of an escaped single quote.
+-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+-
+-# Sed substitution to avoid accidental globbing in evaled expressions
+-no_glob_subst='s/\*/\\\*/g'
+-
+-# Global variables:
+-ofile=libtool
+-can_build_shared=yes
+-
+-# All known linkers require a `.a' archive for static linking (except MSVC,
+-# which needs '.lib').
+-libext=a
+-
+-with_gnu_ld="$lt_cv_prog_gnu_ld"
+-
+-old_CC="$CC"
+-old_CFLAGS="$CFLAGS"
+-
+-# Set sane defaults for various variables
+-test -z "$CC" && CC=cc
+-test -z "$LTCC" && LTCC=$CC
+-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+-test -z "$LD" && LD=ld
+-test -z "$ac_objext" && ac_objext=o
+-
+-_LT_CC_BASENAME([$compiler])
+-
+-# Only perform the check for file, if the check method requires it
+-test -z "$MAGIC_CMD" && MAGIC_CMD=file
+-case $deplibs_check_method in
+-file_magic*)
+-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+-    _LT_PATH_MAGIC
+-  fi
+-  ;;
+-esac
+-
+-# Use C for the default configuration in the libtool script
+-LT_SUPPORTED_TAG([CC])
+-_LT_LANG_C_CONFIG
+-_LT_LANG_DEFAULT_CONFIG
+-_LT_CONFIG_COMMANDS
+-])# _LT_SETUP
+-
+-
+-# _LT_PROG_LTMAIN
+-# ---------------
+-# Note that this code is called both from `configure', and `config.status'
+-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+-# `config.status' has no value for ac_aux_dir unless we are using Automake,
+-# so we pass a copy along to make sure it has a sensible value anyway.
+-m4_defun([_LT_PROG_LTMAIN],
+-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+-ltmain="$ac_aux_dir/ltmain.sh"
+-])# _LT_PROG_LTMAIN
+-
+-
+-
+-# So that we can recreate a full libtool script including additional
+-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+-# in macros and then make a single call at the end using the `libtool'
+-# label.
+-
+-
+-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+-# ----------------------------------------
+-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+-m4_define([_LT_CONFIG_LIBTOOL_INIT],
+-[m4_ifval([$1],
+-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+-                     [$1
+-])])])
+-
+-# Initialize.
+-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+-
+-
+-# _LT_CONFIG_LIBTOOL([COMMANDS])
+-# ------------------------------
+-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+-m4_define([_LT_CONFIG_LIBTOOL],
+-[m4_ifval([$1],
+-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+-                     [$1
+-])])])
+-
+-# Initialize.
+-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+-
+-
+-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+-# -----------------------------------------------------
+-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+-[_LT_CONFIG_LIBTOOL([$1])
+-_LT_CONFIG_LIBTOOL_INIT([$2])
+-])
+-
+-
+-# _LT_FORMAT_COMMENT([COMMENT])
+-# -----------------------------
+-# Add leading comment marks to the start of each line, and a trailing
+-# full-stop to the whole comment if one is not present already.
+-m4_define([_LT_FORMAT_COMMENT],
+-[m4_ifval([$1], [
+-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+-)])
+-
+-
+-
+-
+-
+-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+-# -------------------------------------------------------------------
+-# CONFIGNAME is the name given to the value in the libtool script.
+-# VARNAME is the (base) name used in the configure script.
+-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+-# VARNAME.  Any other value will be used directly.
+-m4_define([_LT_DECL],
+-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+-	[m4_ifval([$1], [$1], [$2])])
+-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+-    m4_ifval([$4],
+-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+-    lt_dict_add_subkey([lt_decl_dict], [$2],
+-	[tagged?], [m4_ifval([$5], [yes], [no])])])
+-])
+-
+-
+-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+-# --------------------------------------------------------
+-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+-
+-
+-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+-# ------------------------------------------------
+-m4_define([lt_decl_tag_varnames],
+-[_lt_decl_filter([tagged?], [yes], $@)])
+-
+-
+-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+-# ---------------------------------------------------------
+-m4_define([_lt_decl_filter],
+-[m4_case([$#],
+-  [0], [m4_fatal([$0: too few arguments: $#])],
+-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+-])
+-
+-
+-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+-# --------------------------------------------------
+-m4_define([lt_decl_quote_varnames],
+-[_lt_decl_filter([value], [1], $@)])
+-
+-
+-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+-# ---------------------------------------------------
+-m4_define([lt_decl_dquote_varnames],
+-[_lt_decl_filter([value], [2], $@)])
+-
+-
+-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+-# ---------------------------------------------------
+-m4_define([lt_decl_varnames_tagged],
+-[m4_assert([$# <= 2])dnl
+-_$0(m4_quote(m4_default([$1], [[, ]])),
+-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+-m4_define([_lt_decl_varnames_tagged],
+-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+-
+-
+-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+-# ------------------------------------------------
+-m4_define([lt_decl_all_varnames],
+-[_$0(m4_quote(m4_default([$1], [[, ]])),
+-     m4_if([$2], [],
+-	   m4_quote(lt_decl_varnames),
+-	m4_quote(m4_shift($@))))[]dnl
+-])
+-m4_define([_lt_decl_all_varnames],
+-[lt_join($@, lt_decl_varnames_tagged([$1],
+-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+-])
+-
+-
+-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+-# ------------------------------------
+-# Quote a variable value, and forward it to `config.status' so that its
+-# declaration there will have the same value as in `configure'.  VARNAME
+-# must have a single quote delimited value for this to work.
+-m4_define([_LT_CONFIG_STATUS_DECLARE],
+-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+-
+-
+-# _LT_CONFIG_STATUS_DECLARATIONS
+-# ------------------------------
+-# We delimit libtool config variables with single quotes, so when
+-# we write them to config.status, we have to be sure to quote all
+-# embedded single quotes properly.  In configure, this macro expands
+-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+-#
+-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+-
+-
+-# _LT_LIBTOOL_TAGS
+-# ----------------
+-# Output comment and list of tags supported by the script
+-m4_defun([_LT_LIBTOOL_TAGS],
+-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+-available_tags="_LT_TAGS"dnl
+-])
+-
+-
+-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+-# -----------------------------------
+-# Extract the dictionary values for VARNAME (optionally with TAG) and
+-# expand to a commented shell variable setting:
+-#
+-#    # Some comment about what VAR is for.
+-#    visible_name=$lt_internal_name
+-m4_define([_LT_LIBTOOL_DECLARE],
+-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+-					   [description])))[]dnl
+-m4_pushdef([_libtool_name],
+-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+-    [0], [_libtool_name=[$]$1],
+-    [1], [_libtool_name=$lt_[]$1],
+-    [2], [_libtool_name=$lt_[]$1],
+-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+-])
+-
+-
+-# _LT_LIBTOOL_CONFIG_VARS
+-# -----------------------
+-# Produce commented declarations of non-tagged libtool config variables
+-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+-# section) are produced by _LT_LIBTOOL_TAG_VARS.
+-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+-[m4_foreach([_lt_var],
+-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+-
+-
+-# _LT_LIBTOOL_TAG_VARS(TAG)
+-# -------------------------
+-m4_define([_LT_LIBTOOL_TAG_VARS],
+-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+-
+-
+-# _LT_TAGVAR(VARNAME, [TAGNAME])
+-# ------------------------------
+-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+-
+-
+-# _LT_CONFIG_COMMANDS
+-# -------------------
+-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+-# variables for single and double quote escaping we saved from calls
+-# to _LT_DECL, we can put quote escaped variables declarations
+-# into `config.status', and then the shell code to quote escape them in
+-# for loops in `config.status'.  Finally, any additional code accumulated
+-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+-m4_defun([_LT_CONFIG_COMMANDS],
+-[AC_PROVIDE_IFELSE([LT_OUTPUT],
+-	dnl If the libtool generation code has been placed in $CONFIG_LT,
+-	dnl instead of duplicating it all over again into config.status,
+-	dnl then we will have config.status run $CONFIG_LT later, so it
+-	dnl needs to know what name is stored there:
+-        [AC_CONFIG_COMMANDS([libtool],
+-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+-    dnl If the libtool generation code is destined for config.status,
+-    dnl expand the accumulated commands and init code now:
+-    [AC_CONFIG_COMMANDS([libtool],
+-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+-])#_LT_CONFIG_COMMANDS
+-
+-
+-# Initialize.
+-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+-[
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-sed_quote_subst='$sed_quote_subst'
+-double_quote_subst='$double_quote_subst'
+-delay_variable_subst='$delay_variable_subst'
+-_LT_CONFIG_STATUS_DECLARATIONS
+-LTCC='$LTCC'
+-LTCFLAGS='$LTCFLAGS'
+-compiler='$compiler_DEFAULT'
+-
+-# Quote evaled strings.
+-for var in lt_decl_all_varnames([[ \
+-]], lt_decl_quote_varnames); do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+-    *[[\\\\\\\`\\"\\\$]]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+-      ;;
+-    *)
+-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+-      ;;
+-    esac
+-done
+-
+-# Double-quote double-evaled strings.
+-for var in lt_decl_all_varnames([[ \
+-]], lt_decl_dquote_varnames); do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+-    *[[\\\\\\\`\\"\\\$]]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+-      ;;
+-    *)
+-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+-      ;;
+-    esac
+-done
+-
+-# Fix-up fallback echo if it was mangled by the above quoting rules.
+-case \$lt_ECHO in
+-*'\\\[$]0 --fallback-echo"')dnl "
+-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+-  ;;
+-esac
+-
+-_LT_OUTPUT_LIBTOOL_INIT
+-])
+-
+-
+-# LT_OUTPUT
+-# ---------
+-# This macro allows early generation of the libtool script (before
+-# AC_OUTPUT is called), incase it is used in configure for compilation
+-# tests.
+-AC_DEFUN([LT_OUTPUT],
+-[: ${CONFIG_LT=./config.lt}
+-AC_MSG_NOTICE([creating $CONFIG_LT])
+-cat >"$CONFIG_LT" <<_LTEOF
+-#! $SHELL
+-# Generated by $as_me.
+-# Run this file to recreate a libtool stub with the current configuration.
+-
+-lt_cl_silent=false
+-SHELL=\${CONFIG_SHELL-$SHELL}
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<\_LTEOF
+-AS_SHELL_SANITIZE
+-_AS_PREPARE
+-
+-exec AS_MESSAGE_FD>&1
+-exec AS_MESSAGE_LOG_FD>>config.log
+-{
+-  echo
+-  AS_BOX([Running $as_me.])
+-} >&AS_MESSAGE_LOG_FD
+-
+-lt_cl_help="\
+-\`$as_me' creates a local libtool stub from the current configuration,
+-for use in further configure time tests before the real libtool is
+-generated.
+-
+-Usage: $[0] [[OPTIONS]]
+-
+-  -h, --help      print this help, then exit
+-  -V, --version   print version number, then exit
+-  -q, --quiet     do not print progress messages
+-  -d, --debug     don't remove temporary files
+-
+-Report bugs to <bug-libtool@gnu.org>."
+-
+-lt_cl_version="\
+-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+-configured by $[0], generated by m4_PACKAGE_STRING.
+-
+-Copyright (C) 2008 Free Software Foundation, Inc.
+-This config.lt script is free software; the Free Software Foundation
+-gives unlimited permision to copy, distribute and modify it."
+-
+-while test $[#] != 0
+-do
+-  case $[1] in
+-    --version | --v* | -V )
+-      echo "$lt_cl_version"; exit 0 ;;
+-    --help | --h* | -h )
+-      echo "$lt_cl_help"; exit 0 ;;
+-    --debug | --d* | -d )
+-      debug=: ;;
+-    --quiet | --q* | --silent | --s* | -q )
+-      lt_cl_silent=: ;;
+-
+-    -*) AC_MSG_ERROR([unrecognized option: $[1]
+-Try \`$[0] --help' for more information.]) ;;
+-
+-    *) AC_MSG_ERROR([unrecognized argument: $[1]
+-Try \`$[0] --help' for more information.]) ;;
+-  esac
+-  shift
+-done
+-
+-if $lt_cl_silent; then
+-  exec AS_MESSAGE_FD>/dev/null
+-fi
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<_LTEOF
+-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<\_LTEOF
+-AC_MSG_NOTICE([creating $ofile])
+-_LT_OUTPUT_LIBTOOL_COMMANDS
+-AS_EXIT(0)
+-_LTEOF
+-chmod +x "$CONFIG_LT"
+-
+-# configure is writing to config.log, but config.lt does its own redirection,
+-# appending to config.log, which fails on DOS, as config.log is still kept
+-# open by configure.  Here we exec the FD to /dev/null, effectively closing
+-# config.log, so it can be properly (re)opened and appended to by config.lt.
+-if test "$no_create" != yes; then
+-  lt_cl_success=:
+-  test "$silent" = yes &&
+-    lt_config_lt_args="$lt_config_lt_args --quiet"
+-  exec AS_MESSAGE_LOG_FD>/dev/null
+-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+-  exec AS_MESSAGE_LOG_FD>>config.log
+-  $lt_cl_success || AS_EXIT(1)
+-fi
+-])# LT_OUTPUT
+-
+-
+-# _LT_CONFIG(TAG)
+-# ---------------
+-# If TAG is the built-in tag, create an initial libtool script with a
+-# default configuration from the untagged config vars.  Otherwise add code
+-# to config.status for appending the configuration named by TAG from the
+-# matching tagged config vars.
+-m4_defun([_LT_CONFIG],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-_LT_CONFIG_SAVE_COMMANDS([
+-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+-  m4_if(_LT_TAG, [C], [
+-    # See if we are running on zsh, and set the options which allow our
+-    # commands through without removal of \ escapes.
+-    if test -n "${ZSH_VERSION+set}" ; then
+-      setopt NO_GLOB_SUBST
+-    fi
+-
+-    cfgfile="${ofile}T"
+-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+-    $RM "$cfgfile"
+-
+-    cat <<_LT_EOF >> "$cfgfile"
+-#! $SHELL
+-
+-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+-#
+-_LT_COPYING
+-_LT_LIBTOOL_TAGS
+-
+-# ### BEGIN LIBTOOL CONFIG
+-_LT_LIBTOOL_CONFIG_VARS
+-_LT_LIBTOOL_TAG_VARS
+-# ### END LIBTOOL CONFIG
+-
+-_LT_EOF
+-
+-  case $host_os in
+-  aix3*)
+-    cat <<\_LT_EOF >> "$cfgfile"
+-# AIX sometimes has problems with the GCC collect2 program.  For some
+-# reason, if we set the COLLECT_NAMES environment variable, the problems
+-# vanish in a puff of smoke.
+-if test "X${COLLECT_NAMES+set}" != Xset; then
+-  COLLECT_NAMES=
+-  export COLLECT_NAMES
+-fi
+-_LT_EOF
+-    ;;
+-  esac
+-
+-  _LT_PROG_LTMAIN
+-
+-  # We use sed instead of cat because bash on DJGPP gets confused if
+-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+-  # text mode, it properly converts lines to CR/LF.  This bash problem
+-  # is reportedly fixed, but why not run on old versions too?
+-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  _LT_PROG_XSI_SHELLFNS
+-
+-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  mv -f "$cfgfile" "$ofile" ||
+-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+-  chmod +x "$ofile"
+-],
+-[cat <<_LT_EOF >> "$ofile"
+-
+-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+-dnl in a comment (ie after a #).
+-# ### BEGIN LIBTOOL TAG CONFIG: $1
+-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+-# ### END LIBTOOL TAG CONFIG: $1
+-_LT_EOF
+-])dnl /m4_if
+-],
+-[m4_if([$1], [], [
+-    PACKAGE='$PACKAGE'
+-    VERSION='$VERSION'
+-    TIMESTAMP='$TIMESTAMP'
+-    RM='$RM'
+-    ofile='$ofile'], [])
+-])dnl /_LT_CONFIG_SAVE_COMMANDS
+-])# _LT_CONFIG
+-
+-
+-# LT_SUPPORTED_TAG(TAG)
+-# ---------------------
+-# Trace this macro to discover what tags are supported by the libtool
+-# --tag option, using:
+-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+-AC_DEFUN([LT_SUPPORTED_TAG], [])
+-
+-
+-# C support is built-in for now
+-m4_define([_LT_LANG_C_enabled], [])
+-m4_define([_LT_TAGS], [])
+-
+-
+-# LT_LANG(LANG)
+-# -------------
+-# Enable libtool support for the given language if not already enabled.
+-AC_DEFUN([LT_LANG],
+-[AC_BEFORE([$0], [LT_OUTPUT])dnl
+-m4_case([$1],
+-  [C],			[_LT_LANG(C)],
+-  [C++],		[_LT_LANG(CXX)],
+-  [Java],		[_LT_LANG(GCJ)],
+-  [Fortran 77],		[_LT_LANG(F77)],
+-  [Fortran],		[_LT_LANG(FC)],
+-  [Windows Resource],	[_LT_LANG(RC)],
+-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+-    [_LT_LANG($1)],
+-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+-])# LT_LANG
+-
+-
+-# _LT_LANG(LANGNAME)
+-# ------------------
+-m4_defun([_LT_LANG],
+-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+-  [LT_SUPPORTED_TAG([$1])dnl
+-  m4_append([_LT_TAGS], [$1 ])dnl
+-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+-  _LT_LANG_$1_CONFIG($1)])dnl
+-])# _LT_LANG
+-
+-
+-# _LT_LANG_DEFAULT_CONFIG
+-# -----------------------
+-m4_defun([_LT_LANG_DEFAULT_CONFIG],
+-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+-  [LT_LANG(CXX)],
+-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+-
+-AC_PROVIDE_IFELSE([AC_PROG_F77],
+-  [LT_LANG(F77)],
+-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+-
+-AC_PROVIDE_IFELSE([AC_PROG_FC],
+-  [LT_LANG(FC)],
+-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+-
+-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+-dnl pulling things in needlessly.
+-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+-  [LT_LANG(GCJ)],
+-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+-    [LT_LANG(GCJ)],
+-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+-      [LT_LANG(GCJ)],
+-      [m4_ifdef([AC_PROG_GCJ],
+-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+-       m4_ifdef([A][M_PROG_GCJ],
+-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+-       m4_ifdef([LT_PROG_GCJ],
+-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+-
+-AC_PROVIDE_IFELSE([LT_PROG_RC],
+-  [LT_LANG(RC)],
+-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+-])# _LT_LANG_DEFAULT_CONFIG
+-
+-# Obsolete macros:
+-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+-
+-
+-# _LT_TAG_COMPILER
+-# ----------------
+-m4_defun([_LT_TAG_COMPILER],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-
+-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+-
+-# If no C compiler was specified, use CC.
+-LTCC=${LTCC-"$CC"}
+-
+-# If no C compiler flags were specified, use CFLAGS.
+-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+-
+-# Allow CC to be a program name with arguments.
+-compiler=$CC
+-])# _LT_TAG_COMPILER
+-
+-
+-# _LT_COMPILER_BOILERPLATE
+-# ------------------------
+-# Check for compiler boilerplate output or warnings with
+-# the simple compiler test code.
+-m4_defun([_LT_COMPILER_BOILERPLATE],
+-[m4_require([_LT_DECL_SED])dnl
+-ac_outfile=conftest.$ac_objext
+-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+-_lt_compiler_boilerplate=`cat conftest.err`
+-$RM conftest*
+-])# _LT_COMPILER_BOILERPLATE
+-
+-
+-# _LT_LINKER_BOILERPLATE
+-# ----------------------
+-# Check for linker boilerplate output or warnings with
+-# the simple link test code.
+-m4_defun([_LT_LINKER_BOILERPLATE],
+-[m4_require([_LT_DECL_SED])dnl
+-ac_outfile=conftest.$ac_objext
+-echo "$lt_simple_link_test_code" >conftest.$ac_ext
+-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+-_lt_linker_boilerplate=`cat conftest.err`
+-$RM -r conftest*
+-])# _LT_LINKER_BOILERPLATE
+-
+-# _LT_REQUIRED_DARWIN_CHECKS
+-# -------------------------
+-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+-  case $host_os in
+-    rhapsody* | darwin*)
+-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+-    AC_CHECK_TOOL([LIPO], [lipo], [:])
+-    AC_CHECK_TOOL([OTOOL], [otool], [:])
+-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+-    _LT_DECL([], [DSYMUTIL], [1],
+-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+-    _LT_DECL([], [NMEDIT], [1],
+-      [Tool to change global to local symbols on Mac OS X])
+-    _LT_DECL([], [LIPO], [1],
+-      [Tool to manipulate fat objects and archives on Mac OS X])
+-    _LT_DECL([], [OTOOL], [1],
+-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+-    _LT_DECL([], [OTOOL64], [1],
+-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+-
+-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+-      [lt_cv_apple_cc_single_mod=no
+-      if test -z "${LT_MULTI_MODULE}"; then
+-	# By default we will add the -single_module flag. You can override
+-	# by either setting the environment variable LT_MULTI_MODULE
+-	# non-empty at configure time, or by adding -multi_module to the
+-	# link flags.
+-	rm -rf libconftest.dylib*
+-	echo "int foo(void){return 1;}" > conftest.c
+-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+-        _lt_result=$?
+-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+-	  lt_cv_apple_cc_single_mod=yes
+-	else
+-	  cat conftest.err >&AS_MESSAGE_LOG_FD
+-	fi
+-	rm -rf libconftest.dylib*
+-	rm -f conftest.*
+-      fi])
+-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+-      [lt_cv_ld_exported_symbols_list],
+-      [lt_cv_ld_exported_symbols_list=no
+-      save_LDFLAGS=$LDFLAGS
+-      echo "_main" > conftest.sym
+-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+-	[lt_cv_ld_exported_symbols_list=yes],
+-	[lt_cv_ld_exported_symbols_list=no])
+-	LDFLAGS="$save_LDFLAGS"
+-    ])
+-    case $host_os in
+-    rhapsody* | darwin1.[[012]])
+-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+-    darwin1.*)
+-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-    darwin*) # darwin 5.x on
+-      # if running on 10.5 or later, the deployment target defaults
+-      # to the OS version, if on x86, and 10.4, the deployment
+-      # target defaults to 10.4. Don't you love it?
+-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+-	10.[[012]]*)
+-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-	10.*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+-      esac
+-    ;;
+-  esac
+-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+-      _lt_dar_single_mod='$single_module'
+-    fi
+-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+-    else
+-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+-    fi
+-    if test "$DSYMUTIL" != ":"; then
+-      _lt_dsymutil='~$DSYMUTIL $lib || :'
+-    else
+-      _lt_dsymutil=
+-    fi
+-    ;;
+-  esac
+-])
+-
+-
+-# _LT_DARWIN_LINKER_FEATURES
+-# --------------------------
+-# Checks for linker and compiler features on darwin
+-m4_defun([_LT_DARWIN_LINKER_FEATURES],
+-[
+-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-  _LT_TAGVAR(hardcode_direct, $1)=no
+-  _LT_TAGVAR(hardcode_automatic, $1)=yes
+-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+-  _LT_TAGVAR(link_all_deplibs, $1)=yes
+-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+-  case $cc_basename in
+-     ifort*) _lt_dar_can_shared=yes ;;
+-     *) _lt_dar_can_shared=$GCC ;;
+-  esac
+-  if test "$_lt_dar_can_shared" = "yes"; then
+-    output_verbose_link_cmd=echo
+-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+-    m4_if([$1], [CXX],
+-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+-    fi
+-],[])
+-  else
+-  _LT_TAGVAR(ld_shlibs, $1)=no
+-  fi
+-])
+-
+-# _LT_SYS_MODULE_PATH_AIX
+-# -----------------------
+-# Links a minimal program and checks the executable
+-# for the system default hardcoded library path. In most cases,
+-# this is /usr/lib:/lib, but when the MPI compilers are used
+-# the location of the communication and MPI libs are included too.
+-# If we don't find anything, use the default library path according
+-# to the aix ld manual.
+-m4_defun([_LT_SYS_MODULE_PATH_AIX],
+-[m4_require([_LT_DECL_SED])dnl
+-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+-lt_aix_libpath_sed='
+-    /Import File Strings/,/^$/ {
+-	/^0/ {
+-	    s/^0  *\(.*\)$/\1/
+-	    p
+-	}
+-    }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi],[])
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+-])# _LT_SYS_MODULE_PATH_AIX
+-
+-
+-# _LT_SHELL_INIT(ARG)
+-# -------------------
+-m4_define([_LT_SHELL_INIT],
+-[ifdef([AC_DIVERSION_NOTICE],
+-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+-	 [AC_DIVERT_PUSH(NOTICE)])
+-$1
+-AC_DIVERT_POP
+-])# _LT_SHELL_INIT
+-
+-
+-# _LT_PROG_ECHO_BACKSLASH
+-# -----------------------
+-# Add some code to the start of the generated configure script which
+-# will find an echo command which doesn't interpret backslashes.
+-m4_defun([_LT_PROG_ECHO_BACKSLASH],
+-[_LT_SHELL_INIT([
+-# Check that we are running under the correct shell.
+-SHELL=${CONFIG_SHELL-/bin/sh}
+-
+-case X$lt_ECHO in
+-X*--fallback-echo)
+-  # Remove one level of quotation (which was required for Make).
+-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+-  ;;
+-esac
+-
+-ECHO=${lt_ECHO-echo}
+-if test "X[$]1" = X--no-reexec; then
+-  # Discard the --no-reexec flag, and continue.
+-  shift
+-elif test "X[$]1" = X--fallback-echo; then
+-  # Avoid inline document here, it may be left over
+-  :
+-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+-  # Yippee, $ECHO works!
+-  :
+-else
+-  # Restart under the correct shell.
+-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-fi
+-
+-if test "X[$]1" = X--fallback-echo; then
+-  # used as fallback echo
+-  shift
+-  cat <<_LT_EOF
+-[$]*
+-_LT_EOF
+-  exit 0
+-fi
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-if test -z "$lt_ECHO"; then
+-  if test "X${echo_test_string+set}" != Xset; then
+-    # find a string as large as possible, as long as the shell can cope with it
+-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+-      then
+-        break
+-      fi
+-    done
+-  fi
+-
+-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-     test "X$echo_testing_string" = "X$echo_test_string"; then
+-    :
+-  else
+-    # The Solaris, AIX, and Digital Unix default echo programs unquote
+-    # backslashes.  This makes it impossible to quote backslashes using
+-    #   echo "$something" | sed 's/\\/\\\\/g'
+-    #
+-    # So, first we look for a working echo in the user's PATH.
+-
+-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-    for dir in $PATH /usr/ucb; do
+-      IFS="$lt_save_ifs"
+-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        ECHO="$dir/echo"
+-        break
+-      fi
+-    done
+-    IFS="$lt_save_ifs"
+-
+-    if test "X$ECHO" = Xecho; then
+-      # We didn't find a better echo, so look for alternatives.
+-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        # This shell has a builtin print -r that does the trick.
+-        ECHO='print -r'
+-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+-        # If we have ksh, try running configure again with it.
+-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+-        export ORIGINAL_CONFIG_SHELL
+-        CONFIG_SHELL=/bin/ksh
+-        export CONFIG_SHELL
+-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-      else
+-        # Try using printf.
+-        ECHO='printf %s\n'
+-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-	   test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  # Cool, printf works
+-	  :
+-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+-	  export CONFIG_SHELL
+-	  SHELL="$CONFIG_SHELL"
+-	  export SHELL
+-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+-        else
+-	  # maybe with a smaller string...
+-	  prev=:
+-
+-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+-	    then
+-	      break
+-	    fi
+-	    prev="$cmd"
+-	  done
+-
+-	  if test "$prev" != 'sed 50q "[$]0"'; then
+-	    echo_test_string=`eval $prev`
+-	    export echo_test_string
+-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+-	  else
+-	    # Oops.  We lost completely, so just stick with echo.
+-	    ECHO=echo
+-	  fi
+-        fi
+-      fi
+-    fi
+-  fi
+-fi
+-
+-# Copy echo and quote the copy suitably for passing to libtool from
+-# the Makefile, instead of quoting the original, which is used later.
+-lt_ECHO=$ECHO
+-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+-fi
+-
+-AC_SUBST(lt_ECHO)
+-])
+-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+-_LT_DECL([], [ECHO], [1],
+-    [An echo program that does not interpret backslashes])
+-])# _LT_PROG_ECHO_BACKSLASH
+-
+-
+-# _LT_ENABLE_LOCK
+-# ---------------
+-m4_defun([_LT_ENABLE_LOCK],
+-[AC_ARG_ENABLE([libtool-lock],
+-  [AS_HELP_STRING([--disable-libtool-lock],
+-    [avoid locking (might break parallel builds)])])
+-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+-
+-# Some flags need to be propagated to the compiler or linker for good
+-# libtool support.
+-case $host in
+-ia64-*-hpux*)
+-  # Find out which ABI we are using.
+-  echo 'int i;' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    case `/usr/bin/file conftest.$ac_objext` in
+-      *ELF-32*)
+-	HPUX_IA64_MODE="32"
+-	;;
+-      *ELF-64*)
+-	HPUX_IA64_MODE="64"
+-	;;
+-    esac
+-  fi
+-  rm -rf conftest*
+-  ;;
+-*-*-irix6*)
+-  # Find out which ABI we are using.
+-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    if test "$lt_cv_prog_gnu_ld" = yes; then
+-      case `/usr/bin/file conftest.$ac_objext` in
+-	*32-bit*)
+-	  LD="${LD-ld} -melf32bsmip"
+-	  ;;
+-	*N32*)
+-	  LD="${LD-ld} -melf32bmipn32"
+-	  ;;
+-	*64-bit*)
+-	  LD="${LD-ld} -melf64bmip"
+-	;;
+-      esac
+-    else
+-      case `/usr/bin/file conftest.$ac_objext` in
+-	*32-bit*)
+-	  LD="${LD-ld} -32"
+-	  ;;
+-	*N32*)
+-	  LD="${LD-ld} -n32"
+-	  ;;
+-	*64-bit*)
+-	  LD="${LD-ld} -64"
+-	  ;;
+-      esac
+-    fi
+-  fi
+-  rm -rf conftest*
+-  ;;
+-
+-x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+-  # Find out which ABI we are using.
+-  echo 'int i;' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    case `/usr/bin/file conftest.o` in
+-      *32-bit*)
+-	case $host in
+-	  x86_64-*kfreebsd*-gnu)
+-	    LD="${LD-ld} -m elf_i386_fbsd"
+-	    ;;
+-	  x86_64-*linux*)
+-	    LD="${LD-ld} -m elf_i386"
+-	    ;;
+-	  powerpc64le-*linux*)
+-	    LD="${LD-ld} -m elf32lppclinux"
+-	    ;;
+-	  powerpc64-*linux*)
+-	    LD="${LD-ld} -m elf32ppclinux"
+-	    ;;
+-	  s390x-*linux*)
+-	    LD="${LD-ld} -m elf_s390"
+-	    ;;
+-	  sparc64-*linux*)
+-	    LD="${LD-ld} -m elf32_sparc"
+-	    ;;
+-	esac
+-	;;
+-      *64-bit*)
+-	case $host in
+-	  x86_64-*kfreebsd*-gnu)
+-	    LD="${LD-ld} -m elf_x86_64_fbsd"
+-	    ;;
+-	  x86_64-*linux*)
+-	    LD="${LD-ld} -m elf_x86_64"
+-	    ;;
+-	  powerpcle-*linux*)
+-	    LD="${LD-ld} -m elf64lppc"
+-	    ;;
+-	  powerpc-*linux*)
+-	    LD="${LD-ld} -m elf64ppc"
+-	    ;;
+-	  s390*-*linux*|s390*-*tpf*)
+-	    LD="${LD-ld} -m elf64_s390"
+-	    ;;
+-	  sparc*-*linux*)
+-	    LD="${LD-ld} -m elf64_sparc"
+-	    ;;
+-	esac
+-	;;
+-    esac
+-  fi
+-  rm -rf conftest*
+-  ;;
+-
+-*-*-sco3.2v5*)
+-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+-  SAVE_CFLAGS="$CFLAGS"
+-  CFLAGS="$CFLAGS -belf"
+-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+-    [AC_LANG_PUSH(C)
+-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+-     AC_LANG_POP])
+-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+-    CFLAGS="$SAVE_CFLAGS"
+-  fi
+-  ;;
+-sparc*-*solaris*)
+-  # Find out which ABI we are using.
+-  echo 'int i;' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    case `/usr/bin/file conftest.o` in
+-    *64-bit*)
+-      case $lt_cv_prog_gnu_ld in
+-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+-      *)
+-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+-	  LD="${LD-ld} -64"
+-	fi
+-	;;
+-      esac
+-      ;;
+-    esac
+-  fi
+-  rm -rf conftest*
+-  ;;
+-esac
+-
+-need_locks="$enable_libtool_lock"
+-])# _LT_ENABLE_LOCK
+-
+-
+-# _LT_CMD_OLD_ARCHIVE
+-# -------------------
+-m4_defun([_LT_CMD_OLD_ARCHIVE],
+-[AC_CHECK_TOOL(AR, ar, false)
+-test -z "$AR" && AR=ar
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
+-_LT_DECL([], [AR], [1], [The archiver])
+-_LT_DECL([], [AR_FLAGS], [1])
+-
+-AC_CHECK_TOOL(STRIP, strip, :)
+-test -z "$STRIP" && STRIP=:
+-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+-
+-AC_CHECK_TOOL(RANLIB, ranlib, :)
+-test -z "$RANLIB" && RANLIB=:
+-_LT_DECL([], [RANLIB], [1],
+-    [Commands used to install an old-style archive])
+-
+-# Determine commands to create old-style static archives.
+-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+-old_postinstall_cmds='chmod 644 $oldlib'
+-old_postuninstall_cmds=
+-
+-if test -n "$RANLIB"; then
+-  case $host_os in
+-  openbsd*)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+-    ;;
+-  *)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+-    ;;
+-  esac
+-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+-fi
+-_LT_DECL([], [old_postinstall_cmds], [2])
+-_LT_DECL([], [old_postuninstall_cmds], [2])
+-_LT_TAGDECL([], [old_archive_cmds], [2],
+-    [Commands used to build an old-style archive])
+-])# _LT_CMD_OLD_ARCHIVE
+-
+-
+-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+-# ----------------------------------------------------------------
+-# Check whether the given compiler option works
+-AC_DEFUN([_LT_COMPILER_OPTION],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_SED])dnl
+-AC_CACHE_CHECK([$1], [$2],
+-  [$2=no
+-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-   lt_compiler_flag="$3"
+-   # Insert the option either (1) after the last *FLAGS variable, or
+-   # (2) before a word containing "conftest.", or (3) at the end.
+-   # Note that $ac_compile itself does not contain backslashes and begins
+-   # with a dollar sign (not a hyphen), so the echo should work correctly.
+-   # The option is referenced via a variable to avoid confusing sed.
+-   lt_compile=`echo "$ac_compile" | $SED \
+-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+-   -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+-   (eval "$lt_compile" 2>conftest.err)
+-   ac_status=$?
+-   cat conftest.err >&AS_MESSAGE_LOG_FD
+-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+-   if (exit $ac_status) && test -s "$ac_outfile"; then
+-     # The compiler can only warn and ignore the option if not recognized
+-     # So say no if there are warnings other than the usual output.
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+-       $2=yes
+-     fi
+-   fi
+-   $RM conftest*
+-])
+-
+-if test x"[$]$2" = xyes; then
+-    m4_if([$5], , :, [$5])
+-else
+-    m4_if([$6], , :, [$6])
+-fi
+-])# _LT_COMPILER_OPTION
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+-
+-
+-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+-# ----------------------------------------------------
+-# Check whether the given linker option works
+-AC_DEFUN([_LT_LINKER_OPTION],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_SED])dnl
+-AC_CACHE_CHECK([$1], [$2],
+-  [$2=no
+-   save_LDFLAGS="$LDFLAGS"
+-   LDFLAGS="$LDFLAGS $3"
+-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+-     # The linker can only warn and ignore the option if not recognized
+-     # So say no if there are warnings
+-     if test -s conftest.err; then
+-       # Append any errors to the config.log.
+-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+-       if diff conftest.exp conftest.er2 >/dev/null; then
+-         $2=yes
+-       fi
+-     else
+-       $2=yes
+-     fi
+-   fi
+-   $RM -r conftest*
+-   LDFLAGS="$save_LDFLAGS"
+-])
+-
+-if test x"[$]$2" = xyes; then
+-    m4_if([$4], , :, [$4])
+-else
+-    m4_if([$5], , :, [$5])
+-fi
+-])# _LT_LINKER_OPTION
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+-
+-
+-# LT_CMD_MAX_LEN
+-#---------------
+-AC_DEFUN([LT_CMD_MAX_LEN],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-# find the maximum length of command line arguments
+-AC_MSG_CHECKING([the maximum length of command line arguments])
+-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+-  i=0
+-  teststring="ABCD"
+-
+-  case $build_os in
+-  msdosdjgpp*)
+-    # On DJGPP, this test can blow up pretty badly due to problems in libc
+-    # (any single argument exceeding 2000 bytes causes a buffer overrun
+-    # during glob expansion).  Even if it were fixed, the result of this
+-    # check would be larger than it should be.
+-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+-    ;;
+-
+-  gnu*)
+-    # Under GNU Hurd, this test is not required because there is
+-    # no limit to the length of command line arguments.
+-    # Libtool will interpret -1 as no limit whatsoever
+-    lt_cv_sys_max_cmd_len=-1;
+-    ;;
+-
+-  cygwin* | mingw* | cegcc*)
+-    # On Win9x/ME, this test blows up -- it succeeds, but takes
+-    # about 5 minutes as the teststring grows exponentially.
+-    # Worse, since 9x/ME are not pre-emptively multitasking,
+-    # you end up with a "frozen" computer, even though with patience
+-    # the test eventually succeeds (with a max line length of 256k).
+-    # Instead, let's just punt: use the minimum linelength reported by
+-    # all of the supported platforms: 8192 (on NT/2K/XP).
+-    lt_cv_sys_max_cmd_len=8192;
+-    ;;
+-
+-  amigaos*)
+-    # On AmigaOS with pdksh, this test takes hours, literally.
+-    # So we just punt and use a minimum line length of 8192.
+-    lt_cv_sys_max_cmd_len=8192;
+-    ;;
+-
+-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+-    # This has been around since 386BSD, at least.  Likely further.
+-    if test -x /sbin/sysctl; then
+-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+-    elif test -x /usr/sbin/sysctl; then
+-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+-    else
+-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+-    fi
+-    # And add a safety zone
+-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+-    ;;
+-
+-  interix*)
+-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+-    lt_cv_sys_max_cmd_len=196608
+-    ;;
+-
+-  osf*)
+-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+-    # nice to cause kernel panics so lets avoid the loop below.
+-    # First set a reasonable default.
+-    lt_cv_sys_max_cmd_len=16384
+-    #
+-    if test -x /sbin/sysconfig; then
+-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+-      esac
+-    fi
+-    ;;
+-  sco3.2v5*)
+-    lt_cv_sys_max_cmd_len=102400
+-    ;;
+-  sysv5* | sco5v6* | sysv4.2uw2*)
+-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+-    if test -n "$kargmax"; then
+-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+-    else
+-      lt_cv_sys_max_cmd_len=32768
+-    fi
+-    ;;
+-  *)
+-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+-    if test -n "$lt_cv_sys_max_cmd_len"; then
+-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+-    else
+-      # Make teststring a little bigger before we do anything with it.
+-      # a 1K string should be a reasonable start.
+-      for i in 1 2 3 4 5 6 7 8 ; do
+-        teststring=$teststring$teststring
+-      done
+-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+-      # If test is not a shell built-in, we'll probably end up computing a
+-      # maximum length that is only half of the actual maximum length, but
+-      # we can't tell.
+-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+-	      test $i != 17 # 1/2 MB should be enough
+-      do
+-        i=`expr $i + 1`
+-        teststring=$teststring$teststring
+-      done
+-      # Only check the string length outside the loop.
+-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+-      teststring=
+-      # Add a significant safety factor because C++ compilers can tack on
+-      # massive amounts of additional arguments before passing them to the
+-      # linker.  It appears as though 1/2 is a usable value.
+-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+-    fi
+-    ;;
+-  esac
+-])
+-if test -n $lt_cv_sys_max_cmd_len ; then
+-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+-else
+-  AC_MSG_RESULT(none)
+-fi
+-max_cmd_len=$lt_cv_sys_max_cmd_len
+-_LT_DECL([], [max_cmd_len], [0],
+-    [What is the maximum length of a command?])
+-])# LT_CMD_MAX_LEN
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+-
+-
+-# _LT_HEADER_DLFCN
+-# ----------------
+-m4_defun([_LT_HEADER_DLFCN],
+-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+-])# _LT_HEADER_DLFCN
+-
+-
+-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+-# ----------------------------------------------------------------
+-m4_defun([_LT_TRY_DLOPEN_SELF],
+-[m4_require([_LT_HEADER_DLFCN])dnl
+-if test "$cross_compiling" = yes; then :
+-  [$4]
+-else
+-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+-  lt_status=$lt_dlunknown
+-  cat > conftest.$ac_ext <<_LT_EOF
+-[#line __oline__ "configure"
+-#include "confdefs.h"
+-
+-#if HAVE_DLFCN_H
+-#include <dlfcn.h>
+-#endif
+-
+-#include <stdio.h>
+-
+-#ifdef RTLD_GLOBAL
+-#  define LT_DLGLOBAL		RTLD_GLOBAL
+-#else
+-#  ifdef DL_GLOBAL
+-#    define LT_DLGLOBAL		DL_GLOBAL
+-#  else
+-#    define LT_DLGLOBAL		0
+-#  endif
+-#endif
+-
+-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+-   find out it does not work in some platform. */
+-#ifndef LT_DLLAZY_OR_NOW
+-#  ifdef RTLD_LAZY
+-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+-#  else
+-#    ifdef DL_LAZY
+-#      define LT_DLLAZY_OR_NOW		DL_LAZY
+-#    else
+-#      ifdef RTLD_NOW
+-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+-#      else
+-#        ifdef DL_NOW
+-#          define LT_DLLAZY_OR_NOW	DL_NOW
+-#        else
+-#          define LT_DLLAZY_OR_NOW	0
+-#        endif
+-#      endif
+-#    endif
+-#  endif
+-#endif
+-
+-void fnord() { int i=42;}
+-int main ()
+-{
+-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+-  int status = $lt_dlunknown;
+-
+-  if (self)
+-    {
+-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+-      /* dlclose (self); */
+-    }
+-  else
+-    puts (dlerror ());
+-
+-  return status;
+-}]
+-_LT_EOF
+-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+-    lt_status=$?
+-    case x$lt_status in
+-      x$lt_dlno_uscore) $1 ;;
+-      x$lt_dlneed_uscore) $2 ;;
+-      x$lt_dlunknown|x*) $3 ;;
+-    esac
+-  else :
+-    # compilation failed
+-    $3
+-  fi
+-fi
+-rm -fr conftest*
+-])# _LT_TRY_DLOPEN_SELF
+-
+-
+-# LT_SYS_DLOPEN_SELF
+-# ------------------
+-AC_DEFUN([LT_SYS_DLOPEN_SELF],
+-[m4_require([_LT_HEADER_DLFCN])dnl
+-if test "x$enable_dlopen" != xyes; then
+-  enable_dlopen=unknown
+-  enable_dlopen_self=unknown
+-  enable_dlopen_self_static=unknown
+-else
+-  lt_cv_dlopen=no
+-  lt_cv_dlopen_libs=
+-
+-  case $host_os in
+-  beos*)
+-    lt_cv_dlopen="load_add_on"
+-    lt_cv_dlopen_libs=
+-    lt_cv_dlopen_self=yes
+-    ;;
+-
+-  mingw* | pw32* | cegcc*)
+-    lt_cv_dlopen="LoadLibrary"
+-    lt_cv_dlopen_libs=
+-    ;;
+-
+-  cygwin*)
+-    lt_cv_dlopen="dlopen"
+-    lt_cv_dlopen_libs=
+-    ;;
+-
+-  darwin*)
+-  # if libdl is installed we need to link against it
+-    AC_CHECK_LIB([dl], [dlopen],
+-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+-    lt_cv_dlopen="dyld"
+-    lt_cv_dlopen_libs=
+-    lt_cv_dlopen_self=yes
+-    ])
+-    ;;
+-
+-  *)
+-    AC_CHECK_FUNC([shl_load],
+-	  [lt_cv_dlopen="shl_load"],
+-      [AC_CHECK_LIB([dld], [shl_load],
+-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+-	[AC_CHECK_FUNC([dlopen],
+-	      [lt_cv_dlopen="dlopen"],
+-	  [AC_CHECK_LIB([dl], [dlopen],
+-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+-	    [AC_CHECK_LIB([svld], [dlopen],
+-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+-	      [AC_CHECK_LIB([dld], [dld_link],
+-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+-	      ])
+-	    ])
+-	  ])
+-	])
+-      ])
+-    ;;
+-  esac
+-
+-  if test "x$lt_cv_dlopen" != xno; then
+-    enable_dlopen=yes
+-  else
+-    enable_dlopen=no
+-  fi
+-
+-  case $lt_cv_dlopen in
+-  dlopen)
+-    save_CPPFLAGS="$CPPFLAGS"
+-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+-
+-    save_LDFLAGS="$LDFLAGS"
+-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+-
+-    save_LIBS="$LIBS"
+-    LIBS="$lt_cv_dlopen_libs $LIBS"
+-
+-    AC_CACHE_CHECK([whether a program can dlopen itself],
+-	  lt_cv_dlopen_self, [dnl
+-	  _LT_TRY_DLOPEN_SELF(
+-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+-    ])
+-
+-    if test "x$lt_cv_dlopen_self" = xyes; then
+-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+-	  lt_cv_dlopen_self_static, [dnl
+-	  _LT_TRY_DLOPEN_SELF(
+-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+-      ])
+-    fi
+-
+-    CPPFLAGS="$save_CPPFLAGS"
+-    LDFLAGS="$save_LDFLAGS"
+-    LIBS="$save_LIBS"
+-    ;;
+-  esac
+-
+-  case $lt_cv_dlopen_self in
+-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+-  *) enable_dlopen_self=unknown ;;
+-  esac
+-
+-  case $lt_cv_dlopen_self_static in
+-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+-  *) enable_dlopen_self_static=unknown ;;
+-  esac
+-fi
+-_LT_DECL([dlopen_support], [enable_dlopen], [0],
+-	 [Whether dlopen is supported])
+-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+-	 [Whether dlopen of programs is supported])
+-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+-	 [Whether dlopen of statically linked programs is supported])
+-])# LT_SYS_DLOPEN_SELF
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+-
+-
+-# _LT_COMPILER_C_O([TAGNAME])
+-# ---------------------------
+-# Check to see if options -c and -o are simultaneously supported by compiler.
+-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+-m4_defun([_LT_COMPILER_C_O],
+-[m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_TAG_COMPILER])dnl
+-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+-   $RM -r conftest 2>/dev/null
+-   mkdir conftest
+-   cd conftest
+-   mkdir out
+-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+-   lt_compiler_flag="-o out/conftest2.$ac_objext"
+-   # Insert the option either (1) after the last *FLAGS variable, or
+-   # (2) before a word containing "conftest.", or (3) at the end.
+-   # Note that $ac_compile itself does not contain backslashes and begins
+-   # with a dollar sign (not a hyphen), so the echo should work correctly.
+-   lt_compile=`echo "$ac_compile" | $SED \
+-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+-   -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+-   (eval "$lt_compile" 2>out/conftest.err)
+-   ac_status=$?
+-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+-   then
+-     # The compiler can only warn and ignore the option if not recognized
+-     # So say no if there are warnings
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+-     fi
+-   fi
+-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+-   $RM conftest*
+-   # SGI C++ compiler will create directory out/ii_files/ for
+-   # template instantiation
+-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+-   $RM out/* && rmdir out
+-   cd ..
+-   $RM -r conftest
+-   $RM conftest*
+-])
+-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+-	[Does compiler simultaneously support -c and -o options?])
+-])# _LT_COMPILER_C_O
+-
+-
+-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+-# ----------------------------------
+-# Check to see if we can do hard links to lock some files if needed
+-m4_defun([_LT_COMPILER_FILE_LOCKS],
+-[m4_require([_LT_ENABLE_LOCK])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-_LT_COMPILER_C_O([$1])
+-
+-hard_links="nottested"
+-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+-  # do not overwrite the value of need_locks provided by the user
+-  AC_MSG_CHECKING([if we can lock with hard links])
+-  hard_links=yes
+-  $RM conftest*
+-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+-  touch conftest.a
+-  ln conftest.a conftest.b 2>&5 || hard_links=no
+-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+-  AC_MSG_RESULT([$hard_links])
+-  if test "$hard_links" = no; then
+-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+-    need_locks=warn
+-  fi
+-else
+-  need_locks=no
+-fi
+-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+-])# _LT_COMPILER_FILE_LOCKS
+-
+-
+-# _LT_CHECK_OBJDIR
+-# ----------------
+-m4_defun([_LT_CHECK_OBJDIR],
+-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+-[rm -f .libs 2>/dev/null
+-mkdir .libs 2>/dev/null
+-if test -d .libs; then
+-  lt_cv_objdir=.libs
+-else
+-  # MS-DOS does not allow filenames that begin with a dot.
+-  lt_cv_objdir=_libs
+-fi
+-rmdir .libs 2>/dev/null])
+-objdir=$lt_cv_objdir
+-_LT_DECL([], [objdir], [0],
+-         [The name of the directory that contains temporary libtool files])dnl
+-m4_pattern_allow([LT_OBJDIR])dnl
+-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+-])# _LT_CHECK_OBJDIR
+-
+-
+-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+-# --------------------------------------
+-# Check hardcoding attributes.
+-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+-[AC_MSG_CHECKING([how to hardcode library paths into programs])
+-_LT_TAGVAR(hardcode_action, $1)=
+-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+-
+-  # We can hardcode non-existent directories.
+-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+-     # have to relink, otherwise we might link with an installed library
+-     # when we should be linking with a yet-to-be-installed one
+-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+-    # Linking always hardcodes the temporary library directory.
+-    _LT_TAGVAR(hardcode_action, $1)=relink
+-  else
+-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+-    _LT_TAGVAR(hardcode_action, $1)=immediate
+-  fi
+-else
+-  # We cannot hardcode anything, or else we can only hardcode existing
+-  # directories.
+-  _LT_TAGVAR(hardcode_action, $1)=unsupported
+-fi
+-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+-
+-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+-  # Fast installation is not supported
+-  enable_fast_install=no
+-elif test "$shlibpath_overrides_runpath" = yes ||
+-     test "$enable_shared" = no; then
+-  # Fast installation is not necessary
+-  enable_fast_install=needless
+-fi
+-_LT_TAGDECL([], [hardcode_action], [0],
+-    [How to hardcode a shared library path into an executable])
+-])# _LT_LINKER_HARDCODE_LIBPATH
+-
+-
+-# _LT_CMD_STRIPLIB
+-# ----------------
+-m4_defun([_LT_CMD_STRIPLIB],
+-[m4_require([_LT_DECL_EGREP])
+-striplib=
+-old_striplib=
+-AC_MSG_CHECKING([whether stripping libraries is possible])
+-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+-  AC_MSG_RESULT([yes])
+-else
+-# FIXME - insert some real tests, host_os isn't really good enough
+-  case $host_os in
+-  darwin*)
+-    if test -n "$STRIP" ; then
+-      striplib="$STRIP -x"
+-      old_striplib="$STRIP -S"
+-      AC_MSG_RESULT([yes])
+-    else
+-      AC_MSG_RESULT([no])
+-    fi
+-    ;;
+-  *)
+-    AC_MSG_RESULT([no])
+-    ;;
+-  esac
+-fi
+-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+-_LT_DECL([], [striplib], [1])
+-])# _LT_CMD_STRIPLIB
+-
+-
+-# _LT_SYS_DYNAMIC_LINKER([TAG])
+-# -----------------------------
+-# PORTME Fill in your ld.so characteristics
+-m4_defun([_LT_SYS_DYNAMIC_LINKER],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_OBJDUMP])dnl
+-m4_require([_LT_DECL_SED])dnl
+-AC_MSG_CHECKING([dynamic linker characteristics])
+-m4_if([$1],
+-	[], [
+-if test "$GCC" = yes; then
+-  case $host_os in
+-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+-    *) lt_awk_arg="/^libraries:/" ;;
+-  esac
+-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+-    # if the path contains ";" then we assume it to be the separator
+-    # otherwise default to the standard path separator (i.e. ":") - it is
+-    # assumed that no part of a normal pathname contains ";" but that should
+-    # okay in the real world where ";" in dirpaths is itself problematic.
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+-  else
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-  fi
+-  # Ok, now we have the path, separated by spaces, we can step through it
+-  # and add multilib dir if necessary.
+-  lt_tmp_lt_search_path_spec=
+-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+-  for lt_sys_path in $lt_search_path_spec; do
+-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+-    else
+-      test -d "$lt_sys_path" && \
+-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+-    fi
+-  done
+-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+-BEGIN {RS=" "; FS="/|\n";} {
+-  lt_foo="";
+-  lt_count=0;
+-  for (lt_i = NF; lt_i > 0; lt_i--) {
+-    if ($lt_i != "" && $lt_i != ".") {
+-      if ($lt_i == "..") {
+-        lt_count++;
+-      } else {
+-        if (lt_count == 0) {
+-          lt_foo="/" $lt_i lt_foo;
+-        } else {
+-          lt_count--;
+-        }
+-      }
+-    }
+-  }
+-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+-}'`
+-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+-else
+-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+-fi])
+-library_names_spec=
+-libname_spec='lib$name'
+-soname_spec=
+-shrext_cmds=".so"
+-postinstall_cmds=
+-postuninstall_cmds=
+-finish_cmds=
+-finish_eval=
+-shlibpath_var=
+-shlibpath_overrides_runpath=unknown
+-version_type=none
+-dynamic_linker="$host_os ld.so"
+-sys_lib_dlsearch_path_spec="/lib /usr/lib"
+-need_lib_prefix=unknown
+-hardcode_into_libs=no
+-
+-# when you set need_version to no, make sure it does not cause -set_version
+-# flags to be left without arguments
+-need_version=unknown
+-
+-case $host_os in
+-aix3*)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+-  shlibpath_var=LIBPATH
+-
+-  # AIX 3 has no versioning support, so we append a major version to the name.
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  ;;
+-
+-aix[[4-9]]*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  hardcode_into_libs=yes
+-  if test "$host_cpu" = ia64; then
+-    # AIX 5 supports IA64
+-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+-    shlibpath_var=LD_LIBRARY_PATH
+-  else
+-    # With GCC up to 2.95.x, collect2 would create an import file
+-    # for dependence libraries.  The import file would start with
+-    # the line `#! .'.  This would cause the generated library to
+-    # depend on `.', always an invalid library.  This was fixed in
+-    # development snapshots of GCC prior to 3.0.
+-    case $host_os in
+-      aix4 | aix4.[[01]] | aix4.[[01]].*)
+-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+-	   echo ' yes '
+-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+-	:
+-      else
+-	can_build_shared=no
+-      fi
+-      ;;
+-    esac
+-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+-    # soname into executable. Probably we can add versioning support to
+-    # collect2, so additional links can be useful in future.
+-    if test "$aix_use_runtimelinking" = yes; then
+-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+-      # instead of lib<name>.a to let people know that these are not
+-      # typical AIX shared libraries.
+-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    else
+-      # We preserve .a as extension for shared libraries through AIX4.2
+-      # and later when we are not doing run time linking.
+-      library_names_spec='${libname}${release}.a $libname.a'
+-      soname_spec='${libname}${release}${shared_ext}$major'
+-    fi
+-    shlibpath_var=LIBPATH
+-  fi
+-  ;;
+-
+-amigaos*)
+-  case $host_cpu in
+-  powerpc)
+-    # Since July 2007 AmigaOS4 officially supports .so libraries.
+-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    ;;
+-  m68k)
+-    library_names_spec='$libname.ixlibrary $libname.a'
+-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+-    ;;
+-  esac
+-  ;;
+-
+-beos*)
+-  library_names_spec='${libname}${shared_ext}'
+-  dynamic_linker="$host_os ld.so"
+-  shlibpath_var=LIBRARY_PATH
+-  ;;
+-
+-bsdi[[45]]*)
+-  version_type=linux
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+-  # the default ld.so.conf also contains /usr/contrib/lib and
+-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+-  # libtool to hard-code these into programs
+-  ;;
+-
+-cygwin* | mingw* | pw32* | cegcc*)
+-  version_type=windows
+-  shrext_cmds=".dll"
+-  need_version=no
+-  need_lib_prefix=no
+-
+-  case $GCC,$host_os in
+-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+-    library_names_spec='$libname.dll.a'
+-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+-    postinstall_cmds='base_file=`basename \${file}`~
+-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+-      dldir=$destdir/`dirname \$dlpath`~
+-      test -d \$dldir || mkdir -p \$dldir~
+-      $install_prog $dir/$dlname \$dldir/$dlname~
+-      chmod a+x \$dldir/$dlname~
+-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+-      fi'
+-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+-      dlpath=$dir/\$dldll~
+-       $RM \$dlpath'
+-    shlibpath_overrides_runpath=yes
+-
+-    case $host_os in
+-    cygwin*)
+-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+-      ;;
+-    mingw* | cegcc*)
+-      # MinGW DLLs use traditional 'lib' prefix
+-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+-        # It is most probably a Windows format PATH printed by
+-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+-        # path with ; separators, and with drive letters. We can handle the
+-        # drive letters (cygwin fileutils understands them), so leave them,
+-        # especially as we might pass files found there to a mingw objdump,
+-        # which wouldn't understand a cygwinified path. Ahh.
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+-      else
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-      fi
+-      ;;
+-    pw32*)
+-      # pw32 DLLs use 'pw' prefix rather than 'lib'
+-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      ;;
+-    esac
+-    ;;
+-
+-  *)
+-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+-    ;;
+-  esac
+-  dynamic_linker='Win32 ld.exe'
+-  # FIXME: first we should search . and the directory the executable is in
+-  shlibpath_var=PATH
+-  ;;
+-
+-darwin* | rhapsody*)
+-  dynamic_linker="$host_os dyld"
+-  version_type=darwin
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+-  soname_spec='${libname}${release}${major}$shared_ext'
+-  shlibpath_overrides_runpath=yes
+-  shlibpath_var=DYLD_LIBRARY_PATH
+-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+-m4_if([$1], [],[
+-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+-  ;;
+-
+-dgux*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  ;;
+-
+-freebsd1*)
+-  dynamic_linker=no
+-  ;;
+-
+-freebsd* | dragonfly*)
+-  # DragonFly does not have aout.  When/if they implement a new
+-  # versioning mechanism, adjust this.
+-  if test -x /usr/bin/objformat; then
+-    objformat=`/usr/bin/objformat`
+-  else
+-    case $host_os in
+-    freebsd[[123]]*) objformat=aout ;;
+-    *) objformat=elf ;;
+-    esac
+-  fi
+-  version_type=freebsd-$objformat
+-  case $version_type in
+-    freebsd-elf*)
+-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+-      need_version=no
+-      need_lib_prefix=no
+-      ;;
+-    freebsd-*)
+-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+-      need_version=yes
+-      ;;
+-  esac
+-  shlibpath_var=LD_LIBRARY_PATH
+-  case $host_os in
+-  freebsd2*)
+-    shlibpath_overrides_runpath=yes
+-    ;;
+-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+-    shlibpath_overrides_runpath=yes
+-    hardcode_into_libs=yes
+-    ;;
+-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+-    shlibpath_overrides_runpath=no
+-    hardcode_into_libs=yes
+-    ;;
+-  *) # from 4.6 on, and DragonFly
+-    shlibpath_overrides_runpath=yes
+-    hardcode_into_libs=yes
+-    ;;
+-  esac
+-  ;;
+-
+-gnu*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  hardcode_into_libs=yes
+-  ;;
+-
+-hpux9* | hpux10* | hpux11*)
+-  # Give a soname corresponding to the major version so that dld.sl refuses to
+-  # link against other versions.
+-  version_type=sunos
+-  need_lib_prefix=no
+-  need_version=no
+-  case $host_cpu in
+-  ia64*)
+-    shrext_cmds='.so'
+-    hardcode_into_libs=yes
+-    dynamic_linker="$host_os dld.so"
+-    shlibpath_var=LD_LIBRARY_PATH
+-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    if test "X$HPUX_IA64_MODE" = X32; then
+-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+-    else
+-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+-    fi
+-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+-    ;;
+-  hppa*64*)
+-    shrext_cmds='.sl'
+-    hardcode_into_libs=yes
+-    dynamic_linker="$host_os dld.sl"
+-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+-    ;;
+-  *)
+-    shrext_cmds='.sl'
+-    dynamic_linker="$host_os dld.sl"
+-    shlibpath_var=SHLIB_PATH
+-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    ;;
+-  esac
+-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+-  postinstall_cmds='chmod 555 $lib'
+-  ;;
+-
+-interix[[3-9]]*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  ;;
+-
+-irix5* | irix6* | nonstopux*)
+-  case $host_os in
+-    nonstopux*) version_type=nonstopux ;;
+-    *)
+-	if test "$lt_cv_prog_gnu_ld" = yes; then
+-		version_type=linux
+-	else
+-		version_type=irix
+-	fi ;;
+-  esac
+-  need_lib_prefix=no
+-  need_version=no
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+-  case $host_os in
+-  irix5* | nonstopux*)
+-    libsuff= shlibsuff=
+-    ;;
+-  *)
+-    case $LD in # libtool.m4 will add one of these switches to LD
+-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+-      libsuff= shlibsuff= libmagic=32-bit;;
+-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+-      libsuff=32 shlibsuff=N32 libmagic=N32;;
+-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+-    *) libsuff= shlibsuff= libmagic=never-match;;
+-    esac
+-    ;;
+-  esac
+-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+-  shlibpath_overrides_runpath=no
+-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+-  hardcode_into_libs=yes
+-  ;;
+-
+-# No shared lib support for Linux oldld, aout, or coff.
+-linux*oldld* | linux*aout* | linux*coff*)
+-  dynamic_linker=no
+-  ;;
+-
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  # Some binutils ld are patched to set DT_RUNPATH
+-  save_LDFLAGS=$LDFLAGS
+-  save_libdir=$libdir
+-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+-       [shlibpath_overrides_runpath=yes])])
+-  LDFLAGS=$save_LDFLAGS
+-  libdir=$save_libdir
+-
+-  # This implies no fast_install, which is unacceptable.
+-  # Some rework will be needed to allow for fast_install
+-  # before this can be enabled.
+-  hardcode_into_libs=yes
+-
+-  # Add ABI-specific directories to the system library path.
+-  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+-
+-  # Append ld.so.conf contents to the search path
+-  if test -f /etc/ld.so.conf; then
+-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+-    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+-  fi
+-
+-  # We used to test for /lib/ld.so.1 and disable shared libraries on
+-  # powerpc, because MkLinux only supported shared libraries with the
+-  # GNU dynamic linker.  Since this was broken with cross compilers,
+-  # most powerpc-linux boxes support dynamic linking these days and
+-  # people can always --disable-shared, the test was removed, and we
+-  # assume the GNU/Linux dynamic linker is in use.
+-  dynamic_linker='GNU/Linux ld.so'
+-  ;;
+-
+-netbsd*)
+-  version_type=sunos
+-  need_lib_prefix=no
+-  need_version=no
+-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+-    dynamic_linker='NetBSD (a.out) ld.so'
+-  else
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    dynamic_linker='NetBSD ld.elf_so'
+-  fi
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  hardcode_into_libs=yes
+-  ;;
+-
+-newsos6)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  ;;
+-
+-*nto* | *qnx*)
+-  version_type=qnx
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  dynamic_linker='ldqnx.so'
+-  ;;
+-
+-openbsd*)
+-  version_type=sunos
+-  sys_lib_dlsearch_path_spec="/usr/lib"
+-  need_lib_prefix=no
+-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+-  case $host_os in
+-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+-    *)				need_version=no  ;;
+-  esac
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-    case $host_os in
+-      openbsd2.[[89]] | openbsd2.[[89]].*)
+-	shlibpath_overrides_runpath=no
+-	;;
+-      *)
+-	shlibpath_overrides_runpath=yes
+-	;;
+-      esac
+-  else
+-    shlibpath_overrides_runpath=yes
+-  fi
+-  ;;
+-
+-os2*)
+-  libname_spec='$name'
+-  shrext_cmds=".dll"
+-  need_lib_prefix=no
+-  library_names_spec='$libname${shared_ext} $libname.a'
+-  dynamic_linker='OS/2 ld.exe'
+-  shlibpath_var=LIBPATH
+-  ;;
+-
+-osf3* | osf4* | osf5*)
+-  version_type=osf
+-  need_lib_prefix=no
+-  need_version=no
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+-  ;;
+-
+-rdos*)
+-  dynamic_linker=no
+-  ;;
+-
+-solaris*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  hardcode_into_libs=yes
+-  # ldd complains unless libraries are executable
+-  postinstall_cmds='chmod +x $lib'
+-  ;;
+-
+-sunos4*)
+-  version_type=sunos
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  if test "$with_gnu_ld" = yes; then
+-    need_lib_prefix=no
+-  fi
+-  need_version=yes
+-  ;;
+-
+-sysv4 | sysv4.3*)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  case $host_vendor in
+-    sni)
+-      shlibpath_overrides_runpath=no
+-      need_lib_prefix=no
+-      runpath_var=LD_RUN_PATH
+-      ;;
+-    siemens)
+-      need_lib_prefix=no
+-      ;;
+-    motorola)
+-      need_lib_prefix=no
+-      need_version=no
+-      shlibpath_overrides_runpath=no
+-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+-      ;;
+-  esac
+-  ;;
+-
+-sysv4*MP*)
+-  if test -d /usr/nec ;then
+-    version_type=linux
+-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+-    soname_spec='$libname${shared_ext}.$major'
+-    shlibpath_var=LD_LIBRARY_PATH
+-  fi
+-  ;;
+-
+-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+-  version_type=freebsd-elf
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  hardcode_into_libs=yes
+-  if test "$with_gnu_ld" = yes; then
+-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+-  else
+-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+-    case $host_os in
+-      sco3.2v5*)
+-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+-	;;
+-    esac
+-  fi
+-  sys_lib_dlsearch_path_spec='/usr/lib'
+-  ;;
+-
+-tpf*)
+-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  ;;
+-
+-uts4*)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  ;;
+-
+-*)
+-  dynamic_linker=no
+-  ;;
+-esac
+-AC_MSG_RESULT([$dynamic_linker])
+-test "$dynamic_linker" = no && can_build_shared=no
+-
+-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+-if test "$GCC" = yes; then
+-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+-fi
+-
+-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+-fi
+-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+-fi
+-
+-_LT_DECL([], [variables_saved_for_relink], [1],
+-    [Variables whose values should be saved in libtool wrapper scripts and
+-    restored at link time])
+-_LT_DECL([], [need_lib_prefix], [0],
+-    [Do we need the "lib" prefix for modules?])
+-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+-_LT_DECL([], [version_type], [0], [Library versioning type])
+-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+-_LT_DECL([], [shlibpath_overrides_runpath], [0],
+-    [Is shlibpath searched before the hard-coded library search path?])
+-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+-_LT_DECL([], [library_names_spec], [1],
+-    [[List of archive names.  First name is the real one, the rest are links.
+-    The last name is the one that the linker finds with -lNAME]])
+-_LT_DECL([], [soname_spec], [1],
+-    [[The coded name of the library, if different from the real name]])
+-_LT_DECL([], [postinstall_cmds], [2],
+-    [Command to use after installation of a shared archive])
+-_LT_DECL([], [postuninstall_cmds], [2],
+-    [Command to use after uninstallation of a shared archive])
+-_LT_DECL([], [finish_cmds], [2],
+-    [Commands used to finish a libtool library installation in a directory])
+-_LT_DECL([], [finish_eval], [1],
+-    [[As "finish_cmds", except a single script fragment to be evaled but
+-    not shown]])
+-_LT_DECL([], [hardcode_into_libs], [0],
+-    [Whether we should hardcode library paths into libraries])
+-_LT_DECL([], [sys_lib_search_path_spec], [2],
+-    [Compile-time system search path for libraries])
+-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+-    [Run-time system search path for libraries])
+-])# _LT_SYS_DYNAMIC_LINKER
+-
+-
+-# _LT_PATH_TOOL_PREFIX(TOOL)
+-# --------------------------
+-# find a file program which can recognize shared library
+-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+-[m4_require([_LT_DECL_EGREP])dnl
+-AC_MSG_CHECKING([for $1])
+-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+-[case $MAGIC_CMD in
+-[[\\/*] |  ?:[\\/]*])
+-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+-  ;;
+-*)
+-  lt_save_MAGIC_CMD="$MAGIC_CMD"
+-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-dnl $ac_dummy forces splitting on constant user-supplied paths.
+-dnl POSIX.2 word splitting is done only on the output of word expansions,
+-dnl not every word.  This closes a longstanding sh security hole.
+-  ac_dummy="m4_if([$2], , $PATH, [$2])"
+-  for ac_dir in $ac_dummy; do
+-    IFS="$lt_save_ifs"
+-    test -z "$ac_dir" && ac_dir=.
+-    if test -f $ac_dir/$1; then
+-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+-      if test -n "$file_magic_test_file"; then
+-	case $deplibs_check_method in
+-	"file_magic "*)
+-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+-	    $EGREP "$file_magic_regex" > /dev/null; then
+-	    :
+-	  else
+-	    cat <<_LT_EOF 1>&2
+-
+-*** Warning: the command libtool uses to detect shared libraries,
+-*** $file_magic_cmd, produces output that libtool cannot recognize.
+-*** The result is that libtool may fail to recognize shared libraries
+-*** as such.  This will affect the creation of libtool libraries that
+-*** depend on shared libraries, but programs linked with such libtool
+-*** libraries will work regardless of this problem.  Nevertheless, you
+-*** may want to report the problem to your system manager and/or to
+-*** bug-libtool@gnu.org
+-
+-_LT_EOF
+-	  fi ;;
+-	esac
+-      fi
+-      break
+-    fi
+-  done
+-  IFS="$lt_save_ifs"
+-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+-  ;;
+-esac])
+-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+-if test -n "$MAGIC_CMD"; then
+-  AC_MSG_RESULT($MAGIC_CMD)
+-else
+-  AC_MSG_RESULT(no)
+-fi
+-_LT_DECL([], [MAGIC_CMD], [0],
+-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+-])# _LT_PATH_TOOL_PREFIX
+-
+-# Old name:
+-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+-
+-
+-# _LT_PATH_MAGIC
+-# --------------
+-# find a file program which can recognize a shared library
+-m4_defun([_LT_PATH_MAGIC],
+-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+-if test -z "$lt_cv_path_MAGIC_CMD"; then
+-  if test -n "$ac_tool_prefix"; then
+-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+-  else
+-    MAGIC_CMD=:
+-  fi
+-fi
+-])# _LT_PATH_MAGIC
+-
+-
+-# LT_PATH_LD
+-# ----------
+-# find the pathname to the GNU or non-GNU linker
+-AC_DEFUN([LT_PATH_LD],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+-m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-
+-AC_ARG_WITH([gnu-ld],
+-    [AS_HELP_STRING([--with-gnu-ld],
+-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+-    [test "$withval" = no || with_gnu_ld=yes],
+-    [with_gnu_ld=no])dnl
+-
+-ac_prog=ld
+-if test "$GCC" = yes; then
+-  # Check if gcc -print-prog-name=ld gives a path.
+-  AC_MSG_CHECKING([for ld used by $CC])
+-  case $host in
+-  *-*-mingw*)
+-    # gcc leaves a trailing carriage return which upsets mingw
+-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+-  *)
+-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+-  esac
+-  case $ac_prog in
+-    # Accept absolute paths.
+-    [[\\/]]* | ?:[[\\/]]*)
+-      re_direlt='/[[^/]][[^/]]*/\.\./'
+-      # Canonicalize the pathname of ld
+-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+-      done
+-      test -z "$LD" && LD="$ac_prog"
+-      ;;
+-  "")
+-    # If it fails, then pretend we aren't using GCC.
+-    ac_prog=ld
+-    ;;
+-  *)
+-    # If it is relative, then search for the first ld in PATH.
+-    with_gnu_ld=unknown
+-    ;;
+-  esac
+-elif test "$with_gnu_ld" = yes; then
+-  AC_MSG_CHECKING([for GNU ld])
+-else
+-  AC_MSG_CHECKING([for non-GNU ld])
+-fi
+-AC_CACHE_VAL(lt_cv_path_LD,
+-[if test -z "$LD"; then
+-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-  for ac_dir in $PATH; do
+-    IFS="$lt_save_ifs"
+-    test -z "$ac_dir" && ac_dir=.
+-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+-      lt_cv_path_LD="$ac_dir/$ac_prog"
+-      # Check to see if the program is GNU ld.  I'd rather use --version,
+-      # but apparently some variants of GNU ld only accept -v.
+-      # Break only if it was the GNU/non-GNU ld that we prefer.
+-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+-      *GNU* | *'with BFD'*)
+-	test "$with_gnu_ld" != no && break
+-	;;
+-      *)
+-	test "$with_gnu_ld" != yes && break
+-	;;
+-      esac
+-    fi
+-  done
+-  IFS="$lt_save_ifs"
+-else
+-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+-fi])
+-LD="$lt_cv_path_LD"
+-if test -n "$LD"; then
+-  AC_MSG_RESULT($LD)
+-else
+-  AC_MSG_RESULT(no)
+-fi
+-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+-_LT_PATH_LD_GNU
+-AC_SUBST([LD])
+-
+-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+-])# LT_PATH_LD
+-
+-# Old names:
+-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_PROG_LD], [])
+-dnl AC_DEFUN([AC_PROG_LD], [])
+-
+-
+-# _LT_PATH_LD_GNU
+-#- --------------
+-m4_defun([_LT_PATH_LD_GNU],
+-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+-case `$LD -v 2>&1 </dev/null` in
+-*GNU* | *'with BFD'*)
+-  lt_cv_prog_gnu_ld=yes
+-  ;;
+-*)
+-  lt_cv_prog_gnu_ld=no
+-  ;;
+-esac])
+-with_gnu_ld=$lt_cv_prog_gnu_ld
+-])# _LT_PATH_LD_GNU
+-
+-
+-# _LT_CMD_RELOAD
+-# --------------
+-# find reload flag for linker
+-#   -- PORTME Some linkers may need a different reload flag.
+-m4_defun([_LT_CMD_RELOAD],
+-[AC_CACHE_CHECK([for $LD option to reload object files],
+-  lt_cv_ld_reload_flag,
+-  [lt_cv_ld_reload_flag='-r'])
+-reload_flag=$lt_cv_ld_reload_flag
+-case $reload_flag in
+-"" | " "*) ;;
+-*) reload_flag=" $reload_flag" ;;
+-esac
+-reload_cmds='$LD$reload_flag -o $output$reload_objs'
+-case $host_os in
+-  darwin*)
+-    if test "$GCC" = yes; then
+-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+-    else
+-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+-    fi
+-    ;;
+-esac
+-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+-_LT_DECL([], [reload_cmds], [2])dnl
+-])# _LT_CMD_RELOAD
+-
+-
+-# _LT_CHECK_MAGIC_METHOD
+-# ----------------------
+-# how to check for library dependencies
+-#  -- PORTME fill in with the dynamic library characteristics
+-m4_defun([_LT_CHECK_MAGIC_METHOD],
+-[m4_require([_LT_DECL_EGREP])
+-m4_require([_LT_DECL_OBJDUMP])
+-AC_CACHE_CHECK([how to recognize dependent libraries],
+-lt_cv_deplibs_check_method,
+-[lt_cv_file_magic_cmd='$MAGIC_CMD'
+-lt_cv_file_magic_test_file=
+-lt_cv_deplibs_check_method='unknown'
+-# Need to set the preceding variable on all platforms that support
+-# interlibrary dependencies.
+-# 'none' -- dependencies not supported.
+-# `unknown' -- same as none, but documents that we really don't know.
+-# 'pass_all' -- all dependencies passed with no checks.
+-# 'test_compile' -- check by making test program.
+-# 'file_magic [[regex]]' -- check by looking for files in library path
+-# which responds to the $file_magic_cmd with a given extended regex.
+-# If you have `file' or equivalent on your system and you're not sure
+-# whether `pass_all' will *always* work, you probably want this one.
+-
+-case $host_os in
+-aix[[4-9]]*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-beos*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-bsdi[[45]]*)
+-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+-  lt_cv_file_magic_cmd='/usr/bin/file -L'
+-  lt_cv_file_magic_test_file=/shlib/libc.so
+-  ;;
+-
+-cygwin*)
+-  # func_win32_libid is a shell function defined in ltmain.sh
+-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+-  lt_cv_file_magic_cmd='func_win32_libid'
+-  ;;
+-
+-mingw* | pw32*)
+-  # Base MSYS/MinGW do not provide the 'file' command needed by
+-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+-  # unless we find 'file', for example because we are cross-compiling.
+-  if ( file / ) >/dev/null 2>&1; then
+-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+-    lt_cv_file_magic_cmd='func_win32_libid'
+-  else
+-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+-    lt_cv_file_magic_cmd='$OBJDUMP -f'
+-  fi
+-  ;;
+-
+-cegcc)
+-  # use the weaker test based on 'objdump'. See mingw*.
+-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+-  lt_cv_file_magic_cmd='$OBJDUMP -f'
+-  ;;
+-
+-darwin* | rhapsody*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-freebsd* | dragonfly*)
+-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+-    case $host_cpu in
+-    i*86 )
+-      # Not sure whether the presence of OpenBSD here was a mistake.
+-      # Let's accept both of them until this is cleared up.
+-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+-      lt_cv_file_magic_cmd=/usr/bin/file
+-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+-      ;;
+-    esac
+-  else
+-    lt_cv_deplibs_check_method=pass_all
+-  fi
+-  ;;
+-
+-gnu*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-hpux10.20* | hpux11*)
+-  lt_cv_file_magic_cmd=/usr/bin/file
+-  case $host_cpu in
+-  ia64*)
+-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+-    ;;
+-  hppa*64*)
+-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+-    ;;
+-  *)
+-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+-    ;;
+-  esac
+-  ;;
+-
+-interix[[3-9]]*)
+-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+-  ;;
+-
+-irix5* | irix6* | nonstopux*)
+-  case $LD in
+-  *-32|*"-32 ") libmagic=32-bit;;
+-  *-n32|*"-n32 ") libmagic=N32;;
+-  *-64|*"-64 ") libmagic=64-bit;;
+-  *) libmagic=never-match;;
+-  esac
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-netbsd*)
+-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+-  else
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+-  fi
+-  ;;
+-
+-newos6*)
+-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+-  lt_cv_file_magic_cmd=/usr/bin/file
+-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+-  ;;
+-
+-*nto* | *qnx*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-openbsd*)
+-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+-  else
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+-  fi
+-  ;;
+-
+-osf3* | osf4* | osf5*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-rdos*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-solaris*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-sysv4 | sysv4.3*)
+-  case $host_vendor in
+-  motorola)
+-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+-    ;;
+-  ncr)
+-    lt_cv_deplibs_check_method=pass_all
+-    ;;
+-  sequent)
+-    lt_cv_file_magic_cmd='/bin/file'
+-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+-    ;;
+-  sni)
+-    lt_cv_file_magic_cmd='/bin/file'
+-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+-    lt_cv_file_magic_test_file=/lib/libc.so
+-    ;;
+-  siemens)
+-    lt_cv_deplibs_check_method=pass_all
+-    ;;
+-  pc)
+-    lt_cv_deplibs_check_method=pass_all
+-    ;;
+-  esac
+-  ;;
+-
+-tpf*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-esac
+-])
+-file_magic_cmd=$lt_cv_file_magic_cmd
+-deplibs_check_method=$lt_cv_deplibs_check_method
+-test -z "$deplibs_check_method" && deplibs_check_method=unknown
+-
+-_LT_DECL([], [deplibs_check_method], [1],
+-    [Method to check whether dependent libraries are shared objects])
+-_LT_DECL([], [file_magic_cmd], [1],
+-    [Command to use when deplibs_check_method == "file_magic"])
+-])# _LT_CHECK_MAGIC_METHOD
+-
+-
+-# LT_PATH_NM
+-# ----------
+-# find the pathname to a BSD- or MS-compatible name lister
+-AC_DEFUN([LT_PATH_NM],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+-[if test -n "$NM"; then
+-  # Let the user override the test.
+-  lt_cv_path_NM="$NM"
+-else
+-  lt_nm_to_check="${ac_tool_prefix}nm"
+-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+-    lt_nm_to_check="$lt_nm_to_check nm"
+-  fi
+-  for lt_tmp_nm in $lt_nm_to_check; do
+-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+-      IFS="$lt_save_ifs"
+-      test -z "$ac_dir" && ac_dir=.
+-      tmp_nm="$ac_dir/$lt_tmp_nm"
+-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+-	# Check to see if the nm accepts a BSD-compat flag.
+-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+-	#   nm: unknown option "B" ignored
+-	# Tru64's nm complains that /dev/null is an invalid object file
+-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+-	*/dev/null* | *'Invalid file or object type'*)
+-	  lt_cv_path_NM="$tmp_nm -B"
+-	  break
+-	  ;;
+-	*)
+-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+-	  */dev/null*)
+-	    lt_cv_path_NM="$tmp_nm -p"
+-	    break
+-	    ;;
+-	  *)
+-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+-	    continue # so that we can try to find one that supports BSD flags
+-	    ;;
+-	  esac
+-	  ;;
+-	esac
+-      fi
+-    done
+-    IFS="$lt_save_ifs"
+-  done
+-  : ${lt_cv_path_NM=no}
+-fi])
+-if test "$lt_cv_path_NM" != "no"; then
+-  NM="$lt_cv_path_NM"
+-else
+-  # Didn't find any BSD compatible name lister, look for dumpbin.
+-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+-  AC_SUBST([DUMPBIN])
+-  if test "$DUMPBIN" != ":"; then
+-    NM="$DUMPBIN"
+-  fi
+-fi
+-test -z "$NM" && NM=nm
+-AC_SUBST([NM])
+-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+-
+-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+-  [lt_cv_nm_interface="BSD nm"
+-  echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+-  (eval "$ac_compile" 2>conftest.err)
+-  cat conftest.err >&AS_MESSAGE_LOG_FD
+-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+-  cat conftest.err >&AS_MESSAGE_LOG_FD
+-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+-  cat conftest.out >&AS_MESSAGE_LOG_FD
+-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+-    lt_cv_nm_interface="MS dumpbin"
+-  fi
+-  rm -f conftest*])
+-])# LT_PATH_NM
+-
+-# Old names:
+-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_PROG_NM], [])
+-dnl AC_DEFUN([AC_PROG_NM], [])
+-
+-
+-# LT_LIB_M
+-# --------
+-# check for math library
+-AC_DEFUN([LT_LIB_M],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-LIBM=
+-case $host in
+-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+-  # These system don't have libm, or don't need it
+-  ;;
+-*-ncr-sysv4.3*)
+-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+-  ;;
+-*)
+-  AC_CHECK_LIB(m, cos, LIBM="-lm")
+-  ;;
+-esac
+-AC_SUBST([LIBM])
+-])# LT_LIB_M
+-
+-# Old name:
+-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_CHECK_LIBM], [])
+-
+-
+-# _LT_COMPILER_NO_RTTI([TAGNAME])
+-# -------------------------------
+-m4_defun([_LT_COMPILER_NO_RTTI],
+-[m4_require([_LT_TAG_COMPILER])dnl
+-
+-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+-
+-if test "$GCC" = yes; then
+-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+-
+-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+-    lt_cv_prog_compiler_rtti_exceptions,
+-    [-fno-rtti -fno-exceptions], [],
+-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+-fi
+-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+-	[Compiler flag to turn off builtin functions])
+-])# _LT_COMPILER_NO_RTTI
+-
+-
+-# _LT_CMD_GLOBAL_SYMBOLS
+-# ----------------------
+-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([LT_PATH_NM])dnl
+-AC_REQUIRE([LT_PATH_LD])dnl
+-m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-m4_require([_LT_TAG_COMPILER])dnl
+-
+-# Check for command to grab the raw symbol name followed by C symbol from nm.
+-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+-[
+-# These are sane defaults that work on at least a few old systems.
+-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+-
+-# Character class describing NM global symbol codes.
+-symcode='[[BCDEGRST]]'
+-
+-# Regexp to match symbols that can be accessed directly from C.
+-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+-
+-# Define system-specific variables.
+-case $host_os in
+-aix*)
+-  symcode='[[BCDT]]'
+-  ;;
+-cygwin* | mingw* | pw32* | cegcc*)
+-  symcode='[[ABCDGISTW]]'
+-  ;;
+-hpux*)
+-  if test "$host_cpu" = ia64; then
+-    symcode='[[ABCDEGRST]]'
+-  fi
+-  ;;
+-irix* | nonstopux*)
+-  symcode='[[BCDEGRST]]'
+-  ;;
+-osf*)
+-  symcode='[[BCDEGQRST]]'
+-  ;;
+-solaris*)
+-  symcode='[[BDRT]]'
+-  ;;
+-sco3.2v5*)
+-  symcode='[[DT]]'
+-  ;;
+-sysv4.2uw2*)
+-  symcode='[[DT]]'
+-  ;;
+-sysv5* | sco5v6* | unixware* | OpenUNIX*)
+-  symcode='[[ABDT]]'
+-  ;;
+-sysv4)
+-  symcode='[[DFNSTU]]'
+-  ;;
+-esac
+-
+-# If we're using GNU nm, then use its standard symbol codes.
+-case `$NM -V 2>&1` in
+-*GNU* | *'with BFD'*)
+-  symcode='[[ABCDGIRSTW]]' ;;
+-esac
+-
+-# Transform an extracted symbol line into a proper C declaration.
+-# Some systems (esp. on ia64) link data and code symbols differently,
+-# so use this general approach.
+-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+-
+-# Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+-
+-# Handle CRLF in mingw tool chain
+-opt_cr=
+-case $build_os in
+-mingw*)
+-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+-  ;;
+-esac
+-
+-# Try without a prefix underscore, then with it.
+-for ac_symprfx in "" "_"; do
+-
+-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+-  symxfrm="\\1 $ac_symprfx\\2 \\2"
+-
+-  # Write the raw and C identifiers.
+-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+-    # Fake it for dumpbin and say T for any non-static function
+-    # and D for any global variable.
+-    # Also find C++ and __fastcall symbols from MSVC++,
+-    # which start with @ or ?.
+-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+-"     {last_section=section; section=\$ 3};"\
+-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+-"     \$ 0!~/External *\|/{next};"\
+-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+-"     {if(hide[section]) next};"\
+-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+-"     ' prfx=^$ac_symprfx]"
+-  else
+-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+-  fi
+-
+-  # Check to see that the pipe works correctly.
+-  pipe_works=no
+-
+-  rm -f conftest*
+-  cat > conftest.$ac_ext <<_LT_EOF
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-char nm_test_var;
+-void nm_test_func(void);
+-void nm_test_func(void){}
+-#ifdef __cplusplus
+-}
+-#endif
+-int main(){nm_test_var='a';nm_test_func();return(0);}
+-_LT_EOF
+-
+-  if AC_TRY_EVAL(ac_compile); then
+-    # Now try to grab the symbols.
+-    nlist=conftest.nm
+-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+-      # Try sorting and uniquifying the output.
+-      if sort "$nlist" | uniq > "$nlist"T; then
+-	mv -f "$nlist"T "$nlist"
+-      else
+-	rm -f "$nlist"T
+-      fi
+-
+-      # Make sure that we snagged all the symbols we need.
+-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+-	  cat <<_LT_EOF > conftest.$ac_ext
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-_LT_EOF
+-	  # Now generate the symbol file.
+-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+-
+-	  cat <<_LT_EOF >> conftest.$ac_ext
+-
+-/* The mapping between symbol names and symbols.  */
+-const struct {
+-  const char *name;
+-  void       *address;
+-}
+-lt__PROGRAM__LTX_preloaded_symbols[[]] =
+-{
+-  { "@PROGRAM@", (void *) 0 },
+-_LT_EOF
+-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+-	  cat <<\_LT_EOF >> conftest.$ac_ext
+-  {0, (void *) 0}
+-};
+-
+-/* This works around a problem in FreeBSD linker */
+-#ifdef FREEBSD_WORKAROUND
+-static const void *lt_preloaded_setup() {
+-  return lt__PROGRAM__LTX_preloaded_symbols;
+-}
+-#endif
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-_LT_EOF
+-	  # Now try linking the two files.
+-	  mv conftest.$ac_objext conftstm.$ac_objext
+-	  lt_save_LIBS="$LIBS"
+-	  lt_save_CFLAGS="$CFLAGS"
+-	  LIBS="conftstm.$ac_objext"
+-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+-	    pipe_works=yes
+-	  fi
+-	  LIBS="$lt_save_LIBS"
+-	  CFLAGS="$lt_save_CFLAGS"
+-	else
+-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+-	fi
+-      else
+-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+-      fi
+-    else
+-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+-    fi
+-  else
+-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+-    cat conftest.$ac_ext >&5
+-  fi
+-  rm -rf conftest* conftst*
+-
+-  # Do not use the global_symbol_pipe unless it works.
+-  if test "$pipe_works" = yes; then
+-    break
+-  else
+-    lt_cv_sys_global_symbol_pipe=
+-  fi
+-done
+-])
+-if test -z "$lt_cv_sys_global_symbol_pipe"; then
+-  lt_cv_sys_global_symbol_to_cdecl=
+-fi
+-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+-  AC_MSG_RESULT(failed)
+-else
+-  AC_MSG_RESULT(ok)
+-fi
+-
+-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+-    [Take the output of nm and produce a listing of raw symbols and C names])
+-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+-    [Transform the output of nm in a proper C declaration])
+-_LT_DECL([global_symbol_to_c_name_address],
+-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+-    [Transform the output of nm in a C name address pair])
+-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+-    [Transform the output of nm in a C name address pair when lib prefix is needed])
+-]) # _LT_CMD_GLOBAL_SYMBOLS
+-
+-
+-# _LT_COMPILER_PIC([TAGNAME])
+-# ---------------------------
+-m4_defun([_LT_COMPILER_PIC],
+-[m4_require([_LT_TAG_COMPILER])dnl
+-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-_LT_TAGVAR(lt_prog_compiler_static, $1)=
+-
+-AC_MSG_CHECKING([for $compiler option to produce PIC])
+-m4_if([$1], [CXX], [
+-  # C++ specific cases for pic, static, wl, etc.
+-  if test "$GXX" = yes; then
+-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-
+-    case $host_os in
+-    aix*)
+-      # All AIX code is PIC.
+-      if test "$host_cpu" = ia64; then
+-	# AIX 5 now supports IA64 processor
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-        ;;
+-      m68k)
+-            # FIXME: we need at least 68020 code to build shared libraries, but
+-            # adding the `-m68020' flag to GCC prevents building anything better,
+-            # like `-m68040'.
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+-        ;;
+-      esac
+-      ;;
+-
+-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+-      # PIC is the default for these OSes.
+-      ;;
+-    mingw* | cygwin* | os2* | pw32* | cegcc*)
+-      # This hack is so that the source file can tell whether it is being
+-      # built for inclusion in a dll (and should export symbols for example).
+-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+-      # (--disable-auto-import) libraries
+-      m4_if([$1], [GCJ], [],
+-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+-      ;;
+-    darwin* | rhapsody*)
+-      # PIC is the default on this platform
+-      # Common symbols not allowed in MH_DYLIB files
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+-      ;;
+-    *djgpp*)
+-      # DJGPP does not support shared libraries at all
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-      ;;
+-    interix[[3-9]]*)
+-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+-      # Instead, we relocate shared libraries at runtime.
+-      ;;
+-    sysv4*MP*)
+-      if test -d /usr/nec; then
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+-      fi
+-      ;;
+-    hpux*)
+-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+-      # sets the default TLS model and affects inlining.
+-      case $host_cpu in
+-      hppa*64*)
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	;;
+-      esac
+-      ;;
+-    *qnx* | *nto*)
+-      # QNX uses GNU C++, but need to define -shared option too, otherwise
+-      # it will coredump.
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-      ;;
+-    *)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-      ;;
+-    esac
+-  else
+-    case $host_os in
+-      aix[[4-9]]*)
+-	# All AIX code is PIC.
+-	if test "$host_cpu" = ia64; then
+-	  # AIX 5 now supports IA64 processor
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	else
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+-	fi
+-	;;
+-      chorus*)
+-	case $cc_basename in
+-	cxch68*)
+-	  # Green Hills C++ Compiler
+-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+-	  ;;
+-	esac
+-	;;
+-      dgux*)
+-	case $cc_basename in
+-	  ec++*)
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    ;;
+-	  ghcx*)
+-	    # Green Hills C++ Compiler
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      freebsd* | dragonfly*)
+-	# FreeBSD uses GNU C++
+-	;;
+-      hpux9* | hpux10* | hpux11*)
+-	case $cc_basename in
+-	  CC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+-	    if test "$host_cpu" != ia64; then
+-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+-	    fi
+-	    ;;
+-	  aCC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+-	    case $host_cpu in
+-	    hppa*64*|ia64*)
+-	      # +Z the default
+-	      ;;
+-	    *)
+-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+-	      ;;
+-	    esac
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      interix*)
+-	# This is c89, which is MS Visual C++ (no shared libs)
+-	# Anyone wants to do a port?
+-	;;
+-      irix5* | irix6* | nonstopux*)
+-	case $cc_basename in
+-	  CC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-	    # CC pic flag -KPIC is the default.
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      linux* | k*bsd*-gnu)
+-	case $cc_basename in
+-	  KCC*)
+-	    # KAI C++ Compiler
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	    ;;
+-	  ecpc* )
+-	    # old Intel C++ for x86_64 which still supported -KPIC.
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-	    ;;
+-	  icpc* )
+-	    # Intel C++, used to be incompatible with GCC.
+-	    # ICC 10 doesn't accept -KPIC any more.
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-	    ;;
+-	  pgCC* | pgcpp*)
+-	    # Portland Group C++ compiler
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    ;;
+-	  cxx*)
+-	    # Compaq C++
+-	    # Make sure the PIC flag is empty.  It appears that all Alpha
+-	    # Linux and Compaq Tru64 Unix objects are PIC.
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-	    ;;
+-	  xlc* | xlC*)
+-	    # IBM XL 8.0 on PPC
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+-	    ;;
+-	  *)
+-	    case `$CC -V 2>&1 | sed 5q` in
+-	    *Sun\ C*)
+-	      # Sun C++ 5.9
+-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+-	      ;;
+-	    esac
+-	    ;;
+-	esac
+-	;;
+-      lynxos*)
+-	;;
+-      m88k*)
+-	;;
+-      mvs*)
+-	case $cc_basename in
+-	  cxx*)
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      netbsd*)
+-	;;
+-      *qnx* | *nto*)
+-        # QNX uses GNU C++, but need to define -shared option too, otherwise
+-        # it will coredump.
+-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-        ;;
+-      osf3* | osf4* | osf5*)
+-	case $cc_basename in
+-	  KCC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+-	    ;;
+-	  RCC*)
+-	    # Rational C++ 2.4.1
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    ;;
+-	  cxx*)
+-	    # Digital/Compaq C++
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    # Make sure the PIC flag is empty.  It appears that all Alpha
+-	    # Linux and Compaq Tru64 Unix objects are PIC.
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      psos*)
+-	;;
+-      solaris*)
+-	case $cc_basename in
+-	  CC*)
+-	    # Sun C++ 4.2, 5.x and Centerline C++
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+-	    ;;
+-	  gcx*)
+-	    # Green Hills C++ Compiler
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      sunos4*)
+-	case $cc_basename in
+-	  CC*)
+-	    # Sun C++ 4.x
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    ;;
+-	  lcc*)
+-	    # Lucid
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+-	case $cc_basename in
+-	  CC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    ;;
+-	esac
+-	;;
+-      tandem*)
+-	case $cc_basename in
+-	  NCC*)
+-	    # NonStop-UX NCC 3.20
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      vxworks*)
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-	;;
+-    esac
+-  fi
+-],
+-[
+-  if test "$GCC" = yes; then
+-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-
+-    case $host_os in
+-      aix*)
+-      # All AIX code is PIC.
+-      if test "$host_cpu" = ia64; then
+-	# AIX 5 now supports IA64 processor
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-        ;;
+-      m68k)
+-            # FIXME: we need at least 68020 code to build shared libraries, but
+-            # adding the `-m68020' flag to GCC prevents building anything better,
+-            # like `-m68040'.
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+-        ;;
+-      esac
+-      ;;
+-
+-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+-      # PIC is the default for these OSes.
+-      ;;
+-
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
+-      # This hack is so that the source file can tell whether it is being
+-      # built for inclusion in a dll (and should export symbols for example).
+-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+-      # (--disable-auto-import) libraries
+-      m4_if([$1], [GCJ], [],
+-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+-      ;;
+-
+-    darwin* | rhapsody*)
+-      # PIC is the default on this platform
+-      # Common symbols not allowed in MH_DYLIB files
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+-      ;;
+-
+-    hpux*)
+-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+-      # sets the default TLS model and affects inlining.
+-      case $host_cpu in
+-      hppa*64*)
+-	# +Z the default
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	;;
+-      esac
+-      ;;
+-
+-    interix[[3-9]]*)
+-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+-      # Instead, we relocate shared libraries at runtime.
+-      ;;
+-
+-    msdosdjgpp*)
+-      # Just because we use GCC doesn't mean we suddenly get shared libraries
+-      # on systems that don't support them.
+-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-      enable_shared=no
+-      ;;
+-
+-    *nto* | *qnx*)
+-      # QNX uses GNU C++, but need to define -shared option too, otherwise
+-      # it will coredump.
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-      ;;
+-
+-    sysv4*MP*)
+-      if test -d /usr/nec; then
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+-      fi
+-      ;;
+-
+-    *)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-      ;;
+-    esac
+-  else
+-    # PORTME Check for flag to pass linker flags through the system compiler.
+-    case $host_os in
+-    aix*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      if test "$host_cpu" = ia64; then
+-	# AIX 5 now supports IA64 processor
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      else
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+-      fi
+-      ;;
+-
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
+-      # This hack is so that the source file can tell whether it is being
+-      # built for inclusion in a dll (and should export symbols for example).
+-      m4_if([$1], [GCJ], [],
+-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+-      ;;
+-
+-    hpux9* | hpux10* | hpux11*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+-      # not for PA HP-UX.
+-      case $host_cpu in
+-      hppa*64*|ia64*)
+-	# +Z the default
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+-	;;
+-      esac
+-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+-      ;;
+-
+-    irix5* | irix6* | nonstopux*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      # PIC (with -KPIC) is the default.
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-      ;;
+-
+-    linux* | k*bsd*-gnu)
+-      case $cc_basename in
+-      # old Intel for x86_64 which still supported -KPIC.
+-      ecc*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-        ;;
+-      # icc used to be incompatible with GCC.
+-      # ICC 10 doesn't accept -KPIC any more.
+-      icc* | ifort*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-        ;;
+-      # Lahey Fortran 8.1.
+-      lf95*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+-	;;
+-      pgcc* | pgf77* | pgf90* | pgf95*)
+-        # Portland Group compilers (*not* the Pentium gcc compiler,
+-	# which looks to be a dead project)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-        ;;
+-      ccc*)
+-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-        # All Alpha code is PIC.
+-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-        ;;
+-      xl*)
+-	# IBM XL C 8.0/Fortran 10.1 on PPC
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+-	;;
+-      *)
+-	case `$CC -V 2>&1 | sed 5q` in
+-	*Sun\ C*)
+-	  # Sun C 5.9
+-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	  ;;
+-	*Sun\ F*)
+-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+-	  ;;
+-	esac
+-	;;
+-      esac
+-      ;;
+-
+-    newsos6)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    *nto* | *qnx*)
+-      # QNX uses GNU C++, but need to define -shared option too, otherwise
+-      # it will coredump.
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-      ;;
+-
+-    osf3* | osf4* | osf5*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      # All OSF/1 code is PIC.
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-      ;;
+-
+-    rdos*)
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-      ;;
+-
+-    solaris*)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      case $cc_basename in
+-      f77* | f90* | f95*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+-      esac
+-      ;;
+-
+-    sunos4*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    sysv4 | sysv4.2uw2* | sysv4.3*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    sysv4*MP*)
+-      if test -d /usr/nec ;then
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      fi
+-      ;;
+-
+-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    unicos*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-      ;;
+-
+-    uts4*)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    *)
+-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-      ;;
+-    esac
+-  fi
+-])
+-case $host_os in
+-  # For platforms which do not support PIC, -DPIC is meaningless:
+-  *djgpp*)
+-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-    ;;
+-  *)
+-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+-    ;;
+-esac
+-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+-	[How to pass a linker flag through the compiler])
+-
+-#
+-# Check to make sure the PIC flag actually works.
+-#
+-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+-     "" | " "*) ;;
+-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+-     esac],
+-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+-fi
+-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+-	[Additional compiler flags for building library objects])
+-
+-#
+-# Check to make sure the static flag actually works.
+-#
+-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+-  $lt_tmp_static_flag,
+-  [],
+-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+-	[Compiler flag to prevent dynamic linking])
+-])# _LT_COMPILER_PIC
+-
+-
+-# _LT_LINKER_SHLIBS([TAGNAME])
+-# ----------------------------
+-# See if the linker supports building shared libraries.
+-m4_defun([_LT_LINKER_SHLIBS],
+-[AC_REQUIRE([LT_PATH_LD])dnl
+-AC_REQUIRE([LT_PATH_NM])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+-m4_require([_LT_TAG_COMPILER])dnl
+-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+-m4_if([$1], [CXX], [
+-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  case $host_os in
+-  aix[[4-9]]*)
+-    # If we're using GNU nm, then we don't want the "-C" option.
+-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-    else
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-    fi
+-    ;;
+-  pw32*)
+-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+-  ;;
+-  cygwin* | mingw* | cegcc*)
+-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+-  ;;
+-  *)
+-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  ;;
+-  esac
+-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+-], [
+-  runpath_var=
+-  _LT_TAGVAR(allow_undefined_flag, $1)=
+-  _LT_TAGVAR(always_export_symbols, $1)=no
+-  _LT_TAGVAR(archive_cmds, $1)=
+-  _LT_TAGVAR(archive_expsym_cmds, $1)=
+-  _LT_TAGVAR(compiler_needs_object, $1)=no
+-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  _LT_TAGVAR(hardcode_automatic, $1)=no
+-  _LT_TAGVAR(hardcode_direct, $1)=no
+-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+-  _LT_TAGVAR(hardcode_minus_L, $1)=no
+-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-  _LT_TAGVAR(inherit_rpath, $1)=no
+-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+-  _LT_TAGVAR(module_cmds, $1)=
+-  _LT_TAGVAR(module_expsym_cmds, $1)=
+-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-  # include_expsyms should be a list of space-separated symbols to be *always*
+-  # included in the symbol list
+-  _LT_TAGVAR(include_expsyms, $1)=
+-  # exclude_expsyms can be an extended regexp of symbols to exclude
+-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+-  # as well as any symbol that contains `d'.
+-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+-  # platforms (ab)use it in PIC code, but their linkers get confused if
+-  # the symbol is explicitly referenced.  Since portable code cannot
+-  # rely on this symbol name, it's probably fine to never include it in
+-  # preloaded symbol tables.
+-  # Exclude shared library initialization/finalization symbols.
+-dnl Note also adjust exclude_expsyms for C++ above.
+-  extract_expsyms_cmds=
+-
+-  case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
+-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+-    # When not using gcc, we currently assume that we are using
+-    # Microsoft Visual C++.
+-    if test "$GCC" != yes; then
+-      with_gnu_ld=no
+-    fi
+-    ;;
+-  interix*)
+-    # we just hope/assume this is gcc and not c89 (= MSVC++)
+-    with_gnu_ld=yes
+-    ;;
+-  openbsd*)
+-    with_gnu_ld=no
+-    ;;
+-  esac
+-
+-  _LT_TAGVAR(ld_shlibs, $1)=yes
+-  if test "$with_gnu_ld" = yes; then
+-    # If archive_cmds runs LD, not CC, wlarc should be empty
+-    wlarc='${wl}'
+-
+-    # Set some defaults for GNU ld with shared library support. These
+-    # are reset later if shared libraries are not supported. Putting them
+-    # here allows them to be overridden if necessary.
+-    runpath_var=LD_RUN_PATH
+-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-    # ancient GNU ld didn't support --whole-archive et. al.
+-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+-    else
+-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-    fi
+-    supports_anon_versioning=no
+-    case `$LD -v 2>&1` in
+-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+-      *\ 2.11.*) ;; # other 2.11 versions
+-      *) supports_anon_versioning=yes ;;
+-    esac
+-
+-    # See if GNU ld supports shared libraries.
+-    case $host_os in
+-    aix[[3-9]]*)
+-      # On AIX/PPC, the GNU linker is very broken
+-      if test "$host_cpu" != ia64; then
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	cat <<_LT_EOF 1>&2
+-
+-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+-*** to be unable to reliably create shared libraries on AIX.
+-*** Therefore, libtool is disabling shared libraries support.  If you
+-*** really care for shared libraries, you may want to modify your PATH
+-*** so that a non-GNU linker is found, and then restart.
+-
+-_LT_EOF
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+-        ;;
+-      m68k)
+-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-        ;;
+-      esac
+-      ;;
+-
+-    beos*)
+-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+-	# support --undefined.  This deserves some investigation.  FIXME
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    cygwin* | mingw* | pw32* | cegcc*)
+-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+-      # as there is no search path for DLLs.
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(always_export_symbols, $1)=no
+-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+-
+-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-	# If the export-symbols file already is a .def file (1st line
+-	# is EXPORTS), use it as is; otherwise, prepend...
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+-	  cp $export_symbols $output_objdir/$soname.def;
+-	else
+-	  echo EXPORTS > $output_objdir/$soname.def;
+-	  cat $export_symbols >> $output_objdir/$soname.def;
+-	fi~
+-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    interix[[3-9]]*)
+-      _LT_TAGVAR(hardcode_direct, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+-      # Instead, shared libraries are loaded at an image base (0x10000000 by
+-      # default) and relocated if they conflict, which is a slow very memory
+-      # consuming and fragmenting process.  To avoid this, we pick a random,
+-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-      ;;
+-
+-    gnu* | linux* | tpf* | k*bsd*-gnu)
+-      tmp_diet=no
+-      if test "$host_os" = linux-dietlibc; then
+-	case $cc_basename in
+-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+-	esac
+-      fi
+-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+-	 && test "$tmp_diet" = no
+-      then
+-	tmp_addflag=
+-	tmp_sharedflag='-shared'
+-	case $cc_basename,$host_cpu in
+-        pgcc*)				# Portland Group C compiler
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	  tmp_addflag=' $pic_flag'
+-	  ;;
+-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	  tmp_addflag=' $pic_flag -Mnomain' ;;
+-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+-	  tmp_addflag=' -i_dynamic' ;;
+-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+-	ifc* | ifort*)			# Intel Fortran compiler
+-	  tmp_addflag=' -nofor_main' ;;
+-	lf95*)				# Lahey Fortran 8.1
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-	  tmp_sharedflag='--shared' ;;
+-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+-	  tmp_sharedflag='-qmkshrobj'
+-	  tmp_addflag= ;;
+-	esac
+-	case `$CC -V 2>&1 | sed 5q` in
+-	*Sun\ C*)			# Sun C 5.9
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+-	  tmp_sharedflag='-G' ;;
+-	*Sun\ F*)			# Sun Fortran 8.3
+-	  tmp_sharedflag='-G' ;;
+-	esac
+-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-
+-        if test "x$supports_anon_versioning" = xyes; then
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+-	    echo "local: *; };" >> $output_objdir/$libname.ver~
+-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+-        fi
+-
+-	case $cc_basename in
+-	xlf*)
+-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+-	  if test "x$supports_anon_versioning" = xyes; then
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+-	      echo "local: *; };" >> $output_objdir/$libname.ver~
+-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+-	  fi
+-	  ;;
+-	esac
+-      else
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    netbsd*)
+-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+-	wlarc=
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-      fi
+-      ;;
+-
+-    solaris*)
+-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	cat <<_LT_EOF 1>&2
+-
+-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+-*** create shared libraries on Solaris systems.  Therefore, libtool
+-*** is disabling shared libraries support.  We urge you to upgrade GNU
+-*** binutils to release 2.9.1 or newer.  Another option is to modify
+-*** your PATH or compiler configuration so that the native linker is
+-*** used, and then restart.
+-
+-_LT_EOF
+-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+-      case `$LD -v 2>&1` in
+-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	cat <<_LT_EOF 1>&2
+-
+-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+-*** reliably create shared libraries on SCO systems.  Therefore, libtool
+-*** is disabling shared libraries support.  We urge you to upgrade GNU
+-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+-*** your PATH or compiler configuration so that the native linker is
+-*** used, and then restart.
+-
+-_LT_EOF
+-	;;
+-	*)
+-	  # For security reasons, it is highly recommended that you always
+-	  # use absolute paths for naming shared libraries, and exclude the
+-	  # DT_RUNPATH tag from executables and libraries.  But doing so
+-	  # requires that you compile everything twice, which is a pain.
+-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-	  else
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	  fi
+-	;;
+-      esac
+-      ;;
+-
+-    sunos4*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+-      wlarc=
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    *)
+-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-    esac
+-
+-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+-      runpath_var=
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-    fi
+-  else
+-    # PORTME fill in a description of your system's linker (not GNU ld)
+-    case $host_os in
+-    aix3*)
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(always_export_symbols, $1)=yes
+-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+-      # Note: this linker hardcodes the directories in LIBPATH if there
+-      # are no directories specified by -L.
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+-	# Neither direct hardcoding nor static linking is supported with a
+-	# broken collect2.
+-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+-      fi
+-      ;;
+-
+-    aix[[4-9]]*)
+-      if test "$host_cpu" = ia64; then
+-	# On IA64, the linker does run time linking by default, so we don't
+-	# have to do anything special.
+-	aix_use_runtimelinking=no
+-	exp_sym_flag='-Bexport'
+-	no_entry_flag=""
+-      else
+-	# If we're using GNU nm, then we don't want the "-C" option.
+-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-	else
+-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-	fi
+-	aix_use_runtimelinking=no
+-
+-	# Test if we are trying to use run time linking or normal
+-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+-	# need to do runtime linking.
+-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+-	  for ld_flag in $LDFLAGS; do
+-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+-	    aix_use_runtimelinking=yes
+-	    break
+-	  fi
+-	  done
+-	  ;;
+-	esac
+-
+-	exp_sym_flag='-bexport'
+-	no_entry_flag='-bnoentry'
+-      fi
+-
+-      # When large executables or shared objects are built, AIX ld can
+-      # have problems creating the table of contents.  If linking a library
+-      # or program results in "error TOC overflow" add -mminimal-toc to
+-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+-
+-      _LT_TAGVAR(archive_cmds, $1)=''
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+-
+-      if test "$GCC" = yes; then
+-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+-	# We only want to do this on AIX 4.2 and lower, the check
+-	# below for broken collect2 doesn't work under 4.3+
+-	  collect2name=`${CC} -print-prog-name=collect2`
+-	  if test -f "$collect2name" &&
+-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+-	  then
+-	  # We have reworked collect2
+-	  :
+-	  else
+-	  # We have old collect2
+-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+-	  # It fails to find uninstalled libraries when the uninstalled
+-	  # path is not listed in the libpath.  Setting hardcode_minus_L
+-	  # to unsupported forces relinking
+-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+-	  fi
+-	  ;;
+-	esac
+-	shared_flag='-shared'
+-	if test "$aix_use_runtimelinking" = yes; then
+-	  shared_flag="$shared_flag "'${wl}-G'
+-	fi
+-      else
+-	# not using gcc
+-	if test "$host_cpu" = ia64; then
+-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+-	# chokes on -Wl,-G. The following line is correct:
+-	  shared_flag='-G'
+-	else
+-	  if test "$aix_use_runtimelinking" = yes; then
+-	    shared_flag='${wl}-G'
+-	  else
+-	    shared_flag='${wl}-bM:SRE'
+-	  fi
+-	fi
+-      fi
+-
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+-      # It seems that -bexpall does not export symbols beginning with
+-      # underscore (_), so it is better to generate a list of symbols to export.
+-      _LT_TAGVAR(always_export_symbols, $1)=yes
+-      if test "$aix_use_runtimelinking" = yes; then
+-	# Warning - without using the other runtime loading flags (-brtl),
+-	# -berok will link without error, but may produce a broken library.
+-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+-        # Determine the default libpath from the value encoded in an
+-        # empty executable.
+-        _LT_SYS_MODULE_PATH_AIX
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+-      else
+-	if test "$host_cpu" = ia64; then
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+-	else
+-	 # Determine the default libpath from the value encoded in an
+-	 # empty executable.
+-	 _LT_SYS_MODULE_PATH_AIX
+-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-	  # Warning - without using the other run time loading flags,
+-	  # -berok will link without error, but may produce a broken library.
+-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+-	  # Exported symbols can be pulled into shared objects from archives
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-	  # This is similar to how AIX traditionally builds its shared libraries.
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+-	fi
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+-        ;;
+-      m68k)
+-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-        ;;
+-      esac
+-      ;;
+-
+-    bsdi[[45]]*)
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+-      ;;
+-
+-    cygwin* | mingw* | pw32* | cegcc*)
+-      # When not using gcc, we currently assume that we are using
+-      # Microsoft Visual C++.
+-      # hardcode_libdir_flag_spec is actually meaningless, as there is
+-      # no search path for DLLs.
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      # Tell ltmain to make .lib files, not .a files.
+-      libext=lib
+-      # Tell ltmain to make .dll files, not .so files.
+-      shrext_cmds=".dll"
+-      # FIXME: Setting linknames here is a bad hack.
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+-      # The linker will automatically build a .lib file if we build a DLL.
+-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+-      # FIXME: Should let the user specify the lib program.
+-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+-      _LT_TAGVAR(fix_srcfile_path, $1)=''
+-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-      ;;
+-
+-    darwin* | rhapsody*)
+-      _LT_DARWIN_LINKER_FEATURES($1)
+-      ;;
+-
+-    dgux*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    freebsd1*)
+-      _LT_TAGVAR(ld_shlibs, $1)=no
+-      ;;
+-
+-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+-    # support.  Future versions do this automatically, but an explicit c++rt0.o
+-    # does not break anything, and helps significantly (at the cost of a little
+-    # extra space).
+-    freebsd2.2*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+-    freebsd2*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+-    freebsd* | dragonfly*)
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    hpux9*)
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-
+-      # hardcode_minus_L: Not really in the search PATH,
+-      # but as the default location of the library.
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-      ;;
+-
+-    hpux10*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+-      fi
+-      if test "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-	_LT_TAGVAR(hardcode_direct, $1)=yes
+-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	# hardcode_minus_L: Not really in the search PATH,
+-	# but as the default location of the library.
+-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      fi
+-      ;;
+-
+-    hpux11*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+-	case $host_cpu in
+-	hppa*64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	ia64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	esac
+-      else
+-	case $host_cpu in
+-	hppa*64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	ia64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	esac
+-      fi
+-      if test "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	case $host_cpu in
+-	hppa*64*|ia64*)
+-	  _LT_TAGVAR(hardcode_direct, $1)=no
+-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes
+-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-
+-	  # hardcode_minus_L: Not really in the search PATH,
+-	  # but as the default location of the library.
+-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-	  ;;
+-	esac
+-      fi
+-      ;;
+-
+-    irix5* | irix6* | nonstopux*)
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-	# Try to use the -exported_symbol ld option, if it does not
+-	# work, assume that -exports_file does not work either and
+-	# implicitly export all symbols.
+-        save_LDFLAGS="$LDFLAGS"
+-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+-        AC_LINK_IFELSE(int foo(void) {},
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-        )
+-        LDFLAGS="$save_LDFLAGS"
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+-      fi
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      _LT_TAGVAR(inherit_rpath, $1)=yes
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      ;;
+-
+-    netbsd*)
+-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    newsos6)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    *nto* | *qnx*)
+-      ;;
+-
+-    openbsd*)
+-      if test -f /usr/libexec/ld.so; then
+-	_LT_TAGVAR(hardcode_direct, $1)=yes
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	else
+-	  case $host_os in
+-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	     ;;
+-	   *)
+-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	     ;;
+-	  esac
+-	fi
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    os2*)
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+-      ;;
+-
+-    osf3*)
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-      else
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-      fi
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      ;;
+-
+-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      else
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+-
+-	# Both c and cxx compiler support -rpath directly
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+-      fi
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      ;;
+-
+-    solaris*)
+-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+-      if test "$GCC" = yes; then
+-	wlarc='${wl}'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+-      else
+-	case `$CC -V 2>&1` in
+-	*"Compilers 5.0"*)
+-	  wlarc=''
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+-	  ;;
+-	*)
+-	  wlarc='${wl}'
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+-	  ;;
+-	esac
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      case $host_os in
+-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+-      *)
+-	# The compiler driver will combine and reorder linker options,
+-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+-	# but is careful enough not to reorder.
+-	# Supported since Solaris 2.6 (maybe 2.5.1?)
+-	if test "$GCC" = yes; then
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+-	else
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+-	fi
+-	;;
+-      esac
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      ;;
+-
+-    sunos4*)
+-      if test "x$host_vendor" = xsequent; then
+-	# Use $CC to link under sequent, because it throws in some extra .o
+-	# files that make .init and .fini sections work.
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    sysv4)
+-      case $host_vendor in
+-	sni)
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+-	;;
+-	siemens)
+-	  ## LD is ld it makes a PLAMLIB
+-	  ## CC just makes a GrossModule.
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+-	  _LT_TAGVAR(hardcode_direct, $1)=no
+-        ;;
+-	motorola)
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+-	;;
+-      esac
+-      runpath_var='LD_RUN_PATH'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    sysv4.3*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+-      ;;
+-
+-    sysv4*MP*)
+-      if test -d /usr/nec; then
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	runpath_var=LD_RUN_PATH
+-	hardcode_runpath_var=yes
+-	_LT_TAGVAR(ld_shlibs, $1)=yes
+-      fi
+-      ;;
+-
+-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      runpath_var='LD_RUN_PATH'
+-
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      fi
+-      ;;
+-
+-    sysv5* | sco3.2v5* | sco5v6*)
+-      # Note: We can NOT use -z defs as we might desire, because we do not
+-      # link with -lc, and that would cause any symbols used from libc to
+-      # always be unresolved, which means just about no library would
+-      # ever link correctly.  If we're not using GNU ld we use -z text
+-      # though, which does catch some bad symbols but isn't as heavy-handed
+-      # as -z defs.
+-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+-      runpath_var='LD_RUN_PATH'
+-
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      fi
+-      ;;
+-
+-    uts4*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    *)
+-      _LT_TAGVAR(ld_shlibs, $1)=no
+-      ;;
+-    esac
+-
+-    if test x$host_vendor = xsni; then
+-      case $host in
+-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+-	;;
+-      esac
+-    fi
+-  fi
+-])
+-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+-
+-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+-_LT_DECL([], [extract_expsyms_cmds], [2],
+-    [The commands to extract the exported symbol list from a shared archive])
+-
+-#
+-# Do we need to explicitly link libc?
+-#
+-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+-x|xyes)
+-  # Assume -lc should be added
+-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-
+-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+-    case $_LT_TAGVAR(archive_cmds, $1) in
+-    *'~'*)
+-      # FIXME: we may have to deal with multi-command sequences.
+-      ;;
+-    '$CC '*)
+-      # Test whether the compiler implicitly links with -lc since on some
+-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+-      # to ld, don't add -lc before -lgcc.
+-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+-      $RM conftest*
+-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+-        soname=conftest
+-        lib=conftest
+-        libobjs=conftest.$ac_objext
+-        deplibs=
+-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+-        compiler_flags=-v
+-        linker_flags=-v
+-        verstring=
+-        output_objdir=.
+-        libname=conftest
+-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+-        _LT_TAGVAR(allow_undefined_flag, $1)=
+-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+-        then
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-        else
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-        fi
+-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+-      else
+-        cat conftest.err 1>&5
+-      fi
+-      $RM conftest*
+-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+-      ;;
+-    esac
+-  fi
+-  ;;
+-esac
+-
+-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+-    [Whether or not to add -lc for building shared libraries])
+-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+-    [enable_shared_with_static_runtimes], [0],
+-    [Whether or not to disallow shared libs when runtime libs are static])
+-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+-    [Compiler flag to allow reflexive dlopens])
+-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+-    [Compiler flag to generate shared objects directly from archives])
+-_LT_TAGDECL([], [compiler_needs_object], [1],
+-    [Whether the compiler copes with passing no objects directly])
+-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+-    [Create an old-style archive from a shared archive])
+-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+-    [Create a temporary old-style archive to link instead of a shared archive])
+-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+-_LT_TAGDECL([], [archive_expsym_cmds], [2])
+-_LT_TAGDECL([], [module_cmds], [2],
+-    [Commands used to build a loadable module if different from building
+-    a shared archive.])
+-_LT_TAGDECL([], [module_expsym_cmds], [2])
+-_LT_TAGDECL([], [with_gnu_ld], [1],
+-    [Whether we are building with GNU ld or not])
+-_LT_TAGDECL([], [allow_undefined_flag], [1],
+-    [Flag that allows shared libraries with undefined symbols to be built])
+-_LT_TAGDECL([], [no_undefined_flag], [1],
+-    [Flag that enforces no undefined symbols])
+-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+-    [Flag to hardcode $libdir into a binary during linking.
+-    This must work even if $libdir does not exist])
+-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+-    [[If ld is used when linking, flag to hardcode $libdir into a binary
+-    during linking.  This must work even if $libdir does not exist]])
+-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+-    [Whether we need a single "-rpath" flag with a separated argument])
+-_LT_TAGDECL([], [hardcode_direct], [0],
+-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+-    DIR into the resulting binary])
+-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+-    DIR into the resulting binary and the resulting library dependency is
+-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+-    library is relocated])
+-_LT_TAGDECL([], [hardcode_minus_L], [0],
+-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+-    into the resulting binary])
+-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+-    into the resulting binary])
+-_LT_TAGDECL([], [hardcode_automatic], [0],
+-    [Set to "yes" if building a shared library automatically hardcodes DIR
+-    into the library and all subsequent libraries and executables linked
+-    against it])
+-_LT_TAGDECL([], [inherit_rpath], [0],
+-    [Set to yes if linker adds runtime paths of dependent libraries
+-    to runtime path list])
+-_LT_TAGDECL([], [link_all_deplibs], [0],
+-    [Whether libtool must link a program against all its dependency libraries])
+-_LT_TAGDECL([], [fix_srcfile_path], [1],
+-    [Fix the shell variable $srcfile for the compiler])
+-_LT_TAGDECL([], [always_export_symbols], [0],
+-    [Set to "yes" if exported symbols are required])
+-_LT_TAGDECL([], [export_symbols_cmds], [2],
+-    [The commands to list exported symbols])
+-_LT_TAGDECL([], [exclude_expsyms], [1],
+-    [Symbols that should not be listed in the preloaded symbols])
+-_LT_TAGDECL([], [include_expsyms], [1],
+-    [Symbols that must always be exported])
+-_LT_TAGDECL([], [prelink_cmds], [2],
+-    [Commands necessary for linking programs (against libraries) with templates])
+-_LT_TAGDECL([], [file_list_spec], [1],
+-    [Specify filename containing input files])
+-dnl FIXME: Not yet implemented
+-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+-dnl    [Compiler flag to generate thread safe objects])
+-])# _LT_LINKER_SHLIBS
+-
+-
+-# _LT_LANG_C_CONFIG([TAG])
+-# ------------------------
+-# Ensure that the configuration variables for a C compiler are suitably
+-# defined.  These variables are subsequently used by _LT_CONFIG to write
+-# the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_C_CONFIG],
+-[m4_require([_LT_DECL_EGREP])dnl
+-lt_save_CC="$CC"
+-AC_LANG_PUSH(C)
+-
+-# Source file extension for C test sources.
+-ac_ext=c
+-
+-# Object file extension for compiled C test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="int some_variable = 0;"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='int main(){return(0);}'
+-
+-_LT_TAG_COMPILER
+-# Save the default compiler, since it gets overwritten when the other
+-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+-compiler_DEFAULT=$CC
+-
+-# save warnings/boilerplate of simple test code
+-_LT_COMPILER_BOILERPLATE
+-_LT_LINKER_BOILERPLATE
+-
+-if test -n "$compiler"; then
+-  _LT_COMPILER_NO_RTTI($1)
+-  _LT_COMPILER_PIC($1)
+-  _LT_COMPILER_C_O($1)
+-  _LT_COMPILER_FILE_LOCKS($1)
+-  _LT_LINKER_SHLIBS($1)
+-  _LT_SYS_DYNAMIC_LINKER($1)
+-  _LT_LINKER_HARDCODE_LIBPATH($1)
+-  LT_SYS_DLOPEN_SELF
+-  _LT_CMD_STRIPLIB
+-
+-  # Report which library types will actually be built
+-  AC_MSG_CHECKING([if libtool supports shared libraries])
+-  AC_MSG_RESULT([$can_build_shared])
+-
+-  AC_MSG_CHECKING([whether to build shared libraries])
+-  test "$can_build_shared" = "no" && enable_shared=no
+-
+-  # On AIX, shared libraries and static libraries use the same namespace, and
+-  # are all built from PIC.
+-  case $host_os in
+-  aix3*)
+-    test "$enable_shared" = yes && enable_static=no
+-    if test -n "$RANLIB"; then
+-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+-      postinstall_cmds='$RANLIB $lib'
+-    fi
+-    ;;
+-
+-  aix[[4-9]]*)
+-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+-      test "$enable_shared" = yes && enable_static=no
+-    fi
+-    ;;
+-  esac
+-  AC_MSG_RESULT([$enable_shared])
+-
+-  AC_MSG_CHECKING([whether to build static libraries])
+-  # Make sure either enable_shared or enable_static is yes.
+-  test "$enable_shared" = yes || enable_static=yes
+-  AC_MSG_RESULT([$enable_static])
+-
+-  _LT_CONFIG($1)
+-fi
+-AC_LANG_POP
+-CC="$lt_save_CC"
+-])# _LT_LANG_C_CONFIG
+-
+-
+-# _LT_PROG_CXX
+-# ------------
+-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+-# compiler, we have our own version here.
+-m4_defun([_LT_PROG_CXX],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+-AC_PROG_CXX
+-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+-    (test "X$CXX" != "Xg++"))) ; then
+-  AC_PROG_CXXCPP
+-else
+-  _lt_caught_CXX_error=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_CXX
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_CXX], [])
+-
+-
+-# _LT_LANG_CXX_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for a C++ compiler are suitably
+-# defined.  These variables are subsequently used by _LT_CONFIG to write
+-# the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_CXX_CONFIG],
+-[AC_REQUIRE([_LT_PROG_CXX])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-
+-AC_LANG_PUSH(C++)
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_TAGVAR(allow_undefined_flag, $1)=
+-_LT_TAGVAR(always_export_symbols, $1)=no
+-_LT_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_TAGVAR(compiler_needs_object, $1)=no
+-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_direct, $1)=no
+-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-_LT_TAGVAR(hardcode_automatic, $1)=no
+-_LT_TAGVAR(inherit_rpath, $1)=no
+-_LT_TAGVAR(module_cmds, $1)=
+-_LT_TAGVAR(module_expsym_cmds, $1)=
+-_LT_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_TAGVAR(no_undefined_flag, $1)=
+-_LT_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for C++ test sources.
+-ac_ext=cpp
+-
+-# Object file extension for compiled C++ test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# No sense in running all these tests if we already determined that
+-# the CXX compiler isn't working.  Some variables (like enable_shared)
+-# are currently assumed to apply to all compilers on this platform,
+-# and will be corrupted by setting them based on a non-working compiler.
+-if test "$_lt_caught_CXX_error" != yes; then
+-  # Code to be used in simple compile tests
+-  lt_simple_compile_test_code="int some_variable = 0;"
+-
+-  # Code to be used in simple link tests
+-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+-
+-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-  _LT_TAG_COMPILER
+-
+-  # save warnings/boilerplate of simple test code
+-  _LT_COMPILER_BOILERPLATE
+-  _LT_LINKER_BOILERPLATE
+-
+-  # Allow CC to be a program name with arguments.
+-  lt_save_CC=$CC
+-  lt_save_LD=$LD
+-  lt_save_GCC=$GCC
+-  GCC=$GXX
+-  lt_save_with_gnu_ld=$with_gnu_ld
+-  lt_save_path_LD=$lt_cv_path_LD
+-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+-  else
+-    $as_unset lt_cv_prog_gnu_ld
+-  fi
+-  if test -n "${lt_cv_path_LDCXX+set}"; then
+-    lt_cv_path_LD=$lt_cv_path_LDCXX
+-  else
+-    $as_unset lt_cv_path_LD
+-  fi
+-  test -z "${LDCXX+set}" || LD=$LDCXX
+-  CC=${CXX-"c++"}
+-  compiler=$CC
+-  _LT_TAGVAR(compiler, $1)=$CC
+-  _LT_CC_BASENAME([$compiler])
+-
+-  if test -n "$compiler"; then
+-    # We don't want -fno-exception when compiling C++ code, so set the
+-    # no_builtin_flag separately
+-    if test "$GXX" = yes; then
+-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+-    else
+-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+-    fi
+-
+-    if test "$GXX" = yes; then
+-      # Set up default GNU C++ configuration
+-
+-      LT_PATH_LD
+-
+-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+-      # archiving commands below assume that GNU ld is being used.
+-      if test "$with_gnu_ld" = yes; then
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-
+-        # If archive_cmds runs LD, not CC, wlarc should be empty
+-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+-        #     investigate it a little bit more. (MM)
+-        wlarc='${wl}'
+-
+-        # ancient GNU ld didn't support --whole-archive et. al.
+-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+-	  $GREP 'no-whole-archive' > /dev/null; then
+-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+-        else
+-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-        fi
+-      else
+-        with_gnu_ld=no
+-        wlarc=
+-
+-        # A generic and very simple default shared library creation
+-        # command for GNU C++ for the case where it uses the native
+-        # linker, instead of GNU ld.  If possible, this setting should
+-        # overridden to take advantage of the native linker features on
+-        # the platform it is being used on.
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+-      fi
+-
+-      # Commands to make compiler produce verbose output that lists
+-      # what "hidden" libraries, object files and flags are used when
+-      # linking a shared library.
+-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-
+-    else
+-      GXX=no
+-      with_gnu_ld=no
+-      wlarc=
+-    fi
+-
+-    # PORTME: fill in a description of your system's C++ link characteristics
+-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+-    _LT_TAGVAR(ld_shlibs, $1)=yes
+-    case $host_os in
+-      aix3*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-      aix[[4-9]]*)
+-        if test "$host_cpu" = ia64; then
+-          # On IA64, the linker does run time linking by default, so we don't
+-          # have to do anything special.
+-          aix_use_runtimelinking=no
+-          exp_sym_flag='-Bexport'
+-          no_entry_flag=""
+-        else
+-          aix_use_runtimelinking=no
+-
+-          # Test if we are trying to use run time linking or normal
+-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+-          # need to do runtime linking.
+-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+-	    for ld_flag in $LDFLAGS; do
+-	      case $ld_flag in
+-	      *-brtl*)
+-	        aix_use_runtimelinking=yes
+-	        break
+-	        ;;
+-	      esac
+-	    done
+-	    ;;
+-          esac
+-
+-          exp_sym_flag='-bexport'
+-          no_entry_flag='-bnoentry'
+-        fi
+-
+-        # When large executables or shared objects are built, AIX ld can
+-        # have problems creating the table of contents.  If linking a library
+-        # or program results in "error TOC overflow" add -mminimal-toc to
+-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+-
+-        _LT_TAGVAR(archive_cmds, $1)=''
+-        _LT_TAGVAR(hardcode_direct, $1)=yes
+-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-        _LT_TAGVAR(link_all_deplibs, $1)=yes
+-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+-
+-        if test "$GXX" = yes; then
+-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+-          # We only want to do this on AIX 4.2 and lower, the check
+-          # below for broken collect2 doesn't work under 4.3+
+-	  collect2name=`${CC} -print-prog-name=collect2`
+-	  if test -f "$collect2name" &&
+-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+-	  then
+-	    # We have reworked collect2
+-	    :
+-	  else
+-	    # We have old collect2
+-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+-	    # It fails to find uninstalled libraries when the uninstalled
+-	    # path is not listed in the libpath.  Setting hardcode_minus_L
+-	    # to unsupported forces relinking
+-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+-	  fi
+-          esac
+-          shared_flag='-shared'
+-	  if test "$aix_use_runtimelinking" = yes; then
+-	    shared_flag="$shared_flag "'${wl}-G'
+-	  fi
+-        else
+-          # not using gcc
+-          if test "$host_cpu" = ia64; then
+-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+-	  # chokes on -Wl,-G. The following line is correct:
+-	  shared_flag='-G'
+-          else
+-	    if test "$aix_use_runtimelinking" = yes; then
+-	      shared_flag='${wl}-G'
+-	    else
+-	      shared_flag='${wl}-bM:SRE'
+-	    fi
+-          fi
+-        fi
+-
+-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+-        # It seems that -bexpall does not export symbols beginning with
+-        # underscore (_), so it is better to generate a list of symbols to
+-	# export.
+-        _LT_TAGVAR(always_export_symbols, $1)=yes
+-        if test "$aix_use_runtimelinking" = yes; then
+-          # Warning - without using the other runtime loading flags (-brtl),
+-          # -berok will link without error, but may produce a broken library.
+-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+-          # Determine the default libpath from the value encoded in an empty
+-          # executable.
+-          _LT_SYS_MODULE_PATH_AIX
+-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+-        else
+-          if test "$host_cpu" = ia64; then
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+-          else
+-	    # Determine the default libpath from the value encoded in an
+-	    # empty executable.
+-	    _LT_SYS_MODULE_PATH_AIX
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-	    # Warning - without using the other run time loading flags,
+-	    # -berok will link without error, but may produce a broken library.
+-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+-	    # Exported symbols can be pulled into shared objects from archives
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-	    # This is similar to how AIX traditionally builds its shared
+-	    # libraries.
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+-          fi
+-        fi
+-        ;;
+-
+-      beos*)
+-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+-	  # support --undefined.  This deserves some investigation.  FIXME
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	else
+-	  _LT_TAGVAR(ld_shlibs, $1)=no
+-	fi
+-	;;
+-
+-      chorus*)
+-        case $cc_basename in
+-          *)
+-	  # FIXME: insert proper C++ library support
+-	  _LT_TAGVAR(ld_shlibs, $1)=no
+-	  ;;
+-        esac
+-        ;;
+-
+-      cygwin* | mingw* | pw32* | cegcc*)
+-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+-        # as there is no search path for DLLs.
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-        _LT_TAGVAR(always_export_symbols, $1)=no
+-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-
+-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-          # If the export-symbols file already is a .def file (1st line
+-          # is EXPORTS), use it as is; otherwise, prepend...
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+-	    cp $export_symbols $output_objdir/$soname.def;
+-          else
+-	    echo EXPORTS > $output_objdir/$soname.def;
+-	    cat $export_symbols >> $output_objdir/$soname.def;
+-          fi~
+-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-        else
+-          _LT_TAGVAR(ld_shlibs, $1)=no
+-        fi
+-        ;;
+-      darwin* | rhapsody*)
+-        _LT_DARWIN_LINKER_FEATURES($1)
+-	;;
+-
+-      dgux*)
+-        case $cc_basename in
+-          ec++*)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          ghcx*)
+-	    # Green Hills C++ Compiler
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-        esac
+-        ;;
+-
+-      freebsd[[12]]*)
+-        # C++ shared libraries reported to be fairly broken before
+-	# switch to ELF
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-
+-      freebsd-elf*)
+-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-        ;;
+-
+-      freebsd* | dragonfly*)
+-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+-        # conventions
+-        _LT_TAGVAR(ld_shlibs, $1)=yes
+-        ;;
+-
+-      gnu*)
+-        ;;
+-
+-      hpux9*)
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-        _LT_TAGVAR(hardcode_direct, $1)=yes
+-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+-				             # but as the default
+-				             # location of the library.
+-
+-        case $cc_basename in
+-          CC*)
+-            # FIXME: insert proper C++ library support
+-            _LT_TAGVAR(ld_shlibs, $1)=no
+-            ;;
+-          aCC*)
+-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-            # Commands to make compiler produce verbose output that lists
+-            # what "hidden" libraries, object files and flags are used when
+-            # linking a shared library.
+-            #
+-            # There doesn't appear to be a way to prevent this compiler from
+-            # explicitly linking system object files so we need to strip them
+-            # from the output so that they don't get included in the library
+-            # dependencies.
+-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-            ;;
+-          *)
+-            if test "$GXX" = yes; then
+-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-            else
+-              # FIXME: insert proper C++ library support
+-              _LT_TAGVAR(ld_shlibs, $1)=no
+-            fi
+-            ;;
+-        esac
+-        ;;
+-
+-      hpux10*|hpux11*)
+-        if test $with_gnu_ld = no; then
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-          case $host_cpu in
+-            hppa*64*|ia64*)
+-              ;;
+-            *)
+-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-              ;;
+-          esac
+-        fi
+-        case $host_cpu in
+-          hppa*64*|ia64*)
+-            _LT_TAGVAR(hardcode_direct, $1)=no
+-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-            ;;
+-          *)
+-            _LT_TAGVAR(hardcode_direct, $1)=yes
+-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+-					         # but as the default
+-					         # location of the library.
+-            ;;
+-        esac
+-
+-        case $cc_basename in
+-          CC*)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          aCC*)
+-	    case $host_cpu in
+-	      hppa*64*)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	        ;;
+-	      ia64*)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	        ;;
+-	      *)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	        ;;
+-	    esac
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-	    ;;
+-          *)
+-	    if test "$GXX" = yes; then
+-	      if test $with_gnu_ld = no; then
+-	        case $host_cpu in
+-	          hppa*64*)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	            ;;
+-	          ia64*)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	            ;;
+-	          *)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	            ;;
+-	        esac
+-	      fi
+-	    else
+-	      # FIXME: insert proper C++ library support
+-	      _LT_TAGVAR(ld_shlibs, $1)=no
+-	    fi
+-	    ;;
+-        esac
+-        ;;
+-
+-      interix[[3-9]]*)
+-	_LT_TAGVAR(hardcode_direct, $1)=no
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+-	# Instead, shared libraries are loaded at an image base (0x10000000 by
+-	# default) and relocated if they conflict, which is a slow very memory
+-	# consuming and fragmenting process.  To avoid this, we pick a random,
+-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-	;;
+-      irix5* | irix6*)
+-        case $cc_basename in
+-          CC*)
+-	    # SGI C++
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-
+-	    # Archives containing C++ object files must be created using
+-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+-	    # necessary to make sure instantiated templates are included
+-	    # in the archive.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+-	    ;;
+-          *)
+-	    if test "$GXX" = yes; then
+-	      if test "$with_gnu_ld" = no; then
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-	      else
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+-	      fi
+-	    fi
+-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+-	    ;;
+-        esac
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-        _LT_TAGVAR(inherit_rpath, $1)=yes
+-        ;;
+-
+-      linux* | k*bsd*-gnu)
+-        case $cc_basename in
+-          KCC*)
+-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+-	    # KCC will only create a shared library if the output file
+-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+-	    # to its proper name (with version) after linking.
+-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-
+-	    # Archives containing C++ object files must be created using
+-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+-	    ;;
+-	  icpc* | ecpc* )
+-	    # Intel C++
+-	    with_gnu_ld=yes
+-	    # version 8.0 and above of icpc choke on multiply defined symbols
+-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+-	    # earlier do not add the objects themselves.
+-	    case `$CC -V 2>&1` in
+-	      *"Version 7."*)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-		;;
+-	      *)  # Version 8.0 or newer
+-	        tmp_idyn=
+-	        case $host_cpu in
+-		  ia64*) tmp_idyn=' -i_dynamic';;
+-		esac
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-		;;
+-	    esac
+-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+-	    ;;
+-          pgCC* | pgcpp*)
+-            # Portland Group C++ compiler
+-	    case `$CC -V` in
+-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+-		$RANLIB $oldlib'
+-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+-	      ;;
+-	    *) # Version 6 will use weak symbols
+-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+-	      ;;
+-	    esac
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-            ;;
+-	  cxx*)
+-	    # Compaq C++
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+-
+-	    runpath_var=LD_RUN_PATH
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-	    ;;
+-	  xl*)
+-	    # IBM XL 8.0 on PPC, with GNU ld
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	    if test "x$supports_anon_versioning" = xyes; then
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+-		echo "local: *; };" >> $output_objdir/$libname.ver~
+-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+-	    fi
+-	    ;;
+-	  *)
+-	    case `$CC -V 2>&1 | sed 5q` in
+-	    *Sun\ C*)
+-	      # Sun C++ 5.9
+-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+-
+-	      # Not sure whether something based on
+-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+-	      # would be better.
+-	      output_verbose_link_cmd='echo'
+-
+-	      # Archives containing C++ object files must be created using
+-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+-	      # necessary to make sure instantiated templates are included
+-	      # in the archive.
+-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+-	      ;;
+-	    esac
+-	    ;;
+-	esac
+-	;;
+-
+-      lynxos*)
+-        # FIXME: insert proper C++ library support
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	;;
+-
+-      m88k*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-	;;
+-
+-      mvs*)
+-        case $cc_basename in
+-          cxx*)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-	  *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-	esac
+-	;;
+-
+-      netbsd*)
+-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+-	  wlarc=
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes
+-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	fi
+-	# Workaround some broken pre-1.5 toolchains
+-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+-	;;
+-
+-      *nto* | *qnx*)
+-        _LT_TAGVAR(ld_shlibs, $1)=yes
+-	;;
+-
+-      openbsd2*)
+-        # C++ shared libraries are fairly broken
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	;;
+-
+-      openbsd*)
+-	if test -f /usr/libexec/ld.so; then
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes
+-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+-	  fi
+-	  output_verbose_link_cmd=echo
+-	else
+-	  _LT_TAGVAR(ld_shlibs, $1)=no
+-	fi
+-	;;
+-
+-      osf3* | osf4* | osf5*)
+-        case $cc_basename in
+-          KCC*)
+-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+-	    # KCC will only create a shared library if the output file
+-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+-	    # to its proper name (with version) after linking.
+-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	    # Archives containing C++ object files must be created using
+-	    # the KAI C++ compiler.
+-	    case $host in
+-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+-	    esac
+-	    ;;
+-          RCC*)
+-	    # Rational C++ 2.4.1
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          cxx*)
+-	    case $host in
+-	      osf3*)
+-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-		;;
+-	      *)
+-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+-	          echo "-hidden">> $lib.exp~
+-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+-	          $RM $lib.exp'
+-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+-		;;
+-	    esac
+-
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-	    ;;
+-	  *)
+-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	      case $host in
+-	        osf3*)
+-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-		  ;;
+-	        *)
+-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-		  ;;
+-	      esac
+-
+-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	      # Commands to make compiler produce verbose output that lists
+-	      # what "hidden" libraries, object files and flags are used when
+-	      # linking a shared library.
+-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-
+-	    else
+-	      # FIXME: insert proper C++ library support
+-	      _LT_TAGVAR(ld_shlibs, $1)=no
+-	    fi
+-	    ;;
+-        esac
+-        ;;
+-
+-      psos*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-
+-      sunos4*)
+-        case $cc_basename in
+-          CC*)
+-	    # Sun C++ 4.x
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          lcc*)
+-	    # Lucid
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-        esac
+-        ;;
+-
+-      solaris*)
+-        case $cc_basename in
+-          CC*)
+-	    # Sun C++ 4.2, 5.x and Centerline C++
+-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	    case $host_os in
+-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+-	      *)
+-		# The compiler driver will combine and reorder linker options,
+-		# but understands `-z linker_flag'.
+-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+-	        ;;
+-	    esac
+-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+-
+-	    output_verbose_link_cmd='echo'
+-
+-	    # Archives containing C++ object files must be created using
+-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+-	    # necessary to make sure instantiated templates are included
+-	    # in the archive.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+-	    ;;
+-          gcx*)
+-	    # Green Hills C++ Compiler
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+-
+-	    # The C++ compiler must be used to create the archive.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+-	    ;;
+-          *)
+-	    # GNU C++ compiler with Solaris linker
+-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+-
+-	        # Commands to make compiler produce verbose output that lists
+-	        # what "hidden" libraries, object files and flags are used when
+-	        # linking a shared library.
+-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-	      else
+-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+-	        # platform.
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+-
+-	        # Commands to make compiler produce verbose output that lists
+-	        # what "hidden" libraries, object files and flags are used when
+-	        # linking a shared library.
+-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-	      fi
+-
+-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+-	      case $host_os in
+-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+-		*)
+-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+-		  ;;
+-	      esac
+-	    fi
+-	    ;;
+-        esac
+-        ;;
+-
+-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      runpath_var='LD_RUN_PATH'
+-
+-      case $cc_basename in
+-        CC*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-      esac
+-      ;;
+-
+-      sysv5* | sco3.2v5* | sco5v6*)
+-	# Note: We can NOT use -z defs as we might desire, because we do not
+-	# link with -lc, and that would cause any symbols used from libc to
+-	# always be unresolved, which means just about no library would
+-	# ever link correctly.  If we're not using GNU ld we use -z text
+-	# though, which does catch some bad symbols but isn't as heavy-handed
+-	# as -z defs.
+-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-	_LT_TAGVAR(link_all_deplibs, $1)=yes
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+-	runpath_var='LD_RUN_PATH'
+-
+-	case $cc_basename in
+-          CC*)
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    ;;
+-	  *)
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    ;;
+-	esac
+-      ;;
+-
+-      tandem*)
+-        case $cc_basename in
+-          NCC*)
+-	    # NonStop-UX NCC 3.20
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-        esac
+-        ;;
+-
+-      vxworks*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-
+-      *)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-    esac
+-
+-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-    _LT_TAGVAR(GCC, $1)="$GXX"
+-    _LT_TAGVAR(LD, $1)="$LD"
+-
+-    ## CAVEAT EMPTOR:
+-    ## There is no encapsulation within the following macros, do not change
+-    ## the running order or otherwise move them around unless you know exactly
+-    ## what you are doing...
+-    _LT_SYS_HIDDEN_LIBDEPS($1)
+-    _LT_COMPILER_PIC($1)
+-    _LT_COMPILER_C_O($1)
+-    _LT_COMPILER_FILE_LOCKS($1)
+-    _LT_LINKER_SHLIBS($1)
+-    _LT_SYS_DYNAMIC_LINKER($1)
+-    _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-    _LT_CONFIG($1)
+-  fi # test -n "$compiler"
+-
+-  CC=$lt_save_CC
+-  LDCXX=$LD
+-  LD=$lt_save_LD
+-  GCC=$lt_save_GCC
+-  with_gnu_ld=$lt_save_with_gnu_ld
+-  lt_cv_path_LDCXX=$lt_cv_path_LD
+-  lt_cv_path_LD=$lt_save_path_LD
+-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+-fi # test "$_lt_caught_CXX_error" != yes
+-
+-AC_LANG_POP
+-])# _LT_LANG_CXX_CONFIG
+-
+-
+-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+-# ---------------------------------
+-# Figure out "hidden" library dependencies from verbose
+-# compiler output when linking a shared library.
+-# Parse the compiler output and extract the necessary
+-# objects, libraries and library flags.
+-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-# Dependencies to place before and after the object being linked:
+-_LT_TAGVAR(predep_objects, $1)=
+-_LT_TAGVAR(postdep_objects, $1)=
+-_LT_TAGVAR(predeps, $1)=
+-_LT_TAGVAR(postdeps, $1)=
+-_LT_TAGVAR(compiler_lib_search_path, $1)=
+-
+-dnl we can't use the lt_simple_compile_test_code here,
+-dnl because it contains code intended for an executable,
+-dnl not a library.  It's possible we should let each
+-dnl tag define a new lt_????_link_test_code variable,
+-dnl but it's only used here...
+-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+-int a;
+-void foo (void) { a = 0; }
+-_LT_EOF
+-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+-class Foo
+-{
+-public:
+-  Foo (void) { a = 0; }
+-private:
+-  int a;
+-};
+-_LT_EOF
+-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+-      subroutine foo
+-      implicit none
+-      integer*4 a
+-      a=0
+-      return
+-      end
+-_LT_EOF
+-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+-      subroutine foo
+-      implicit none
+-      integer a
+-      a=0
+-      return
+-      end
+-_LT_EOF
+-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+-public class foo {
+-  private int a;
+-  public void bar (void) {
+-    a = 0;
+-  }
+-};
+-_LT_EOF
+-])
+-dnl Parse the compiler output and extract the necessary
+-dnl objects, libraries and library flags.
+-if AC_TRY_EVAL(ac_compile); then
+-  # Parse the compiler output and extract the necessary
+-  # objects, libraries and library flags.
+-
+-  # Sentinel used to keep track of whether or not we are before
+-  # the conftest object file.
+-  pre_test_object_deps_done=no
+-
+-  for p in `eval "$output_verbose_link_cmd"`; do
+-    case $p in
+-
+-    -L* | -R* | -l*)
+-       # Some compilers place space between "-{L,R}" and the path.
+-       # Remove the space.
+-       if test $p = "-L" ||
+-          test $p = "-R"; then
+-	 prev=$p
+-	 continue
+-       else
+-	 prev=
+-       fi
+-
+-       if test "$pre_test_object_deps_done" = no; then
+-	 case $p in
+-	 -L* | -R*)
+-	   # Internal compiler library paths should come after those
+-	   # provided the user.  The postdeps already come after the
+-	   # user supplied libs so there is no need to process them.
+-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+-	   else
+-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+-	   fi
+-	   ;;
+-	 # The "-l" case would never come before the object being
+-	 # linked, so don't bother handling this case.
+-	 esac
+-       else
+-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+-	 else
+-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+-	 fi
+-       fi
+-       ;;
+-
+-    *.$objext)
+-       # This assumes that the test object file only shows up
+-       # once in the compiler output.
+-       if test "$p" = "conftest.$objext"; then
+-	 pre_test_object_deps_done=yes
+-	 continue
+-       fi
+-
+-       if test "$pre_test_object_deps_done" = no; then
+-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+-	   _LT_TAGVAR(predep_objects, $1)="$p"
+-	 else
+-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+-	 fi
+-       else
+-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+-	   _LT_TAGVAR(postdep_objects, $1)="$p"
+-	 else
+-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+-	 fi
+-       fi
+-       ;;
+-
+-    *) ;; # Ignore the rest.
+-
+-    esac
+-  done
+-
+-  # Clean up.
+-  rm -f a.out a.exe
+-else
+-  echo "libtool.m4: error: problem compiling $1 test program"
+-fi
+-
+-$RM -f confest.$objext
+-
+-# PORTME: override above test on systems where it is broken
+-m4_if([$1], [CXX],
+-[case $host_os in
+-interix[[3-9]]*)
+-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+-  # hack all around it, let's just trust "g++" to DTRT.
+-  _LT_TAGVAR(predep_objects,$1)=
+-  _LT_TAGVAR(postdep_objects,$1)=
+-  _LT_TAGVAR(postdeps,$1)=
+-  ;;
+-
+-linux*)
+-  case `$CC -V 2>&1 | sed 5q` in
+-  *Sun\ C*)
+-    # Sun C++ 5.9
+-
+-    # The more standards-conforming stlport4 library is
+-    # incompatible with the Cstd library. Avoid specifying
+-    # it if it's in CXXFLAGS. Ignore libCrun as
+-    # -library=stlport4 depends on it.
+-    case " $CXX $CXXFLAGS " in
+-    *" -library=stlport4 "*)
+-      solaris_use_stlport4=yes
+-      ;;
+-    esac
+-
+-    if test "$solaris_use_stlport4" != yes; then
+-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+-    fi
+-    ;;
+-  esac
+-  ;;
+-
+-solaris*)
+-  case $cc_basename in
+-  CC*)
+-    # The more standards-conforming stlport4 library is
+-    # incompatible with the Cstd library. Avoid specifying
+-    # it if it's in CXXFLAGS. Ignore libCrun as
+-    # -library=stlport4 depends on it.
+-    case " $CXX $CXXFLAGS " in
+-    *" -library=stlport4 "*)
+-      solaris_use_stlport4=yes
+-      ;;
+-    esac
+-
+-    # Adding this requires a known-good setup of shared libraries for
+-    # Sun compiler versions before 5.6, else PIC objects from an old
+-    # archive will be linked into the output, leading to subtle bugs.
+-    if test "$solaris_use_stlport4" != yes; then
+-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+-    fi
+-    ;;
+-  esac
+-  ;;
+-esac
+-])
+-
+-case " $_LT_TAGVAR(postdeps, $1) " in
+-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+-esac
+- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+-fi
+-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+-    [The directories searched by this compiler when creating a shared library])
+-_LT_TAGDECL([], [predep_objects], [1],
+-    [Dependencies to place before and after the objects being linked to
+-    create a shared library])
+-_LT_TAGDECL([], [postdep_objects], [1])
+-_LT_TAGDECL([], [predeps], [1])
+-_LT_TAGDECL([], [postdeps], [1])
+-_LT_TAGDECL([], [compiler_lib_search_path], [1],
+-    [The library search path used internally by the compiler when linking
+-    a shared library])
+-])# _LT_SYS_HIDDEN_LIBDEPS
+-
+-
+-# _LT_PROG_F77
+-# ------------
+-# Since AC_PROG_F77 is broken, in that it returns the empty string
+-# if there is no fortran compiler, we have our own version here.
+-m4_defun([_LT_PROG_F77],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+-AC_PROG_F77
+-if test -z "$F77" || test "X$F77" = "Xno"; then
+-  _lt_disable_F77=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_F77
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_F77], [])
+-
+-
+-# _LT_LANG_F77_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for a Fortran 77 compiler are
+-# suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_F77_CONFIG],
+-[AC_REQUIRE([_LT_PROG_F77])dnl
+-AC_LANG_PUSH(Fortran 77)
+-
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_TAGVAR(allow_undefined_flag, $1)=
+-_LT_TAGVAR(always_export_symbols, $1)=no
+-_LT_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_direct, $1)=no
+-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_TAGVAR(hardcode_automatic, $1)=no
+-_LT_TAGVAR(inherit_rpath, $1)=no
+-_LT_TAGVAR(module_cmds, $1)=
+-_LT_TAGVAR(module_expsym_cmds, $1)=
+-_LT_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_TAGVAR(no_undefined_flag, $1)=
+-_LT_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for f77 test sources.
+-ac_ext=f
+-
+-# Object file extension for compiled f77 test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# No sense in running all these tests if we already determined that
+-# the F77 compiler isn't working.  Some variables (like enable_shared)
+-# are currently assumed to apply to all compilers on this platform,
+-# and will be corrupted by setting them based on a non-working compiler.
+-if test "$_lt_disable_F77" != yes; then
+-  # Code to be used in simple compile tests
+-  lt_simple_compile_test_code="\
+-      subroutine t
+-      return
+-      end
+-"
+-
+-  # Code to be used in simple link tests
+-  lt_simple_link_test_code="\
+-      program t
+-      end
+-"
+-
+-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-  _LT_TAG_COMPILER
+-
+-  # save warnings/boilerplate of simple test code
+-  _LT_COMPILER_BOILERPLATE
+-  _LT_LINKER_BOILERPLATE
+-
+-  # Allow CC to be a program name with arguments.
+-  lt_save_CC="$CC"
+-  lt_save_GCC=$GCC
+-  CC=${F77-"f77"}
+-  compiler=$CC
+-  _LT_TAGVAR(compiler, $1)=$CC
+-  _LT_CC_BASENAME([$compiler])
+-  GCC=$G77
+-  if test -n "$compiler"; then
+-    AC_MSG_CHECKING([if libtool supports shared libraries])
+-    AC_MSG_RESULT([$can_build_shared])
+-
+-    AC_MSG_CHECKING([whether to build shared libraries])
+-    test "$can_build_shared" = "no" && enable_shared=no
+-
+-    # On AIX, shared libraries and static libraries use the same namespace, and
+-    # are all built from PIC.
+-    case $host_os in
+-      aix3*)
+-        test "$enable_shared" = yes && enable_static=no
+-        if test -n "$RANLIB"; then
+-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+-          postinstall_cmds='$RANLIB $lib'
+-        fi
+-        ;;
+-      aix[[4-9]]*)
+-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+-	  test "$enable_shared" = yes && enable_static=no
+-	fi
+-        ;;
+-    esac
+-    AC_MSG_RESULT([$enable_shared])
+-
+-    AC_MSG_CHECKING([whether to build static libraries])
+-    # Make sure either enable_shared or enable_static is yes.
+-    test "$enable_shared" = yes || enable_static=yes
+-    AC_MSG_RESULT([$enable_static])
+-
+-    _LT_TAGVAR(GCC, $1)="$G77"
+-    _LT_TAGVAR(LD, $1)="$LD"
+-
+-    ## CAVEAT EMPTOR:
+-    ## There is no encapsulation within the following macros, do not change
+-    ## the running order or otherwise move them around unless you know exactly
+-    ## what you are doing...
+-    _LT_COMPILER_PIC($1)
+-    _LT_COMPILER_C_O($1)
+-    _LT_COMPILER_FILE_LOCKS($1)
+-    _LT_LINKER_SHLIBS($1)
+-    _LT_SYS_DYNAMIC_LINKER($1)
+-    _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-    _LT_CONFIG($1)
+-  fi # test -n "$compiler"
+-
+-  GCC=$lt_save_GCC
+-  CC="$lt_save_CC"
+-fi # test "$_lt_disable_F77" != yes
+-
+-AC_LANG_POP
+-])# _LT_LANG_F77_CONFIG
+-
+-
+-# _LT_PROG_FC
+-# -----------
+-# Since AC_PROG_FC is broken, in that it returns the empty string
+-# if there is no fortran compiler, we have our own version here.
+-m4_defun([_LT_PROG_FC],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+-AC_PROG_FC
+-if test -z "$FC" || test "X$FC" = "Xno"; then
+-  _lt_disable_FC=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_FC
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_FC], [])
+-
+-
+-# _LT_LANG_FC_CONFIG([TAG])
+-# -------------------------
+-# Ensure that the configuration variables for a Fortran compiler are
+-# suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_FC_CONFIG],
+-[AC_REQUIRE([_LT_PROG_FC])dnl
+-AC_LANG_PUSH(Fortran)
+-
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_TAGVAR(allow_undefined_flag, $1)=
+-_LT_TAGVAR(always_export_symbols, $1)=no
+-_LT_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_direct, $1)=no
+-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_TAGVAR(hardcode_automatic, $1)=no
+-_LT_TAGVAR(inherit_rpath, $1)=no
+-_LT_TAGVAR(module_cmds, $1)=
+-_LT_TAGVAR(module_expsym_cmds, $1)=
+-_LT_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_TAGVAR(no_undefined_flag, $1)=
+-_LT_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for fc test sources.
+-ac_ext=${ac_fc_srcext-f}
+-
+-# Object file extension for compiled fc test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# No sense in running all these tests if we already determined that
+-# the FC compiler isn't working.  Some variables (like enable_shared)
+-# are currently assumed to apply to all compilers on this platform,
+-# and will be corrupted by setting them based on a non-working compiler.
+-if test "$_lt_disable_FC" != yes; then
+-  # Code to be used in simple compile tests
+-  lt_simple_compile_test_code="\
+-      subroutine t
+-      return
+-      end
+-"
+-
+-  # Code to be used in simple link tests
+-  lt_simple_link_test_code="\
+-      program t
+-      end
+-"
+-
+-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-  _LT_TAG_COMPILER
+-
+-  # save warnings/boilerplate of simple test code
+-  _LT_COMPILER_BOILERPLATE
+-  _LT_LINKER_BOILERPLATE
+-
+-  # Allow CC to be a program name with arguments.
+-  lt_save_CC="$CC"
+-  lt_save_GCC=$GCC
+-  CC=${FC-"f95"}
+-  compiler=$CC
+-  GCC=$ac_cv_fc_compiler_gnu
+-
+-  _LT_TAGVAR(compiler, $1)=$CC
+-  _LT_CC_BASENAME([$compiler])
+-
+-  if test -n "$compiler"; then
+-    AC_MSG_CHECKING([if libtool supports shared libraries])
+-    AC_MSG_RESULT([$can_build_shared])
+-
+-    AC_MSG_CHECKING([whether to build shared libraries])
+-    test "$can_build_shared" = "no" && enable_shared=no
+-
+-    # On AIX, shared libraries and static libraries use the same namespace, and
+-    # are all built from PIC.
+-    case $host_os in
+-      aix3*)
+-        test "$enable_shared" = yes && enable_static=no
+-        if test -n "$RANLIB"; then
+-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+-          postinstall_cmds='$RANLIB $lib'
+-        fi
+-        ;;
+-      aix[[4-9]]*)
+-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+-	  test "$enable_shared" = yes && enable_static=no
+-	fi
+-        ;;
+-    esac
+-    AC_MSG_RESULT([$enable_shared])
+-
+-    AC_MSG_CHECKING([whether to build static libraries])
+-    # Make sure either enable_shared or enable_static is yes.
+-    test "$enable_shared" = yes || enable_static=yes
+-    AC_MSG_RESULT([$enable_static])
+-
+-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+-    _LT_TAGVAR(LD, $1)="$LD"
+-
+-    ## CAVEAT EMPTOR:
+-    ## There is no encapsulation within the following macros, do not change
+-    ## the running order or otherwise move them around unless you know exactly
+-    ## what you are doing...
+-    _LT_SYS_HIDDEN_LIBDEPS($1)
+-    _LT_COMPILER_PIC($1)
+-    _LT_COMPILER_C_O($1)
+-    _LT_COMPILER_FILE_LOCKS($1)
+-    _LT_LINKER_SHLIBS($1)
+-    _LT_SYS_DYNAMIC_LINKER($1)
+-    _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-    _LT_CONFIG($1)
+-  fi # test -n "$compiler"
+-
+-  GCC=$lt_save_GCC
+-  CC="$lt_save_CC"
+-fi # test "$_lt_disable_FC" != yes
+-
+-AC_LANG_POP
+-])# _LT_LANG_FC_CONFIG
+-
+-
+-# _LT_LANG_GCJ_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for the GNU Java Compiler compiler
+-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_GCJ_CONFIG],
+-[AC_REQUIRE([LT_PROG_GCJ])dnl
+-AC_LANG_SAVE
+-
+-# Source file extension for Java test sources.
+-ac_ext=java
+-
+-# Object file extension for compiled Java test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="class foo {}"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_TAG_COMPILER
+-
+-# save warnings/boilerplate of simple test code
+-_LT_COMPILER_BOILERPLATE
+-_LT_LINKER_BOILERPLATE
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-lt_save_GCC=$GCC
+-GCC=yes
+-CC=${GCJ-"gcj"}
+-compiler=$CC
+-_LT_TAGVAR(compiler, $1)=$CC
+-_LT_TAGVAR(LD, $1)="$LD"
+-_LT_CC_BASENAME([$compiler])
+-
+-# GCJ did not exist at the time GCC didn't implicitly link libc in.
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-
+-if test -n "$compiler"; then
+-  _LT_COMPILER_NO_RTTI($1)
+-  _LT_COMPILER_PIC($1)
+-  _LT_COMPILER_C_O($1)
+-  _LT_COMPILER_FILE_LOCKS($1)
+-  _LT_LINKER_SHLIBS($1)
+-  _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-  _LT_CONFIG($1)
+-fi
+-
+-AC_LANG_RESTORE
+-
+-GCC=$lt_save_GCC
+-CC="$lt_save_CC"
+-])# _LT_LANG_GCJ_CONFIG
+-
+-
+-# _LT_LANG_RC_CONFIG([TAG])
+-# -------------------------
+-# Ensure that the configuration variables for the Windows resource compiler
+-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_RC_CONFIG],
+-[AC_REQUIRE([LT_PROG_RC])dnl
+-AC_LANG_SAVE
+-
+-# Source file extension for RC test sources.
+-ac_ext=rc
+-
+-# Object file extension for compiled RC test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code="$lt_simple_compile_test_code"
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_TAG_COMPILER
+-
+-# save warnings/boilerplate of simple test code
+-_LT_COMPILER_BOILERPLATE
+-_LT_LINKER_BOILERPLATE
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-lt_save_GCC=$GCC
+-GCC=
+-CC=${RC-"windres"}
+-compiler=$CC
+-_LT_TAGVAR(compiler, $1)=$CC
+-_LT_CC_BASENAME([$compiler])
+-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+-
+-if test -n "$compiler"; then
+-  :
+-  _LT_CONFIG($1)
+-fi
+-
+-GCC=$lt_save_GCC
+-AC_LANG_RESTORE
+-CC="$lt_save_CC"
+-])# _LT_LANG_RC_CONFIG
+-
+-
+-# LT_PROG_GCJ
+-# -----------
+-AC_DEFUN([LT_PROG_GCJ],
+-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+-    [AC_CHECK_TOOL(GCJ, gcj,)
+-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+-      AC_SUBST(GCJFLAGS)])])[]dnl
+-])
+-
+-# Old name:
+-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+-
+-
+-# LT_PROG_RC
+-# ----------
+-AC_DEFUN([LT_PROG_RC],
+-[AC_CHECK_TOOL(RC, windres,)
+-])
+-
+-# Old name:
+-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([LT_AC_PROG_RC], [])
+-
+-
+-# _LT_DECL_EGREP
+-# --------------
+-# If we don't have a new enough Autoconf to choose the best grep
+-# available, choose the one first in the user's PATH.
+-m4_defun([_LT_DECL_EGREP],
+-[AC_REQUIRE([AC_PROG_EGREP])dnl
+-AC_REQUIRE([AC_PROG_FGREP])dnl
+-test -z "$GREP" && GREP=grep
+-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+-_LT_DECL([], [EGREP], [1], [An ERE matcher])
+-_LT_DECL([], [FGREP], [1], [A literal string matcher])
+-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+-AC_SUBST([GREP])
+-])
+-
+-
+-# _LT_DECL_OBJDUMP
+-# --------------
+-# If we don't have a new enough Autoconf to choose the best objdump
+-# available, choose the one first in the user's PATH.
+-m4_defun([_LT_DECL_OBJDUMP],
+-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+-test -z "$OBJDUMP" && OBJDUMP=objdump
+-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+-AC_SUBST([OBJDUMP])
+-])
+-
+-
+-# _LT_DECL_SED
+-# ------------
+-# Check for a fully-functional sed program, that truncates
+-# as few characters as possible.  Prefer GNU sed if found.
+-m4_defun([_LT_DECL_SED],
+-[AC_PROG_SED
+-test -z "$SED" && SED=sed
+-Xsed="$SED -e 1s/^X//"
+-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+-])# _LT_DECL_SED
+-
+-m4_ifndef([AC_PROG_SED], [
+-# NOTE: This macro has been submitted for inclusion into   #
+-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+-#  a released version of Autoconf we should remove this    #
+-#  macro and use it instead.                               #
+-
+-m4_defun([AC_PROG_SED],
+-[AC_MSG_CHECKING([for a sed that does not truncate output])
+-AC_CACHE_VAL(lt_cv_path_SED,
+-[# Loop through the user's path and test for sed and gsed.
+-# Then use that list of sed's as ones to test for truncation.
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+-  IFS=$as_save_IFS
+-  test -z "$as_dir" && as_dir=.
+-  for lt_ac_prog in sed gsed; do
+-    for ac_exec_ext in '' $ac_executable_extensions; do
+-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+-      fi
+-    done
+-  done
+-done
+-IFS=$as_save_IFS
+-lt_ac_max=0
+-lt_ac_count=0
+-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+-# along with /bin/sed that truncates output.
+-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+-  test ! -f $lt_ac_sed && continue
+-  cat /dev/null > conftest.in
+-  lt_ac_count=0
+-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+-  # Check for GNU sed and select it if it is found.
+-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+-    lt_cv_path_SED=$lt_ac_sed
+-    break
+-  fi
+-  while true; do
+-    cat conftest.in conftest.in >conftest.tmp
+-    mv conftest.tmp conftest.in
+-    cp conftest.in conftest.nl
+-    echo >>conftest.nl
+-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+-    cmp -s conftest.out conftest.nl || break
+-    # 10000 chars as input seems more than enough
+-    test $lt_ac_count -gt 10 && break
+-    lt_ac_count=`expr $lt_ac_count + 1`
+-    if test $lt_ac_count -gt $lt_ac_max; then
+-      lt_ac_max=$lt_ac_count
+-      lt_cv_path_SED=$lt_ac_sed
+-    fi
+-  done
+-done
+-])
+-SED=$lt_cv_path_SED
+-AC_SUBST([SED])
+-AC_MSG_RESULT([$SED])
+-])#AC_PROG_SED
+-])#m4_ifndef
+-
+-# Old name:
+-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([LT_AC_PROG_SED], [])
+-
+-
+-# _LT_CHECK_SHELL_FEATURES
+-# ------------------------
+-# Find out whether the shell is Bourne or XSI compatible,
+-# or has some other useful features.
+-m4_defun([_LT_CHECK_SHELL_FEATURES],
+-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+-# Try some XSI features
+-xsi_shell=no
+-( _lt_dummy="a/b/c"
+-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+-      = c,a/b,, \
+-    && eval 'test $(( 1 + 1 )) -eq 2 \
+-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+-  && xsi_shell=yes
+-AC_MSG_RESULT([$xsi_shell])
+-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+-
+-AC_MSG_CHECKING([whether the shell understands "+="])
+-lt_shell_append=no
+-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+-    >/dev/null 2>&1 \
+-  && lt_shell_append=yes
+-AC_MSG_RESULT([$lt_shell_append])
+-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+-
+-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+-  lt_unset=unset
+-else
+-  lt_unset=false
+-fi
+-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+-
+-# test EBCDIC or ASCII
+-case `echo X|tr X '\101'` in
+- A) # ASCII based system
+-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+-  lt_SP2NL='tr \040 \012'
+-  lt_NL2SP='tr \015\012 \040\040'
+-  ;;
+- *) # EBCDIC based system
+-  lt_SP2NL='tr \100 \n'
+-  lt_NL2SP='tr \r\n \100\100'
+-  ;;
+-esac
+-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+-])# _LT_CHECK_SHELL_FEATURES
+-
+-
+-# _LT_PROG_XSI_SHELLFNS
+-# ---------------------
+-# Bourne and XSI compatible variants of some useful shell functions.
+-m4_defun([_LT_PROG_XSI_SHELLFNS],
+-[case $xsi_shell in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-#   dirname:  Compute the dirname of FILE.  If nonempty,
+-#             add APPEND to the result, otherwise set result
+-#             to NONDIR_REPLACEMENT.
+-#             value returned in "$func_dirname_result"
+-#   basename: Compute filename of FILE.
+-#             value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+-  # positional parameters, so assign one to ordinary parameter first.
+-  func_stripname_result=${3}
+-  func_stripname_result=${func_stripname_result#"${1}"}
+-  func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=${1%%=*}
+-  func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  case ${1} in
+-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+-    *)    func_lo2o_result=${1} ;;
+-  esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=$(( $[*] ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=${#1}
+-}
+-
+-_LT_EOF
+-    ;;
+-  *) # Bourne compatible functions.
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  # Extract subdirectory from the argument.
+-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+-  if test "X$func_dirname_result" = "X${1}"; then
+-    func_dirname_result="${3}"
+-  else
+-    func_dirname_result="$func_dirname_result${2}"
+-  fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+-}
+-
+-dnl func_dirname_and_basename
+-dnl A portable version of this function is already defined in general.m4sh
+-dnl so there is no need for it here.
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+-  case ${2} in
+-    .*) func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+-    *)  func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+-  esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[[^=]]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=`expr "$[@]"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$[1]+=\$[2]"
+-}
+-_LT_EOF
+-    ;;
+-  *)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$[1]=\$$[1]\$[2]"
+-}
+-
+-_LT_EOF
+-    ;;
+-  esac
+-])
++To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+ 
+ # ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*-
+ #
+-#   Copyright (C) 1999-2006, 2007, 2008 Free Software Foundation, Inc.
++#   Copyright (C) 1999-2006, 2007, 2008, 2011 Free Software Foundation, Inc.
+ #   Written by Thomas Tanner, 1999
+ #
+ # This file is free software; the Free Software Foundation gives
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+ 
+-# serial 17 LTDL_INIT
++# serial 18 LTDL_INIT
+ 
+ # LT_CONFIG_LTDL_DIR(DIRECTORY, [LTDL-MODE])
+ # ------------------------------------------
+ # DIRECTORY contains the libltdl sources.  It is okay to call this
+ # function multiple times, as long as the same DIRECTORY is always given.
+ AC_DEFUN([LT_CONFIG_LTDL_DIR],
+ [AC_BEFORE([$0], [LTDL_INIT])
+ _$0($*)
+@@ -7774,20 +424,26 @@ m4_ifset([AH_HEADER],
+ AC_SUBST([LT_CONFIG_H])
+ 
+ AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
+ 	[], [], [AC_INCLUDES_DEFAULT])
+ 
+ AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
+ AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
+ 
++m4_pattern_allow([LT_LIBEXT])dnl
+ AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
+ 
++name=
++eval "lt_libprefix=\"$libname_spec\""
++m4_pattern_allow([LT_LIBPREFIX])dnl
++AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix])
++
+ name=ltdl
+-LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""`
++eval "LTDLOPEN=\"$libname_spec\""
+ AC_SUBST([LTDLOPEN])
+ ])# _LTDL_SETUP
+ 
+ 
+ # _LT_ENABLE_INSTALL
+ # ------------------
+ m4_define([_LT_ENABLE_INSTALL],
+ [AC_ARG_ENABLE([ltdl-install],
+@@ -7834,17 +490,17 @@ AC_CACHE_CHECK([whether deplibs are load
+   darwin*)
+     # Assuming the user has installed a libdl from somewhere, this is true
+     # If you are looking for one http://www.opendarwin.org/projects/dlcompat
+     lt_cv_sys_dlopen_deplibs=yes
+     ;;
+   freebsd* | dragonfly*)
+     lt_cv_sys_dlopen_deplibs=yes
+     ;;
+-  gnu* | linux* | k*bsd*-gnu)
++  gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu)
+     # GNU and its variants, using gnu ld.so (Glibc)
+     lt_cv_sys_dlopen_deplibs=yes
+     ;;
+   hpux10*|hpux11*)
+     lt_cv_sys_dlopen_deplibs=yes
+     ;;
+   interix*)
+     lt_cv_sys_dlopen_deplibs=yes
+@@ -7914,22 +570,29 @@ dnl AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS
+ # -----------------
+ AC_DEFUN([LT_SYS_MODULE_EXT],
+ [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+ AC_CACHE_CHECK([which extension is used for runtime loadable modules],
+   [libltdl_cv_shlibext],
+ [
+ module=yes
+ eval libltdl_cv_shlibext=$shrext_cmds
++module=no
++eval libltdl_cv_shrext=$shrext_cmds
+   ])
+ if test -n "$libltdl_cv_shlibext"; then
+   m4_pattern_allow([LT_MODULE_EXT])dnl
+   AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
+     [Define to the extension used for runtime loadable modules, say, ".so".])
+ fi
++if test "$libltdl_cv_shrext" != "$libltdl_cv_shlibext"; then
++  m4_pattern_allow([LT_SHARED_EXT])dnl
++  AC_DEFINE_UNQUOTED([LT_SHARED_EXT], ["$libltdl_cv_shrext"],
++    [Define to the shared library suffix, say, ".dylib".])
++fi
+ ])# LT_SYS_MODULE_EXT
+ 
+ # Old name:
+ AU_ALIAS([AC_LTDL_SHLIBEXT], [LT_SYS_MODULE_EXT])
+ dnl aclocal-1.4 backwards compatibility:
+ dnl AC_DEFUN([AC_LTDL_SHLIBEXT], [])
+ 
+ 
+@@ -8170,689 +833,83 @@ if test x"$libltdl_cv_need_uscore" = xye
+ fi
+ ])# LT_FUNC_DLSYM_USCORE
+ 
+ # Old name:
+ AU_ALIAS([AC_LTDL_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE])
+ dnl aclocal-1.4 backwards compatibility:
+ dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], [])
+ 
+-# Helper functions for option handling.                    -*- Autoconf -*-
+-#
+-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+-#   Written by Gary V. Vaughan, 2004
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# serial 6 ltoptions.m4
+-
+-# This is to help aclocal find these macros, as it can't see m4_define.
+-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+-
+-
+-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+-# ------------------------------------------
+-m4_define([_LT_MANGLE_OPTION],
+-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+-
+-
+-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+-# ---------------------------------------
+-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+-# saved as a flag.
+-m4_define([_LT_SET_OPTION],
+-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+-        _LT_MANGLE_DEFUN([$1], [$2]),
+-    [m4_warning([Unknown $1 option `$2'])])[]dnl
+-])
+-
+-
+-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+-# ------------------------------------------------------------
+-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+-m4_define([_LT_IF_OPTION],
+-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+-
+-
+-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+-# -------------------------------------------------------
+-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+-# are set.
+-m4_define([_LT_UNLESS_OPTIONS],
+-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+-		      [m4_define([$0_found])])])[]dnl
+-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+-])[]dnl
+-])
+-
+-
+-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+-# ----------------------------------------
+-# OPTION-LIST is a space-separated list of Libtool options associated
+-# with MACRO-NAME.  If any OPTION has a matching handler declared with
+-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+-# the unknown option and exit.
+-m4_defun([_LT_SET_OPTIONS],
+-[# Set options
+-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+-    [_LT_SET_OPTION([$1], _LT_Option)])
+-
+-m4_if([$1],[LT_INIT],[
+-  dnl
+-  dnl Simply set some default values (i.e off) if boolean options were not
+-  dnl specified:
+-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+-  ])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+-  ])
+-  dnl
+-  dnl If no reference was made to various pairs of opposing options, then
+-  dnl we run the default mode handler for the pair.  For example, if neither
+-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+-  dnl archives by default:
+-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+-  		   [_LT_ENABLE_FAST_INSTALL])
+-  ])
+-])# _LT_SET_OPTIONS
+-
+-
+-
+-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+-# -----------------------------------------
+-m4_define([_LT_MANGLE_DEFUN],
+-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+-
+-
+-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+-# -----------------------------------------------
+-m4_define([LT_OPTION_DEFINE],
+-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+-])# LT_OPTION_DEFINE
+-
+-
+-# dlopen
+-# ------
+-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+-])
+-
+-AU_DEFUN([AC_LIBTOOL_DLOPEN],
+-[_LT_SET_OPTION([LT_INIT], [dlopen])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you
+-put the `dlopen' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+-
+-
+-# win32-dll
+-# ---------
+-# Declare package support for building win32 dll's.
+-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+-[enable_win32_dll=yes
+-
+-case $host in
+-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+-  AC_CHECK_TOOL(AS, as, false)
+-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+-  ;;
+-esac
+-
+-test -z "$AS" && AS=as
+-_LT_DECL([], [AS],      [0], [Assembler program])dnl
+-
+-test -z "$DLLTOOL" && DLLTOOL=dlltool
+-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+-
+-test -z "$OBJDUMP" && OBJDUMP=objdump
+-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+-])# win32-dll
+-
+-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-_LT_SET_OPTION([LT_INIT], [win32-dll])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you
+-put the `win32-dll' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+-
+-
+-# _LT_ENABLE_SHARED([DEFAULT])
+-# ----------------------------
+-# implement the --enable-shared flag, and supports the `shared' and
+-# `disable-shared' LT_INIT options.
+-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+-m4_define([_LT_ENABLE_SHARED],
+-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+-AC_ARG_ENABLE([shared],
+-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+-    [p=${PACKAGE-default}
+-    case $enableval in
+-    yes) enable_shared=yes ;;
+-    no) enable_shared=no ;;
+-    *)
+-      enable_shared=no
+-      # Look at the argument we got.  We use all the common list separators.
+-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+-      for pkg in $enableval; do
+-	IFS="$lt_save_ifs"
+-	if test "X$pkg" = "X$p"; then
+-	  enable_shared=yes
+-	fi
+-      done
+-      IFS="$lt_save_ifs"
+-      ;;
+-    esac],
+-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+-
+-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+-	[Whether or not to build shared libraries])
+-])# _LT_ENABLE_SHARED
+-
+-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+-
+-# Old names:
+-AC_DEFUN([AC_ENABLE_SHARED],
+-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+-])
+-
+-AC_DEFUN([AC_DISABLE_SHARED],
+-[_LT_SET_OPTION([LT_INIT], [disable-shared])
+-])
+-
+-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+-
+-
+-
+-# _LT_ENABLE_STATIC([DEFAULT])
+-# ----------------------------
+-# implement the --enable-static flag, and support the `static' and
+-# `disable-static' LT_INIT options.
+-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+-m4_define([_LT_ENABLE_STATIC],
+-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+-AC_ARG_ENABLE([static],
+-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+-    [p=${PACKAGE-default}
+-    case $enableval in
+-    yes) enable_static=yes ;;
+-    no) enable_static=no ;;
+-    *)
+-     enable_static=no
+-      # Look at the argument we got.  We use all the common list separators.
+-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+-      for pkg in $enableval; do
+-	IFS="$lt_save_ifs"
+-	if test "X$pkg" = "X$p"; then
+-	  enable_static=yes
+-	fi
+-      done
+-      IFS="$lt_save_ifs"
+-      ;;
+-    esac],
+-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+-
+-    _LT_DECL([build_old_libs], [enable_static], [0],
+-	[Whether or not to build static libraries])
+-])# _LT_ENABLE_STATIC
+-
+-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+-
+-# Old names:
+-AC_DEFUN([AC_ENABLE_STATIC],
+-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+-])
+-
+-AC_DEFUN([AC_DISABLE_STATIC],
+-[_LT_SET_OPTION([LT_INIT], [disable-static])
+-])
+-
+-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+-
+-
+-
+-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+-# ----------------------------------
+-# implement the --enable-fast-install flag, and support the `fast-install'
+-# and `disable-fast-install' LT_INIT options.
+-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+-m4_define([_LT_ENABLE_FAST_INSTALL],
+-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+-AC_ARG_ENABLE([fast-install],
+-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+-    [p=${PACKAGE-default}
+-    case $enableval in
+-    yes) enable_fast_install=yes ;;
+-    no) enable_fast_install=no ;;
+-    *)
+-      enable_fast_install=no
+-      # Look at the argument we got.  We use all the common list separators.
+-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+-      for pkg in $enableval; do
+-	IFS="$lt_save_ifs"
+-	if test "X$pkg" = "X$p"; then
+-	  enable_fast_install=yes
+-	fi
+-      done
+-      IFS="$lt_save_ifs"
+-      ;;
+-    esac],
+-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+-
+-_LT_DECL([fast_install], [enable_fast_install], [0],
+-	 [Whether or not to optimize for fast installation])dnl
+-])# _LT_ENABLE_FAST_INSTALL
+-
+-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+-
+-# Old names:
+-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+-the `fast-install' option into LT_INIT's first parameter.])
+-])
+-
+-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+-the `disable-fast-install' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+-
+-
+-# _LT_WITH_PIC([MODE])
+-# --------------------
+-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+-# LT_INIT options.
+-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+-m4_define([_LT_WITH_PIC],
+-[AC_ARG_WITH([pic],
+-    [AS_HELP_STRING([--with-pic],
+-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+-    [pic_mode="$withval"],
+-    [pic_mode=default])
+-
+-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+-
+-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+-])# _LT_WITH_PIC
+-
+-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+-
+-# Old name:
+-AU_DEFUN([AC_LIBTOOL_PICMODE],
+-[_LT_SET_OPTION([LT_INIT], [pic-only])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you
+-put the `pic-only' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+-
+-
+-m4_define([_LTDL_MODE], [])
+-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+-		 [m4_define([_LTDL_MODE], [nonrecursive])])
+-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+-		 [m4_define([_LTDL_MODE], [recursive])])
+-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+-		 [m4_define([_LTDL_MODE], [subproject])])
+-
+-m4_define([_LTDL_TYPE], [])
+-LT_OPTION_DEFINE([LTDL_INIT], [installable],
+-		 [m4_define([_LTDL_TYPE], [installable])])
+-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+-		 [m4_define([_LTDL_TYPE], [convenience])])
+-
+-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+-#
+-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+-# Written by Gary V. Vaughan, 2004
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# serial 6 ltsugar.m4
+-
+-# This is to help aclocal find these macros, as it can't see m4_define.
+-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+-
+-
+-# lt_join(SEP, ARG1, [ARG2...])
+-# -----------------------------
+-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+-# associated separator.
+-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+-# versions in m4sugar had bugs.
+-m4_define([lt_join],
+-[m4_if([$#], [1], [],
+-       [$#], [2], [[$2]],
+-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+-m4_define([_lt_join],
+-[m4_if([$#$2], [2], [],
+-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+-
+-
+-# lt_car(LIST)
+-# lt_cdr(LIST)
+-# ------------
+-# Manipulate m4 lists.
+-# These macros are necessary as long as will still need to support
+-# Autoconf-2.59 which quotes differently.
+-m4_define([lt_car], [[$1]])
+-m4_define([lt_cdr],
+-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+-       [$#], 1, [],
+-       [m4_dquote(m4_shift($@))])])
+-m4_define([lt_unquote], $1)
+-
+-
+-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+-# ------------------------------------------
+-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+-# Note that neither SEPARATOR nor STRING are expanded; they are appended
+-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+-# than defined and empty).
+-#
+-# This macro is needed until we can rely on Autoconf 2.62, since earlier
+-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+-m4_define([lt_append],
+-[m4_define([$1],
+-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+-
+-
+-
+-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+-# ----------------------------------------------------------
+-# Produce a SEP delimited list of all paired combinations of elements of
+-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+-# has the form PREFIXmINFIXSUFFIXn.
+-# Needed until we can rely on m4_combine added in Autoconf 2.62.
+-m4_define([lt_combine],
+-[m4_if(m4_eval([$# > 3]), [1],
+-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+-[[m4_foreach([_Lt_prefix], [$2],
+-	     [m4_foreach([_Lt_suffix],
+-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+-
+-
+-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+-# -----------------------------------------------------------------------
+-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+-m4_define([lt_if_append_uniq],
+-[m4_ifdef([$1],
+-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+-		 [lt_append([$1], [$2], [$3])$4],
+-		 [$5])],
+-	  [lt_append([$1], [$2], [$3])$4])])
+-
+-
+-# lt_dict_add(DICT, KEY, VALUE)
+-# -----------------------------
+-m4_define([lt_dict_add],
+-[m4_define([$1($2)], [$3])])
+-
+-
+-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+-# --------------------------------------------
+-m4_define([lt_dict_add_subkey],
+-[m4_define([$1($2:$3)], [$4])])
+-
+-
+-# lt_dict_fetch(DICT, KEY, [SUBKEY])
+-# ----------------------------------
+-m4_define([lt_dict_fetch],
+-[m4_ifval([$3],
+-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+-
+-
+-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+-# -----------------------------------------------------------------
+-m4_define([lt_if_dict_fetch],
+-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+-	[$5],
+-    [$6])])
+-
+-
+-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+-# --------------------------------------------------------------
+-m4_define([lt_dict_filter],
+-[m4_if([$5], [], [],
+-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+-])
+-
+-# ltversion.m4 -- version numbers			-*- Autoconf -*-
+-#
+-#   Copyright (C) 2004 Free Software Foundation, Inc.
+-#   Written by Scott James Remnant, 2004
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# Generated from ltversion.in.
+-
+-# serial 3017 ltversion.m4
+-# This file is part of GNU Libtool
+-
+-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+-m4_define([LT_PACKAGE_REVISION], [1.3017])
+-
+-AC_DEFUN([LTVERSION_VERSION],
+-[macro_version='2.2.6b'
+-macro_revision='1.3017'
+-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+-_LT_DECL(, macro_revision, 0)
+-])
+-
+-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+-#
+-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+-#   Written by Scott James Remnant, 2004.
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# serial 4 lt~obsolete.m4
+-
+-# These exist entirely to fool aclocal when bootstrapping libtool.
+-#
+-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+-# which have later been changed to m4_define as they aren't part of the
+-# exported API, or moved to Autoconf or Automake where they belong.
+-#
+-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+-# using a macro with the same name in our local m4/libtool.m4 it'll
+-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+-# and doesn't know about Autoconf macros at all.)
+-#
+-# So we provide this file, which has a silly filename so it's always
+-# included after everything else.  This provides aclocal with the
+-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+-# because those macros already exist, or will be overwritten later.
+-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+-#
+-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+-# Yes, that means every name once taken will need to remain here until
+-# we give up compatibility with versions before 1.7, at which point
+-# we need to keep only those names which we still refer to.
+-
+-# This is to help aclocal find these macros, as it can't see m4_define.
+-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+-
+-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+-
+-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # AM_AUTOMAKE_VERSION(VERSION)
+ # ----------------------------
+ # Automake X.Y traces this macro to ensure aclocal.m4 has been
+ # generated from the m4 files accompanying Automake X.Y.
+ # (This private macro should not be called outside this file.)
+ AC_DEFUN([AM_AUTOMAKE_VERSION],
+-[am__api_version='1.11'
++[am__api_version='1.13'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version.  Point them to the right macro.
+-m4_if([$1], [1.11.1], [],
++m4_if([$1], [1.13.4], [],
+       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+ 
+ # _AM_AUTOCONF_VERSION(VERSION)
+ # -----------------------------
+ # aclocal traces this macro to find the Autoconf version.
+ # This is a private macro too.  Using m4_define simplifies
+ # the logic in aclocal, which can simply ignore this definition.
+ m4_define([_AM_AUTOCONF_VERSION], [])
+ 
+ # AM_SET_CURRENT_AUTOMAKE_VERSION
+ # -------------------------------
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.11.1])dnl
++[AM_AUTOMAKE_VERSION([1.13.4])dnl
+ m4_ifndef([AC_AUTOCONF_VERSION],
+   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+ 
+ # Figure out how to run the assembler.                      -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
++# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 5
+-
+ # AM_PROG_AS
+ # ----------
+ AC_DEFUN([AM_PROG_AS],
+ [# By default we simply use the C compiler to build assembly code.
+ AC_REQUIRE([AC_PROG_CC])
+ test "${CCAS+set}" = set || CCAS=$CC
+ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+ AC_ARG_VAR([CCAS],      [assembler compiler command (defaults to CC)])
+ AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+ ])
+ 
+ # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
++# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
++# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+ #
+ # Of course, Automake must honor this variable whenever it calls a
+ # tool from the auxiliary directory.  The problem is that $srcdir (and
+ # therefore $ac_aux_dir as well) can be either absolute or relative,
+ # depending on how configure is run.  This is pretty annoying, since
+ # it makes $ac_aux_dir quite unusable in subdirectories: in the top
+ # source directory, any form will work fine, but in subdirectories a
+ # relative path needs to be adjusted first.
+@@ -8861,17 +918,17 @@ AC_ARG_VAR([CCASFLAGS], [assembler compi
+ #    fails when called from a subdirectory if $ac_aux_dir is relative
+ # $top_srcdir/$ac_aux_dir/missing
+ #    fails if $ac_aux_dir is absolute,
+ #    fails when called from a subdirectory in a VPATH build with
+ #          a relative $ac_aux_dir
+ #
+ # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+ # are both prefixed by $srcdir.  In an in-source build this is usually
+-# harmless because $srcdir is `.', but things will broke when you
++# harmless because $srcdir is '.', but things will broke when you
+ # start a VPATH build or use an absolute $srcdir.
+ #
+ # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+ # iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+ #   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+ # and then we would define $MISSING as
+ #   MISSING="\${SHELL} $am_aux_dir/missing"
+ # This will work as long as MISSING is not called from configure, because
+@@ -8887,32 +944,29 @@ AC_DEFUN([AM_AUX_DIR_EXPAND],
+ [dnl Rely on autoconf to set up CDPATH properly.
+ AC_PREREQ([2.50])dnl
+ # expand $ac_aux_dir to an absolute path
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+ ])
+ 
+ # AM_CONDITIONAL                                            -*- Autoconf -*-
+ 
+-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+-# Free Software Foundation, Inc.
++# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 9
+-
+ # AM_CONDITIONAL(NAME, SHELL-CONDITION)
+ # -------------------------------------
+ # Define a conditional.
+ AC_DEFUN([AM_CONDITIONAL],
+-[AC_PREREQ(2.52)dnl
+- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
++[AC_PREREQ([2.52])dnl
++ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
++       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+ AC_SUBST([$1_TRUE])dnl
+ AC_SUBST([$1_FALSE])dnl
+ _AM_SUBST_NOTMAKE([$1_TRUE])dnl
+ _AM_SUBST_NOTMAKE([$1_FALSE])dnl
+ m4_define([_AM_COND_VALUE_$1], [$2])dnl
+ if $2; then
+   $1_TRUE=
+   $1_FALSE='#'
+@@ -8921,63 +975,63 @@ else
+   $1_FALSE=
+ fi
+ AC_CONFIG_COMMANDS_PRE(
+ [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+   AC_MSG_ERROR([[conditional "$1" was never defined.
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+ 
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+-# Free Software Foundation, Inc.
++# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 10
+ 
+-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
++# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+ # written in clear, in which case automake, when reading aclocal.m4,
+ # will think it sees a *use*, and therefore will trigger all it's
+ # C support machinery.  Also note that it means that autoscan, seeing
+ # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+ 
+ 
+ # _AM_DEPENDENCIES(NAME)
+ # ----------------------
+ # See how the compiler implements dependency checking.
+-# NAME is "CC", "CXX", "GCJ", or "OBJC".
++# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+ # We try a few techniques and use that to set a single cache variable.
+ #
+ # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+ # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+ # dependency, and given that the user is not expected to run this macro,
+ # just rely on AC_PROG_CC.
+ AC_DEFUN([_AM_DEPENDENCIES],
+ [AC_REQUIRE([AM_SET_DEPDIR])dnl
+ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+ AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+ AC_REQUIRE([AM_DEP_TRACK])dnl
+ 
+-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+-                   [depcc="$$1"   am_compiler_list=])
++m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
++      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
++      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
++      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
++      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
++      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
++                    [depcc="$$1"   am_compiler_list=])
+ 
+ AC_CACHE_CHECK([dependency style of $depcc],
+                [am_cv_$1_dependencies_compiler_type],
+ [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+-  # making a dummy file named `D' -- because `-MD' means `put the output
+-  # in D'.
++  # making a dummy file named 'D' -- because '-MD' means "put the output
++  # in D".
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -9006,44 +1060,44 @@ AC_CACHE_CHECK([dependency style of $dep
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+-      # Solaris 8's {/usr,}/bin/sh.
+-      touch sub/conftst$i.h
++      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
++      # Solaris 10 /bin/sh.
++      echo '/* dummy */' > sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
++    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+-    # handle `-M -o', and we need to detect this.  Also, some Intel
+-    # versions had trouble with output in subdirs
++    # handle '-M -o', and we need to detect this.  Also, some Intel
++    # versions had trouble with output in subdirs.
+     am__obj=sub/conftest.${OBJEXT-o}
+     am__minus_obj="-o $am__obj"
+     case $depmode in
+     gcc)
+       # This depmode causes a compiler race in universal mode.
+       test "$am__universal" = false || continue
+       ;;
+     nosideeffect)
+-      # after this tag, mechanisms are not by side-effect, so they'll
+-      # only be used when explicitly requested
++      # After this tag, mechanisms are not by side-effect, so they'll
++      # only be used when explicitly requested.
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
+-      # This compiler won't grok `-c -o', but also, the minuso test has
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
++      # This compiler won't grok '-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+     if depmode=$depmode \
+@@ -9081,93 +1135,96 @@ AM_CONDITIONAL([am__fastdep$1], [
+   test "x$enable_dependency_tracking" != xno \
+   && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+ ])
+ 
+ 
+ # AM_SET_DEPDIR
+ # -------------
+ # Choose a directory name for dependency files.
+-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
++# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+ AC_DEFUN([AM_SET_DEPDIR],
+ [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+ ])
+ 
+ 
+ # AM_DEP_TRACK
+ # ------------
+ AC_DEFUN([AM_DEP_TRACK],
+-[AC_ARG_ENABLE(dependency-tracking,
+-[  --disable-dependency-tracking  speeds up one-time build
+-  --enable-dependency-tracking   do not reject slow dependency extractors])
++[AC_ARG_ENABLE([dependency-tracking], [dnl
++AS_HELP_STRING(
++  [--enable-dependency-tracking],
++  [do not reject slow dependency extractors])
++AS_HELP_STRING(
++  [--disable-dependency-tracking],
++  [speeds up one-time build])])
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
++  am__nodep='_no'
+ fi
+ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+ AC_SUBST([AMDEPBACKSLASH])dnl
+ _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
++AC_SUBST([am__nodep])dnl
++_AM_SUBST_NOTMAKE([am__nodep])dnl
+ ])
+ 
+ # Generate code to set up dependency tracking.              -*- Autoconf -*-
+ 
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+-# Free Software Foundation, Inc.
++# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-#serial 5
+ 
+ # _AM_OUTPUT_DEPENDENCY_COMMANDS
+ # ------------------------------
+ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [{
+-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
++  # Older Autoconf quotes --file arguments for eval, but not when files
+   # are listed without --file.  Let's play safe and only enable the eval
+   # if we detect the quoting.
+   case $CONFIG_FILES in
+   *\'*) eval set x "$CONFIG_FILES" ;;
+   *)   set x $CONFIG_FILES ;;
+   esac
+   shift
+   for mf
+   do
+     # Strip MF so we end up with the name of the file.
+     mf=`echo "$mf" | sed -e 's/:.*$//'`
+     # Check whether this is an Automake generated Makefile or not.
+-    # We used to match only the files named `Makefile.in', but
++    # We used to match only the files named 'Makefile.in', but
+     # some people rename them; so instead we look at the file content.
+     # Grep'ing the first line is not enough: some people post-process
+     # each Makefile.in and add a new line on top of each file to say so.
+     # Grep'ing the whole file is not good either: AIX grep has a line
+     # limit of 2048, but all sed's we know have understand at least 4000.
+     if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+       dirpart=`AS_DIRNAME("$mf")`
+     else
+       continue
+     fi
+     # Extract the definition of DEPDIR, am__include, and am__quote
+-    # from the Makefile without running `make'.
++    # from the Makefile without running 'make'.
+     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+     test -z "$DEPDIR" && continue
+     am__include=`sed -n 's/^am__include = //p' < "$mf"`
+-    test -z "am__include" && continue
++    test -z "$am__include" && continue
+     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+-    # When using ansi2knr, U may be empty or an underscore; expand it
+-    U=`sed -n 's/^U = //p' < "$mf"`
+     # Find all dependency output files, they are included files with
+     # $(DEPDIR) in their names.  We invoke sed twice because it is the
+     # simplest approach to changing $(DEPDIR) to its actual value in the
+     # expansion.
+     for file in `sed -n "
+       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
++	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+       # Make sure the directory exists.
+       test -f "$dirpart/$file" && continue
+       fdir=`AS_DIRNAME(["$file"])`
+       AS_MKDIR_P([$dirpart/$fdir])
+       # echo "creating $dirpart/$file"
+       echo '# dummy' > "$dirpart/$file"
+     done
+   done
+@@ -9175,51 +1232,48 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS
+ ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+ 
+ 
+ # AM_OUTPUT_DEPENDENCY_COMMANDS
+ # -----------------------------
+ # This macro should only be invoked once -- use via AC_REQUIRE.
+ #
+ # This code is only required when automatic dependency tracking
+-# is enabled.  FIXME.  This creates each `.P' file that we will
++# is enabled.  FIXME.  This creates each '.P' file that we will
+ # need in order to bootstrap the dependency handling code.
+ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AC_CONFIG_COMMANDS([depfiles],
+      [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+ ])
+ 
+ # Do all the work for Automake.                             -*- Autoconf -*-
+ 
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
++# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 16
+-
+ # This macro actually does too much.  Some checks are only needed if
+ # your package does certain things.  But this isn't really a big deal.
+ 
+ # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+ # AM_INIT_AUTOMAKE([OPTIONS])
+ # -----------------------------------------------
+ # The call with PACKAGE and VERSION arguments is the old style
+ # call (pre autoconf-2.50), which is being phased out.  PACKAGE
+ # and VERSION should now be passed to AC_INIT and removed from
+ # the call to AM_INIT_AUTOMAKE.
+ # We support both call styles for the transition.  After
+ # the next Automake release, Autoconf can make the AC_INIT
+ # arguments mandatory, and then we can depend on a new Autoconf
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+-[AC_PREREQ([2.62])dnl
++[AC_PREREQ([2.65])dnl
+ dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+ AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ if test "`cd $srcdir && pwd`" != "`pwd`"; then
+   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+   # is not polluted with repeated "-I."
+@@ -9238,73 +1292,86 @@ if test -z "$CYGPATH_W"; then
+     CYGPATH_W=echo
+   fi
+ fi
+ AC_SUBST([CYGPATH_W])
+ 
+ # Define the identity of the package.
+ dnl Distinguish between old-style and new-style calls.
+ m4_ifval([$2],
+-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
++[AC_DIAGNOSE([obsolete],
++             [$0: two- and three-arguments forms are deprecated.])
++m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+  AC_SUBST([PACKAGE], [$1])dnl
+  AC_SUBST([VERSION], [$2])],
+ [_AM_SET_OPTIONS([$1])dnl
+ dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
++m4_if(
++  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
++  [ok:ok],,
+   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+ 
+ _AM_IF_OPTION([no-define],,
+-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
++[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
++ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+ 
+ # Some tools Automake needs.
+ AC_REQUIRE([AM_SANITY_CHECK])dnl
+ AC_REQUIRE([AC_ARG_PROGRAM])dnl
+-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+-AM_MISSING_PROG(AUTOCONF, autoconf)
+-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+-AM_MISSING_PROG(AUTOHEADER, autoheader)
+-AM_MISSING_PROG(MAKEINFO, makeinfo)
++AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
++AM_MISSING_PROG([AUTOCONF], [autoconf])
++AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
++AM_MISSING_PROG([AUTOHEADER], [autoheader])
++AM_MISSING_PROG([MAKEINFO], [makeinfo])
+ AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
++AC_REQUIRE([AC_PROG_MKDIR_P])dnl
++# For better backward compatibility.  To be removed once Automake 1.9.x
++# dies out for good.  For more background, see:
++# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
++# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
++AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+ AC_REQUIRE([AC_PROG_AWK])dnl
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ 	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ 			     [_AM_PROG_TAR([v7])])])
+ _AM_IF_OPTION([no-dependencies],,
+ [AC_PROVIDE_IFELSE([AC_PROG_CC],
+-		  [_AM_DEPENDENCIES(CC)],
+-		  [define([AC_PROG_CC],
+-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
++		  [_AM_DEPENDENCIES([CC])],
++		  [m4_define([AC_PROG_CC],
++			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+-		  [_AM_DEPENDENCIES(CXX)],
+-		  [define([AC_PROG_CXX],
+-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
++		  [_AM_DEPENDENCIES([CXX])],
++		  [m4_define([AC_PROG_CXX],
++			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+-		  [_AM_DEPENDENCIES(OBJC)],
+-		  [define([AC_PROG_OBJC],
+-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
++		  [_AM_DEPENDENCIES([OBJC])],
++		  [m4_define([AC_PROG_OBJC],
++			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
++AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
++		  [_AM_DEPENDENCIES([OBJCXX])],
++		  [m4_define([AC_PROG_OBJCXX],
++			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+ ])
+-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
++AC_REQUIRE([AM_SILENT_RULES])dnl
++dnl The testsuite driver may need to know about EXEEXT, so add the
++dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
++dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+ AC_CONFIG_COMMANDS_PRE(dnl
+ [m4_provide_if([_AM_COMPILER_EXEEXT],
+   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+ ])
+ 
+-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
++dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+ dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+ dnl mangled by Autoconf and run in a shell conditional statement.
+ m4_define([_AC_COMPILER_EXEEXT],
+ m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+ 
+ 
+ # When config.status generates a header, we must update the stamp-h file.
+ # This file resides in the same directory as the config header
+@@ -9322,17 +1389,17 @@ for _am_header in $config_headers :; do
+     $_am_arg | $_am_arg:* )
+       break ;;
+     * )
+       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+   esac
+ done
+ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+ 
+-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
+@@ -9341,89 +1408,81 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
+ if test x"${install_sh}" != xset; then
+   case $am_aux_dir in
+   *\ * | *\	*)
+     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+   *)
+     install_sh="\${SHELL} $am_aux_dir/install-sh"
+   esac
+ fi
+-AC_SUBST(install_sh)])
++AC_SUBST([install_sh])])
+ 
+-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 2
+-
+ # Check whether the underlying file-system supports filenames
+ # with a leading dot.  For instance MS-DOS doesn't.
+ AC_DEFUN([AM_SET_LEADING_DOT],
+ [rm -rf .tst 2>/dev/null
+ mkdir .tst 2>/dev/null
+ if test -d .tst; then
+   am__leading_dot=.
+ else
+   am__leading_dot=_
+ fi
+ rmdir .tst 2>/dev/null
+ AC_SUBST([am__leading_dot])])
+ 
+ # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+ # From Jim Meyering
+ 
+-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+-# Free Software Foundation, Inc.
++# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 5
+-
+ # AM_MAINTAINER_MODE([DEFAULT-MODE])
+ # ----------------------------------
+ # Control maintainer-specific portions of Makefiles.
+-# Default is to disable them, unless `enable' is passed literally.
+-# For symmetry, `disable' may be passed as well.  Anyway, the user
++# Default is to disable them, unless 'enable' is passed literally.
++# For symmetry, 'disable' may be passed as well.  Anyway, the user
+ # can override the default with the --enable/--disable switch.
+ AC_DEFUN([AM_MAINTAINER_MODE],
+ [m4_case(m4_default([$1], [disable]),
+        [enable], [m4_define([am_maintainer_other], [disable])],
+        [disable], [m4_define([am_maintainer_other], [enable])],
+        [m4_define([am_maintainer_other], [enable])
+         m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+-AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
++AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+   dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+   AC_ARG_ENABLE([maintainer-mode],
+-[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
+-			  (and sometimes confusing) to the casual installer],
+-      [USE_MAINTAINER_MODE=$enableval],
+-      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
++    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
++      am_maintainer_other[ make rules and dependencies not useful
++      (and sometimes confusing) to the casual installer])],
++    [USE_MAINTAINER_MODE=$enableval],
++    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+   AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+   MAINT=$MAINTAINER_MODE_TRUE
+   AC_SUBST([MAINT])dnl
+ ]
+ )
+ 
+-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+-
+ # Check to see how 'make' treats includes.	            -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
++# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 4
+-
+ # AM_MAKE_INCLUDE()
+ # -----------------
+ # Check to see how make treats includes.
+ AC_DEFUN([AM_MAKE_INCLUDE],
+ [am_make=${MAKE-make}
+ cat > confinc << 'END'
+ am__doit:
+ 	@echo this is the am__doit target
+@@ -9431,17 +1490,17 @@ am__doit:
+ END
+ # If we don't find an include directive, just comment out the code.
+ AC_MSG_CHECKING([for style of include used by $am_make])
+ am__include="#"
+ am__quote=
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+-# Ignore all kinds of additional output from `make'.
++# Ignore all kinds of additional output from 'make'.
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+   am__include=include
+   am__quote=
+   _am_result=GNU
+   ;;
+ esac
+ # Now try BSD make style include.
+@@ -9456,25 +1515,22 @@ if test "$am__include" = "#"; then
+    esac
+ fi
+ AC_SUBST([am__include])
+ AC_SUBST([am__quote])
+ AC_MSG_RESULT([$_am_result])
+ rm -f confinc confmf
+ ])
+ 
+-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+-# Free Software Foundation, Inc.
++# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 6
+-
+ # AM_PROG_CC_C_O
+ # --------------
+ # Like AC_PROG_CC_C_O, but changed for automake.
+ AC_DEFUN([AM_PROG_CC_C_O],
+ [AC_REQUIRE([AC_PROG_CC_C_O])dnl
+ AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ AC_REQUIRE_AUX_FILE([compile])dnl
+ # FIXME: we rely on the cache variable name because
+@@ -9493,317 +1549,413 @@ fi
+ dnl Make sure AC_PROG_CC is never called again, or it will override our
+ dnl setting of CC.
+ m4_define([AC_PROG_CC],
+           [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+ ])
+ 
+ # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+ 
+-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+-# Free Software Foundation, Inc.
++# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 6
+-
+ # AM_MISSING_PROG(NAME, PROGRAM)
+ # ------------------------------
+ AC_DEFUN([AM_MISSING_PROG],
+ [AC_REQUIRE([AM_MISSING_HAS_RUN])
+ $1=${$1-"${am_missing_run}$2"}
+ AC_SUBST($1)])
+ 
+-
+ # AM_MISSING_HAS_RUN
+ # ------------------
+-# Define MISSING if not defined so far and test if it supports --run.
+-# If it does, set am_missing_run to use it, otherwise, to nothing.
++# Define MISSING if not defined so far and test if it is modern enough.
++# If it is, set am_missing_run to use it, otherwise, to nothing.
+ AC_DEFUN([AM_MISSING_HAS_RUN],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ AC_REQUIRE_AUX_FILE([missing])dnl
+ if test x"${MISSING+set}" != xset; then
+   case $am_aux_dir in
+   *\ * | *\	*)
+     MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+   *)
+     MISSING="\${SHELL} $am_aux_dir/missing" ;;
+   esac
+ fi
+ # Use eval to expand $SHELL
+-if eval "$MISSING --run true"; then
+-  am_missing_run="$MISSING --run "
++if eval "$MISSING --is-lightweight"; then
++  am_missing_run="$MISSING "
+ else
+   am_missing_run=
+-  AC_MSG_WARN([`missing' script is too old or missing])
++  AC_MSG_WARN(['missing' script is too old or missing])
+ fi
+ ])
+ 
+-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
++# Helper functions for option handling.                     -*- Autoconf -*-
++
++# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# AM_PROG_MKDIR_P
+-# ---------------
+-# Check for `mkdir -p'.
+-AC_DEFUN([AM_PROG_MKDIR_P],
+-[AC_PREREQ([2.60])dnl
+-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+-dnl while keeping a definition of mkdir_p for backward compatibility.
+-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+-dnl Makefile.ins that do not define MKDIR_P, so we do our own
+-dnl adjustment using top_builddir (which is defined more often than
+-dnl MKDIR_P).
+-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+-case $mkdir_p in
+-  [[\\/$]]* | ?:[[\\/]]*) ;;
+-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+-esac
+-])
+-
+-# Helper functions for option handling.                     -*- Autoconf -*-
+-
+-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+-# serial 4
+-
+ # _AM_MANGLE_OPTION(NAME)
+ # -----------------------
+ AC_DEFUN([_AM_MANGLE_OPTION],
+ [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+ 
+ # _AM_SET_OPTION(NAME)
+-# ------------------------------
++# --------------------
+ # Set option NAME.  Presently that only means defining a flag for this option.
+ AC_DEFUN([_AM_SET_OPTION],
+-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
++[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+ 
+ # _AM_SET_OPTIONS(OPTIONS)
+-# ----------------------------------
++# ------------------------
+ # OPTIONS is a space-separated list of Automake options.
+ AC_DEFUN([_AM_SET_OPTIONS],
+ [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+ 
+ # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+ # -------------------------------------------
+ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+ 
+ # Check to make sure that the build environment is sane.    -*- Autoconf -*-
+ 
+-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+-# Free Software Foundation, Inc.
++# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 5
+-
+ # AM_SANITY_CHECK
+ # ---------------
+ AC_DEFUN([AM_SANITY_CHECK],
+ [AC_MSG_CHECKING([whether build environment is sane])
+-# Just in case
+-sleep 1
+-echo timestamp > conftest.file
+ # Reject unsafe characters in $srcdir or the absolute working directory
+ # name.  Accept space and tab only in the latter.
+ am_lf='
+ '
+ case `pwd` in
+   *[[\\\"\#\$\&\'\`$am_lf]]*)
+     AC_MSG_ERROR([unsafe absolute working directory name]);;
+ esac
+ case $srcdir in
+   *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
++    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+ esac
+ 
+-# Do `set' in a subshell so we don't clobber the current shell's
++# Do 'set' in a subshell so we don't clobber the current shell's
+ # arguments.  Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+-   if test "$[*]" = "X"; then
+-      # -L didn't work.
+-      set X `ls -t "$srcdir/configure" conftest.file`
+-   fi
+-   rm -f conftest.file
+-   if test "$[*]" != "X $srcdir/configure conftest.file" \
+-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
++   am_has_slept=no
++   for am_try in 1 2; do
++     echo "timestamp, slept: $am_has_slept" > conftest.file
++     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
++     if test "$[*]" = "X"; then
++	# -L didn't work.
++	set X `ls -t "$srcdir/configure" conftest.file`
++     fi
++     if test "$[*]" != "X $srcdir/configure conftest.file" \
++	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
+ 
+-      # If neither matched, then we have a broken ls.  This can happen
+-      # if, for instance, CONFIG_SHELL is bash and it inherits a
+-      # broken ls alias from the environment.  This has actually
+-      # happened.  Such a system could not be considered "sane".
+-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+-alias in your environment])
+-   fi
+-
++	# If neither matched, then we have a broken ls.  This can happen
++	# if, for instance, CONFIG_SHELL is bash and it inherits a
++	# broken ls alias from the environment.  This has actually
++	# happened.  Such a system could not be considered "sane".
++	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
++  alias in your environment])
++     fi
++     if test "$[2]" = conftest.file || test $am_try -eq 2; then
++       break
++     fi
++     # Just in case.
++     sleep 1
++     am_has_slept=yes
++   done
+    test "$[2]" = conftest.file
+    )
+ then
+    # Ok.
+    :
+ else
+    AC_MSG_ERROR([newly created file is older than distributed files!
+ Check your system clock])
+ fi
+-AC_MSG_RESULT(yes)])
++AC_MSG_RESULT([yes])
++# If we didn't sleep, we still need to ensure time stamps of config.status and
++# generated files are strictly newer.
++am_sleep_pid=
++if grep 'slept: no' conftest.file >/dev/null 2>&1; then
++  ( sleep 1 ) &
++  am_sleep_pid=$!
++fi
++AC_CONFIG_COMMANDS_PRE(
++  [AC_MSG_CHECKING([that generated files are newer than configure])
++   if test -n "$am_sleep_pid"; then
++     # Hide warnings about reused PIDs.
++     wait $am_sleep_pid 2>/dev/null
++   fi
++   AC_MSG_RESULT([done])])
++rm -f conftest.file
++])
+ 
+-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2009-2013 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# AM_SILENT_RULES([DEFAULT])
++# --------------------------
++# Enable less verbose build rules; with the default set to DEFAULT
++# ("yes" being less verbose, "no" or empty being verbose).
++AC_DEFUN([AM_SILENT_RULES],
++[AC_ARG_ENABLE([silent-rules], [dnl
++AS_HELP_STRING(
++  [--enable-silent-rules],
++  [less verbose build output (undo: "make V=1")])
++AS_HELP_STRING(
++  [--disable-silent-rules],
++  [verbose build output (undo: "make V=0")])dnl
++])
++case $enable_silent_rules in @%:@ (((
++  yes) AM_DEFAULT_VERBOSITY=0;;
++   no) AM_DEFAULT_VERBOSITY=1;;
++    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
++esac
++dnl
++dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
++dnl do not support nested variable expansions.
++dnl See automake bug#9928 and bug#10237.
++am_make=${MAKE-make}
++AC_CACHE_CHECK([whether $am_make supports nested variables],
++   [am_cv_make_support_nested_variables],
++   [if AS_ECHO([['TRUE=$(BAR$(V))
++BAR0=false
++BAR1=true
++V=1
++am__doit:
++	@$(TRUE)
++.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
++  am_cv_make_support_nested_variables=yes
++else
++  am_cv_make_support_nested_variables=no
++fi])
++if test $am_cv_make_support_nested_variables = yes; then
++  dnl Using '$V' instead of '$(V)' breaks IRIX make.
++  AM_V='$(V)'
++  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
++else
++  AM_V=$AM_DEFAULT_VERBOSITY
++  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
++fi
++AC_SUBST([AM_V])dnl
++AM_SUBST_NOTMAKE([AM_V])dnl
++AC_SUBST([AM_DEFAULT_V])dnl
++AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
++AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
++AM_BACKSLASH='\'
++AC_SUBST([AM_BACKSLASH])dnl
++_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
++])
++
++# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # AM_PROG_INSTALL_STRIP
+ # ---------------------
+-# One issue with vendor `install' (even GNU) is that you can't
++# One issue with vendor 'install' (even GNU) is that you can't
+ # specify the program used to strip binaries.  This is especially
+ # annoying in cross-compiling environments, where the build's strip
+ # is unlikely to handle the host's binaries.
+ # Fortunately install-sh will honor a STRIPPROG variable, so we
+-# always use install-sh in `make install-strip', and initialize
++# always use install-sh in "make install-strip", and initialize
+ # STRIPPROG with the value of the STRIP variable (set by the user).
+ AC_DEFUN([AM_PROG_INSTALL_STRIP],
+ [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+-# Installed binaries are usually stripped using `strip' when the user
+-# run `make install-strip'.  However `strip' might not be the right
++# Installed binaries are usually stripped using 'strip' when the user
++# run "make install-strip".  However 'strip' might not be the right
+ # tool to use in cross-compilation environments, therefore Automake
+-# will honor the `STRIP' environment variable to overrule this program.
+-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
++# will honor the 'STRIP' environment variable to overrule this program.
++dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+ if test "$cross_compiling" != no; then
+   AC_CHECK_TOOL([STRIP], [strip], :)
+ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+ 
+-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 2
+-
+ # _AM_SUBST_NOTMAKE(VARIABLE)
+ # ---------------------------
+ # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+ # This macro is traced by Automake.
+ AC_DEFUN([_AM_SUBST_NOTMAKE])
+ 
+ # AM_SUBST_NOTMAKE(VARIABLE)
+-# ---------------------------
++# --------------------------
+ # Public sister of _AM_SUBST_NOTMAKE.
+ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+ 
+ # Check how to create a tarball.                            -*- Autoconf -*-
+ 
+-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 2
+-
+ # _AM_PROG_TAR(FORMAT)
+ # --------------------
+ # Check how to create a tarball in format FORMAT.
+-# FORMAT should be one of `v7', `ustar', or `pax'.
++# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+ #
+ # Substitute a variable $(am__tar) that is a command
+ # writing to stdout a FORMAT-tarball containing the directory
+ # $tardir.
+ #     tardir=directory && $(am__tar) > result.tar
+ #
+ # Substitute a variable $(am__untar) that extract such
+ # a tarball read from stdin.
+ #     $(am__untar) < result.tar
++#
+ AC_DEFUN([_AM_PROG_TAR],
+-[# Always define AMTAR for backward compatibility.
+-AM_MISSING_PROG([AMTAR], [tar])
++[# Always define AMTAR for backward compatibility.  Yes, it's still used
++# in the wild :-(  We should find a proper way to deprecate it ...
++AC_SUBST([AMTAR], ['$${TAR-tar}'])
++
++# We'll loop over all known methods to create a tar archive until one works.
++_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
++
+ m4_if([$1], [v7],
+-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+-     [m4_case([$1], [ustar],, [pax],,
+-              [m4_fatal([Unknown tar format])])
+-AC_MSG_CHECKING([how to create a $1 tar archive])
+-# Loop over all known methods to create a tar archive until one works.
+-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+-# Do not fold the above two line into one, because Tru64 sh and
+-# Solaris sh will not grok spaces in the rhs of `-'.
+-for _am_tool in $_am_tools
+-do
+-  case $_am_tool in
+-  gnutar)
+-    for _am_tar in tar gnutar gtar;
+-    do
+-      AM_RUN_LOG([$_am_tar --version]) && break
+-    done
+-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+-    am__untar="$_am_tar -xf -"
+-    ;;
+-  plaintar)
+-    # Must skip GNU tar: if it does not support --format= it doesn't create
+-    # ustar tarball either.
+-    (tar --version) >/dev/null 2>&1 && continue
+-    am__tar='tar chf - "$$tardir"'
+-    am__tar_='tar chf - "$tardir"'
+-    am__untar='tar xf -'
+-    ;;
+-  pax)
+-    am__tar='pax -L -x $1 -w "$$tardir"'
+-    am__tar_='pax -L -x $1 -w "$tardir"'
+-    am__untar='pax -r'
+-    ;;
+-  cpio)
+-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+-    am__untar='cpio -i -H $1 -d'
+-    ;;
+-  none)
+-    am__tar=false
+-    am__tar_=false
+-    am__untar=false
+-    ;;
+-  esac
++  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+ 
+-  # If the value was cached, stop now.  We just wanted to have am__tar
+-  # and am__untar set.
+-  test -n "${am_cv_prog_tar_$1}" && break
++  [m4_case([$1],
++    [ustar],
++     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
++      # There is notably a 21 bits limit for the UID and the GID.  In fact,
++      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
++      # and bug#13588).
++      am_max_uid=2097151 # 2^21 - 1
++      am_max_gid=$am_max_uid
++      # The $UID and $GID variables are not portable, so we need to resort
++      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
++      # below are definitely unexpected, so allow the users to see them
++      # (that is, avoid stderr redirection).
++      am_uid=`id -u || echo unknown`
++      am_gid=`id -g || echo unknown`
++      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
++      if test $am_uid -le $am_max_uid; then
++         AC_MSG_RESULT([yes])
++      else
++         AC_MSG_RESULT([no])
++         _am_tools=none
++      fi
++      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
++      if test $am_gid -le $am_max_gid; then
++         AC_MSG_RESULT([yes])
++      else
++        AC_MSG_RESULT([no])
++        _am_tools=none
++      fi],
+ 
+-  # tar/untar a dummy directory, and stop if the command works
++  [pax],
++    [],
++
++  [m4_fatal([Unknown tar format])])
++
++  AC_MSG_CHECKING([how to create a $1 tar archive])
++
++  # Go ahead even if we have the value already cached.  We do so because we
++  # need to set the values for the 'am__tar' and 'am__untar' variables.
++  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
++
++  for _am_tool in $_am_tools; do
++    case $_am_tool in
++    gnutar)
++      for _am_tar in tar gnutar gtar; do
++        AM_RUN_LOG([$_am_tar --version]) && break
++      done
++      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
++      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
++      am__untar="$_am_tar -xf -"
++      ;;
++    plaintar)
++      # Must skip GNU tar: if it does not support --format= it doesn't create
++      # ustar tarball either.
++      (tar --version) >/dev/null 2>&1 && continue
++      am__tar='tar chf - "$$tardir"'
++      am__tar_='tar chf - "$tardir"'
++      am__untar='tar xf -'
++      ;;
++    pax)
++      am__tar='pax -L -x $1 -w "$$tardir"'
++      am__tar_='pax -L -x $1 -w "$tardir"'
++      am__untar='pax -r'
++      ;;
++    cpio)
++      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
++      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
++      am__untar='cpio -i -H $1 -d'
++      ;;
++    none)
++      am__tar=false
++      am__tar_=false
++      am__untar=false
++      ;;
++    esac
++
++    # If the value was cached, stop now.  We just wanted to have am__tar
++    # and am__untar set.
++    test -n "${am_cv_prog_tar_$1}" && break
++
++    # tar/untar a dummy directory, and stop if the command works.
++    rm -rf conftest.dir
++    mkdir conftest.dir
++    echo GrepMe > conftest.dir/file
++    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
++    rm -rf conftest.dir
++    if test -s conftest.tar; then
++      AM_RUN_LOG([$am__untar <conftest.tar])
++      AM_RUN_LOG([cat conftest.dir/file])
++      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
++    fi
++  done
+   rm -rf conftest.dir
+-  mkdir conftest.dir
+-  echo GrepMe > conftest.dir/file
+-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+-  rm -rf conftest.dir
+-  if test -s conftest.tar; then
+-    AM_RUN_LOG([$am__untar <conftest.tar])
+-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+-  fi
+-done
+-rm -rf conftest.dir
+ 
+-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
++  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
++  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
++
+ AC_SUBST([am__tar])
+ AC_SUBST([am__untar])
+ ]) # _AM_PROG_TAR
+ 
++m4_include([m4/asmcfi.m4])
++m4_include([m4/ax_append_flag.m4])
++m4_include([m4/ax_cc_maxopt.m4])
++m4_include([m4/ax_cflags_warn_all.m4])
++m4_include([m4/ax_check_compile_flag.m4])
++m4_include([m4/ax_compiler_vendor.m4])
++m4_include([m4/ax_configure_args.m4])
++m4_include([m4/ax_enable_builddir.m4])
++m4_include([m4/ax_gcc_archflag.m4])
++m4_include([m4/ax_gcc_x86_cpuid.m4])
++m4_include([m4/libtool.m4])
++m4_include([m4/ltoptions.m4])
++m4_include([m4/ltsugar.m4])
++m4_include([m4/ltversion.m4])
++m4_include([m4/lt~obsolete.m4])
+ m4_include([acinclude.m4])
+diff --git a/js/src/ctypes/libffi/compile b/js/src/ctypes/libffi/compile
+--- a/js/src/ctypes/libffi/compile
++++ b/js/src/ctypes/libffi/compile
+@@ -1,78 +1,282 @@
+ #! /bin/sh
+-# Wrapper for compilers which do not understand `-c -o'.
++# Wrapper for compilers which do not understand '-c -o'.
+ 
+-scriptversion=2005-05-14.22
++scriptversion=2012-10-14.11; # UTC
+ 
+-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
++# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+ # Written by Tom Tromey <tromey@cygnus.com>.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ # This file is maintained in Automake, please report
+ # bugs to <bug-automake@gnu.org> or send patches to
+ # <automake-patches@gnu.org>.
+ 
++nl='
++'
++
++# We need space, tab and new line, in precisely that order.  Quoting is
++# there to prevent tools from complaining about whitespace usage.
++IFS=" ""	$nl"
++
++file_conv=
++
++# func_file_conv build_file lazy
++# Convert a $build file to $host form and store it in $file
++# Currently only supports Windows hosts. If the determined conversion
++# type is listed in (the comma separated) LAZY, no conversion will
++# take place.
++func_file_conv ()
++{
++  file=$1
++  case $file in
++    / | /[!/]*) # absolute file, and not a UNC file
++      if test -z "$file_conv"; then
++	# lazily determine how to convert abs files
++	case `uname -s` in
++	  MINGW*)
++	    file_conv=mingw
++	    ;;
++	  CYGWIN*)
++	    file_conv=cygwin
++	    ;;
++	  *)
++	    file_conv=wine
++	    ;;
++	esac
++      fi
++      case $file_conv/,$2, in
++	*,$file_conv,*)
++	  ;;
++	mingw/*)
++	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
++	  ;;
++	cygwin/*)
++	  file=`cygpath -m "$file" || echo "$file"`
++	  ;;
++	wine/*)
++	  file=`winepath -w "$file" || echo "$file"`
++	  ;;
++      esac
++      ;;
++  esac
++}
++
++# func_cl_dashL linkdir
++# Make cl look for libraries in LINKDIR
++func_cl_dashL ()
++{
++  func_file_conv "$1"
++  if test -z "$lib_path"; then
++    lib_path=$file
++  else
++    lib_path="$lib_path;$file"
++  fi
++  linker_opts="$linker_opts -LIBPATH:$file"
++}
++
++# func_cl_dashl library
++# Do a library search-path lookup for cl
++func_cl_dashl ()
++{
++  lib=$1
++  found=no
++  save_IFS=$IFS
++  IFS=';'
++  for dir in $lib_path $LIB
++  do
++    IFS=$save_IFS
++    if $shared && test -f "$dir/$lib.dll.lib"; then
++      found=yes
++      lib=$dir/$lib.dll.lib
++      break
++    fi
++    if test -f "$dir/$lib.lib"; then
++      found=yes
++      lib=$dir/$lib.lib
++      break
++    fi
++    if test -f "$dir/lib$lib.a"; then
++      found=yes
++      lib=$dir/lib$lib.a
++      break
++    fi
++  done
++  IFS=$save_IFS
++
++  if test "$found" != yes; then
++    lib=$lib.lib
++  fi
++}
++
++# func_cl_wrapper cl arg...
++# Adjust compile command to suit cl
++func_cl_wrapper ()
++{
++  # Assume a capable shell
++  lib_path=
++  shared=:
++  linker_opts=
++  for arg
++  do
++    if test -n "$eat"; then
++      eat=
++    else
++      case $1 in
++	-o)
++	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
++	  eat=1
++	  case $2 in
++	    *.o | *.[oO][bB][jJ])
++	      func_file_conv "$2"
++	      set x "$@" -Fo"$file"
++	      shift
++	      ;;
++	    *)
++	      func_file_conv "$2"
++	      set x "$@" -Fe"$file"
++	      shift
++	      ;;
++	  esac
++	  ;;
++	-I)
++	  eat=1
++	  func_file_conv "$2" mingw
++	  set x "$@" -I"$file"
++	  shift
++	  ;;
++	-I*)
++	  func_file_conv "${1#-I}" mingw
++	  set x "$@" -I"$file"
++	  shift
++	  ;;
++	-l)
++	  eat=1
++	  func_cl_dashl "$2"
++	  set x "$@" "$lib"
++	  shift
++	  ;;
++	-l*)
++	  func_cl_dashl "${1#-l}"
++	  set x "$@" "$lib"
++	  shift
++	  ;;
++	-L)
++	  eat=1
++	  func_cl_dashL "$2"
++	  ;;
++	-L*)
++	  func_cl_dashL "${1#-L}"
++	  ;;
++	-static)
++	  shared=false
++	  ;;
++	-Wl,*)
++	  arg=${1#-Wl,}
++	  save_ifs="$IFS"; IFS=','
++	  for flag in $arg; do
++	    IFS="$save_ifs"
++	    linker_opts="$linker_opts $flag"
++	  done
++	  IFS="$save_ifs"
++	  ;;
++	-Xlinker)
++	  eat=1
++	  linker_opts="$linker_opts $2"
++	  ;;
++	-*)
++	  set x "$@" "$1"
++	  shift
++	  ;;
++	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
++	  func_file_conv "$1"
++	  set x "$@" -Tp"$file"
++	  shift
++	  ;;
++	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
++	  func_file_conv "$1" mingw
++	  set x "$@" "$file"
++	  shift
++	  ;;
++	*)
++	  set x "$@" "$1"
++	  shift
++	  ;;
++      esac
++    fi
++    shift
++  done
++  if test -n "$linker_opts"; then
++    linker_opts="-link$linker_opts"
++  fi
++  exec "$@" $linker_opts
++  exit 1
++}
++
++eat=
++
+ case $1 in
+   '')
+-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
++     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+      exit 1;
+      ;;
+   -h | --h*)
+     cat <<\EOF
+ Usage: compile [--help] [--version] PROGRAM [ARGS]
+ 
+-Wrapper for compilers which do not understand `-c -o'.
+-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
++Wrapper for compilers which do not understand '-c -o'.
++Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+ arguments, and rename the output as expected.
+ 
+ If you are trying to build a whole package this is not the
+-right script to run: please start by reading the file `INSTALL'.
++right script to run: please start by reading the file 'INSTALL'.
+ 
+ Report bugs to <bug-automake@gnu.org>.
+ EOF
+     exit $?
+     ;;
+   -v | --v*)
+     echo "compile $scriptversion"
+     exit $?
+     ;;
++  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
++    func_cl_wrapper "$@"      # Doesn't return...
++    ;;
+ esac
+ 
+ ofile=
+ cfile=
+-eat=
+ 
+ for arg
+ do
+   if test -n "$eat"; then
+     eat=
+   else
+     case $1 in
+       -o)
+-	# configure might choose to run compile as `compile cc -o foo foo.c'.
+-	# So we strip `-o arg' only if arg is an object.
++	# configure might choose to run compile as 'compile cc -o foo foo.c'.
++	# So we strip '-o arg' only if arg is an object.
+ 	eat=1
+ 	case $2 in
+ 	  *.o | *.obj)
+ 	    ofile=$2
+ 	    ;;
+ 	  *)
+ 	    set x "$@" -o "$2"
+ 	    shift
+@@ -89,54 +293,55 @@ do
+ 	shift
+ 	;;
+     esac
+   fi
+   shift
+ done
+ 
+ if test -z "$ofile" || test -z "$cfile"; then
+-  # If no `-o' option was seen then we might have been invoked from a
++  # If no '-o' option was seen then we might have been invoked from a
+   # pattern rule where we don't need one.  That is ok -- this is a
+   # normal compilation that the losing compiler can handle.  If no
+-  # `.c' file was seen then we are probably linking.  That is also
++  # '.c' file was seen then we are probably linking.  That is also
+   # ok.
+   exec "$@"
+ fi
+ 
+ # Name of file we expect compiler to create.
+-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
++cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+ 
+ # Create the lock directory.
+-# Note: use `[/.-]' here to ensure that we don't use the same name
++# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+ # that we are using for the .o file.  Also, base the name on the expected
+ # object file name, since that is what matters with a parallel build.
+-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
++lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+ while true; do
+   if mkdir "$lockdir" >/dev/null 2>&1; then
+     break
+   fi
+   sleep 1
+ done
+ # FIXME: race condition here if user kills between mkdir and trap.
+ trap "rmdir '$lockdir'; exit 1" 1 2 15
+ 
+ # Run the compile.
+ "$@"
+ ret=$?
+ 
+ if test -f "$cofile"; then
+-  mv "$cofile" "$ofile"
++  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+ elif test -f "${cofile}bj"; then
+-  mv "${cofile}bj" "$ofile"
++  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+ fi
+ 
+ rmdir "$lockdir"
+ exit $ret
+ 
+ # Local Variables:
+ # mode: shell-script
+ # sh-indentation: 2
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff --git a/js/src/ctypes/libffi/config.guess b/js/src/ctypes/libffi/config.guess
+--- a/js/src/ctypes/libffi/config.guess
++++ b/js/src/ctypes/libffi/config.guess
+@@ -1,47 +1,43 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+ #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+-#   Free Software Foundation, Inc.
++#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
++#   2011, 2012, 2013 Free Software Foundation, Inc.
+ 
+-timestamp='2009-11-19'
++timestamp='2012-12-29'
+ 
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful, but
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ # General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-
+-# Originally written by Per Bothner.  Please send patches (context
+-# diff format) to <config-patches@gnu.org> and include a ChangeLog
+-# entry.
++# the same distribution terms that you use for the rest of that
++# program.  This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+ #
+-# This script attempts to guess a canonical system name similar to
+-# config.sub.  If it succeeds, it prints the system name on stdout, and
+-# exits with 0.  Otherwise, it exits with 1.
++# Originally written by Per Bothner. 
+ #
+ # You can get the latest version of this script from:
+ # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++#
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
++
+ 
+ me=`echo "$0" | sed -e 's,.*/,,'`
+ 
+ usage="\
+ Usage: $0 [OPTION]
+ 
+ Output the configuration name of the system \`$me' is run on.
+ 
+@@ -51,18 +47,19 @@ Operation modes:
+   -v, --version      print version number, then exit
+ 
+ Report bugs and patches to <config-patches@gnu.org>."
+ 
+ version="\
+ GNU config.guess ($timestamp)
+ 
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
++2012, 2013 Free Software Foundation, Inc.
+ 
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ 
+ help="
+ Try \`$me --help' for more information."
+ 
+ # Parse command line
+@@ -139,17 +136,17 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` |
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+ 
+ # Note: order is significant - the case branches are not exclusive.
+ 
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+     *:NetBSD:*:*)
+ 	# NetBSD (nbsd) targets should (where applicable) match one or
+-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
++	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+ 	# switched to ELF, *-*-netbsd* would select the old
+ 	# object file format.  This provides both forward
+ 	# compatibility and a consistent mechanism for selecting the
+ 	# object file format.
+ 	#
+ 	# Note: NetBSD doesn't particularly care about the vendor
+ 	# portion of the name.  We always set it to "unknown".
+@@ -175,17 +172,17 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+ 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ 		    # Return netbsd for either.  FIX?
+ 		    os=netbsd
+ 		else
+ 		    os=netbsdelf
+ 		fi
+ 		;;
+ 	    *)
+-	        os=netbsd
++		os=netbsd
+ 		;;
+ 	esac
+ 	# The OS release
+ 	# Debian GNU/NetBSD machines have a different userland, and
+ 	# thus, need a distinct triplet. However, they do not need
+ 	# kernel version information, so it can be replaced with a
+ 	# suitable tag, in the style of linux-gnu.
+ 	case "${UNAME_VERSION}" in
+@@ -196,16 +193,20 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+ 		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ 		;;
+ 	esac
+ 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ 	# contains redundant information, the shorter form:
+ 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ 	echo "${machine}-${os}${release}"
+ 	exit ;;
++    *:Bitrig:*:*)
++	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
++	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
++	exit ;;
+     *:OpenBSD:*:*)
+ 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ 	exit ;;
+     *:ekkoBSD:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ 	exit ;;
+     *:SolidBSD:*:*)
+@@ -218,17 +219,17 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+ 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ 	exit ;;
+     alpha:OSF1:*:*)
+ 	case $UNAME_RELEASE in
+ 	*4.0)
+ 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ 		;;
+ 	*5.*)
+-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
++		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ 		;;
+ 	esac
+ 	# According to Compaq, /usr/sbin/psrinfo has been available on
+ 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+ 	# covers most systems running today.  This code pipes the CPU
+ 	# types through head -n 1, so we only detect the type of CPU 0.
+ 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ 	case "$ALPHA_CPU_TYPE" in
+@@ -264,17 +265,20 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+ 		UNAME_MACHINE="alphaev79" ;;
+ 	esac
+ 	# A Pn.n version is a patched version.
+ 	# A Vn.n version is a released version.
+ 	# A Tn.n version is a released field test version.
+ 	# A Xn.n version is an unreleased experimental baselevel.
+ 	# 1.2 uses "1.2" for uname -r.
+ 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+-	exit ;;
++	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
++	exitcode=$?
++	trap '' 0
++	exit $exitcode ;;
+     Alpha\ *:Windows_NT*:*)
+ 	# How do we know it's Interix rather than the generic POSIX subsystem?
+ 	# Should we change UNAME_MACHINE based on the output of uname instead
+ 	# of the specific Alpha model?
+ 	echo alpha-pc-interix
+ 	exit ;;
+     21064:Windows_NT:50:3)
+ 	echo alpha-dec-winnt3.5
+@@ -290,22 +294,22 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+ 	exit ;;
+     *:OS/390:*:*)
+ 	echo i370-ibm-openedition
+ 	exit ;;
+     *:z/VM:*:*)
+ 	echo s390-ibm-zvmoe
+ 	exit ;;
+     *:OS400:*:*)
+-        echo powerpc-ibm-os400
++	echo powerpc-ibm-os400
+ 	exit ;;
+     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ 	echo arm-acorn-riscix${UNAME_RELEASE}
+ 	exit ;;
+-    arm:riscos:*:*|arm:RISCOS:*:*)
++    arm*:riscos:*:*|arm*:RISCOS:*:*)
+ 	echo arm-unknown-riscos
+ 	exit ;;
+     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ 	echo hppa1.1-hitachi-hiuxmpp
+ 	exit ;;
+     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+@@ -328,16 +332,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+ 	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     sun4H:SunOS:5.*:*)
+ 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
+     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 	exit ;;
++    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
++	echo i386-pc-auroraux${UNAME_RELEASE}
++	exit ;;
+     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ 	eval $set_cc_for_build
+ 	SUN_ARCH="i386"
+ 	# If there is a compiler, see if it is configured for 64-bit objects.
+ 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ 	# This test works for both compilers.
+ 	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+@@ -386,33 +393,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+     # can be virtually everything (everything which is not
+     # "atarist" or "atariste" at least should have a processor
+     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+     # to the lowercase version "mint" (or "freemint").  Finally
+     # the system name "TOS" denotes a system which is actually not
+     # MiNT.  But MiNT is downward compatible to TOS, so this should
+     # be no problem.
+     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+-        echo m68k-atari-mint${UNAME_RELEASE}
++	echo m68k-atari-mint${UNAME_RELEASE}
+ 	exit ;;
+     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ 	echo m68k-atari-mint${UNAME_RELEASE}
+-        exit ;;
++	exit ;;
+     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+-        echo m68k-atari-mint${UNAME_RELEASE}
++	echo m68k-atari-mint${UNAME_RELEASE}
+ 	exit ;;
+     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+-        echo m68k-milan-mint${UNAME_RELEASE}
+-        exit ;;
++	echo m68k-milan-mint${UNAME_RELEASE}
++	exit ;;
+     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+-        echo m68k-hades-mint${UNAME_RELEASE}
+-        exit ;;
++	echo m68k-hades-mint${UNAME_RELEASE}
++	exit ;;
+     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+-        echo m68k-unknown-mint${UNAME_RELEASE}
+-        exit ;;
++	echo m68k-unknown-mint${UNAME_RELEASE}
++	exit ;;
+     m68k:machten:*:*)
+ 	echo m68k-apple-machten${UNAME_RELEASE}
+ 	exit ;;
+     powerpc:machten:*:*)
+ 	echo powerpc-apple-machten${UNAME_RELEASE}
+ 	exit ;;
+     RISC*:Mach:*:*)
+ 	echo mips-dec-mach_bsd4.3
+@@ -472,31 +479,31 @@ EOF
+ 	exit ;;
+     m88k:*:4*:R4*)
+ 	echo m88k-motorola-sysv4
+ 	exit ;;
+     m88k:*:3*:R3*)
+ 	echo m88k-motorola-sysv3
+ 	exit ;;
+     AViiON:dgux:*:*)
+-        # DG/UX returns AViiON for all architectures
+-        UNAME_PROCESSOR=`/usr/bin/uname -p`
++	# DG/UX returns AViiON for all architectures
++	UNAME_PROCESSOR=`/usr/bin/uname -p`
+ 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ 	then
+ 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ 	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+ 	    then
+ 		echo m88k-dg-dgux${UNAME_RELEASE}
+ 	    else
+ 		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ 	    fi
+ 	else
+ 	    echo i586-dg-dgux${UNAME_RELEASE}
+ 	fi
+- 	exit ;;
++	exit ;;
+     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+ 	echo m88k-dolphin-sysv3
+ 	exit ;;
+     M88*:*:R3*:*)
+ 	# Delta 88k system running SVR3
+ 	echo m88k-motorola-sysv3
+ 	exit ;;
+     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+@@ -543,17 +550,17 @@ EOF
+ 			echo rs6000-ibm-aix3.2.5
+ 		fi
+ 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ 		echo rs6000-ibm-aix3.2.4
+ 	else
+ 		echo rs6000-ibm-aix3.2
+ 	fi
+ 	exit ;;
+-    *:AIX:*:[456])
++    *:AIX:*:[4567])
+ 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ 		IBM_ARCH=rs6000
+ 	else
+ 		IBM_ARCH=powerpc
+ 	fi
+ 	if [ -x /usr/bin/oslevel ] ; then
+ 		IBM_REV=`/usr/bin/oslevel`
+@@ -586,62 +593,62 @@ EOF
+     9000/[34678]??:HP-UX:*:*)
+ 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ 	case "${UNAME_MACHINE}" in
+ 	    9000/31? )            HP_ARCH=m68000 ;;
+ 	    9000/[34]?? )         HP_ARCH=m68k ;;
+ 	    9000/[678][0-9][0-9])
+ 		if [ -x /usr/bin/getconf ]; then
+ 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+-                    case "${sc_cpu_version}" in
+-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+-                      532)                      # CPU_PA_RISC2_0
+-                        case "${sc_kernel_bits}" in
+-                          32) HP_ARCH="hppa2.0n" ;;
+-                          64) HP_ARCH="hppa2.0w" ;;
++		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
++		    case "${sc_cpu_version}" in
++		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
++		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
++		      532)                      # CPU_PA_RISC2_0
++			case "${sc_kernel_bits}" in
++			  32) HP_ARCH="hppa2.0n" ;;
++			  64) HP_ARCH="hppa2.0w" ;;
+ 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+-                        esac ;;
+-                    esac
++			esac ;;
++		    esac
+ 		fi
+ 		if [ "${HP_ARCH}" = "" ]; then
+ 		    eval $set_cc_for_build
+-		    sed 's/^              //' << EOF >$dummy.c
++		    sed 's/^		//' << EOF >$dummy.c
+ 
+-              #define _HPUX_SOURCE
+-              #include <stdlib.h>
+-              #include <unistd.h>
++		#define _HPUX_SOURCE
++		#include <stdlib.h>
++		#include <unistd.h>
+ 
+-              int main ()
+-              {
+-              #if defined(_SC_KERNEL_BITS)
+-                  long bits = sysconf(_SC_KERNEL_BITS);
+-              #endif
+-                  long cpu  = sysconf (_SC_CPU_VERSION);
++		int main ()
++		{
++		#if defined(_SC_KERNEL_BITS)
++		    long bits = sysconf(_SC_KERNEL_BITS);
++		#endif
++		    long cpu  = sysconf (_SC_CPU_VERSION);
+ 
+-                  switch (cpu)
+-              	{
+-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+-              	case CPU_PA_RISC2_0:
+-              #if defined(_SC_KERNEL_BITS)
+-              	    switch (bits)
+-              		{
+-              		case 64: puts ("hppa2.0w"); break;
+-              		case 32: puts ("hppa2.0n"); break;
+-              		default: puts ("hppa2.0"); break;
+-              		} break;
+-              #else  /* !defined(_SC_KERNEL_BITS) */
+-              	    puts ("hppa2.0"); break;
+-              #endif
+-              	default: puts ("hppa1.0"); break;
+-              	}
+-                  exit (0);
+-              }
++		    switch (cpu)
++			{
++			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
++			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
++			case CPU_PA_RISC2_0:
++		#if defined(_SC_KERNEL_BITS)
++			    switch (bits)
++				{
++				case 64: puts ("hppa2.0w"); break;
++				case 32: puts ("hppa2.0n"); break;
++				default: puts ("hppa2.0"); break;
++				} break;
++		#else  /* !defined(_SC_KERNEL_BITS) */
++			    puts ("hppa2.0"); break;
++		#endif
++			default: puts ("hppa1.0"); break;
++			}
++		    exit (0);
++		}
+ EOF
+ 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ 		    test -z "$HP_ARCH" && HP_ARCH=hppa
+ 		fi ;;
+ 	esac
+ 	if [ ${HP_ARCH} = "hppa2.0w" ]
+ 	then
+ 	    eval $set_cc_for_build
+@@ -722,32 +729,32 @@ EOF
+ 	    echo ${UNAME_MACHINE}-unknown-osf1
+ 	fi
+ 	exit ;;
+     parisc*:Lites*:*:*)
+ 	echo hppa1.1-hp-lites
+ 	exit ;;
+     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ 	echo c1-convex-bsd
+-        exit ;;
++	exit ;;
+     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ 	if getsysinfo -f scalar_acc
+ 	then echo c32-convex-bsd
+ 	else echo c2-convex-bsd
+ 	fi
+-        exit ;;
++	exit ;;
+     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ 	echo c34-convex-bsd
+-        exit ;;
++	exit ;;
+     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ 	echo c38-convex-bsd
+-        exit ;;
++	exit ;;
+     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ 	echo c4-convex-bsd
+-        exit ;;
++	exit ;;
+     CRAY*Y-MP:*:*:*)
+ 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     CRAY*[A-Z]90:*:*:*)
+ 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ 	      -e 's/\.[^.]*$/.X/'
+@@ -761,59 +768,64 @@ EOF
+     CRAY*SV1:*:*:*)
+ 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     *:UNICOS/mp:*:*)
+ 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ 	exit ;;
+     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+-        exit ;;
++	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
++	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++	exit ;;
+     5000:UNIX_System_V:4.*:*)
+-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
++	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ 	exit ;;
+     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ 	exit ;;
+     sparc*:BSD/OS:*:*)
+ 	echo sparc-unknown-bsdi${UNAME_RELEASE}
+ 	exit ;;
+     *:BSD/OS:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ 	exit ;;
+     *:FreeBSD:*:*)
+-	case ${UNAME_MACHINE} in
+-	    pc98)
+-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++	UNAME_PROCESSOR=`/usr/bin/uname -p`
++	case ${UNAME_PROCESSOR} in
+ 	    amd64)
+ 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ 	    *)
+-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ 	esac
+ 	exit ;;
+     i*:CYGWIN*:*)
+ 	echo ${UNAME_MACHINE}-pc-cygwin
+ 	exit ;;
++    *:MINGW64*:*)
++	echo ${UNAME_MACHINE}-pc-mingw64
++	exit ;;
+     *:MINGW*:*)
+ 	echo ${UNAME_MACHINE}-pc-mingw32
+ 	exit ;;
++    i*:MSYS*:*)
++	echo ${UNAME_MACHINE}-pc-msys
++	exit ;;
+     i*:windows32*:*)
+-    	# uname -m includes "-pc" on this system.
+-    	echo ${UNAME_MACHINE}-mingw32
++	# uname -m includes "-pc" on this system.
++	echo ${UNAME_MACHINE}-mingw32
+ 	exit ;;
+     i*:PW*:*)
+ 	echo ${UNAME_MACHINE}-pc-pw32
+ 	exit ;;
+     *:Interix*:*)
+-    	case ${UNAME_MACHINE} in
++	case ${UNAME_MACHINE} in
+ 	    x86)
+ 		echo i586-pc-interix${UNAME_RELEASE}
+ 		exit ;;
+ 	    authenticamd | genuineintel | EM64T)
+ 		echo x86_64-unknown-interix${UNAME_RELEASE}
+ 		exit ;;
+ 	    IA64)
+ 		echo ia64-unknown-interix${UNAME_RELEASE}
+@@ -849,51 +861,67 @@ EOF
+ 	exit ;;
+     *:GNU/*:*:*)
+ 	# other systems with GNU libc and userland
+ 	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ 	exit ;;
+     i*86:Minix:*:*)
+ 	echo ${UNAME_MACHINE}-pc-minix
+ 	exit ;;
++    aarch64:Linux:*:*)
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	exit ;;
++    aarch64_be:Linux:*:*)
++	UNAME_MACHINE=aarch64_be
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	exit ;;
+     alpha:Linux:*:*)
+ 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ 	  EV5)   UNAME_MACHINE=alphaev5 ;;
+ 	  EV56)  UNAME_MACHINE=alphaev56 ;;
+ 	  PCA56) UNAME_MACHINE=alphapca56 ;;
+ 	  PCA57) UNAME_MACHINE=alphapca56 ;;
+ 	  EV6)   UNAME_MACHINE=alphaev6 ;;
+ 	  EV67)  UNAME_MACHINE=alphaev67 ;;
+ 	  EV68*) UNAME_MACHINE=alphaev68 ;;
+-        esac
++	esac
+ 	objdump --private-headers /bin/sh | grep -q ld.so.1
+ 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ 	exit ;;
+     arm*:Linux:*:*)
+ 	eval $set_cc_for_build
+ 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ 	    | grep -q __ARM_EABI__
+ 	then
+ 	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	else
+-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
++		| grep -q __ARM_PCS_VFP
++	    then
++		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++	    else
++		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
++	    fi
+ 	fi
+ 	exit ;;
+     avr32*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     cris:Linux:*:*)
+-	echo cris-axis-linux-gnu
++	echo ${UNAME_MACHINE}-axis-linux-gnu
+ 	exit ;;
+     crisv32:Linux:*:*)
+-	echo crisv32-axis-linux-gnu
++	echo ${UNAME_MACHINE}-axis-linux-gnu
+ 	exit ;;
+     frv:Linux:*:*)
+-    	echo frv-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	exit ;;
++    hexagon:Linux:*:*)
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     i*86:Linux:*:*)
+ 	LIBC=gnu
+ 	eval $set_cc_for_build
+ 	sed 's/^	//' << EOF >$dummy.c
+ 	#ifdef __dietlibc__
+ 	LIBC=dietlibc
+ 	#endif
+@@ -925,17 +953,17 @@ EOF
+ 	CPU=
+ 	#endif
+ 	#endif
+ EOF
+ 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ 	;;
+     or32:Linux:*:*)
+-	echo or32-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     padre:Linux:*:*)
+ 	echo sparc-unknown-linux-gnu
+ 	exit ;;
+     parisc64:Linux:*:* | hppa64:Linux:*:*)
+ 	echo hppa64-unknown-linux-gnu
+ 	exit ;;
+     parisc:Linux:*:* | hppa:Linux:*:*)
+@@ -951,45 +979,48 @@ EOF
+ 	exit ;;
+     ppc:Linux:*:*)
+ 	echo powerpc-unknown-linux-gnu
+ 	exit ;;
+     s390:Linux:*:* | s390x:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-ibm-linux
+ 	exit ;;
+     sh64*:Linux:*:*)
+-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     sh*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     sparc:Linux:*:* | sparc64:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
++    tile*:Linux:*:*)
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	exit ;;
+     vax:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-dec-linux-gnu
+ 	exit ;;
+     x86_64:Linux:*:*)
+-	echo x86_64-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     xtensa*:Linux:*:*)
+-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+     i*86:DYNIX/ptx:4*:*)
+ 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ 	# earlier versions are messed up and put the nodename in both
+ 	# sysname and nodename.
+ 	echo i386-sequent-sysv4
+ 	exit ;;
+     i*86:UNIX_SV:4.2MP:2.*)
+-        # Unixware is an offshoot of SVR4, but it has its own version
+-        # number series starting with 2...
+-        # I am not positive that other SVR4 systems won't match this,
++	# Unixware is an offshoot of SVR4, but it has its own version
++	# number series starting with 2...
++	# I am not positive that other SVR4 systems won't match this,
+ 	# I just have to hope.  -- rms.
+-        # Use sysv4.2uw... so that sysv4* matches it.
++	# Use sysv4.2uw... so that sysv4* matches it.
+ 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ 	exit ;;
+     i*86:OS/2:*:*)
+ 	# If we were able to find `uname', then EMX Unix compatibility
+ 	# is probably installed.
+ 	echo ${UNAME_MACHINE}-pc-os2-emx
+ 	exit ;;
+     i*86:XTS-300:*:STOP)
+@@ -1011,17 +1042,17 @@ EOF
+ 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ 		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ 	else
+ 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ 	fi
+ 	exit ;;
+     i*86:*:5:[678]*)
+-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
++	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+ 	case `/bin/uname -X | grep "^Machine"` in
+ 	    *486*)	     UNAME_MACHINE=i486 ;;
+ 	    *Pentium)	     UNAME_MACHINE=i586 ;;
+ 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ 	esac
+ 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ 	exit ;;
+     i*86:*:3.2:*)
+@@ -1039,23 +1070,23 @@ EOF
+ 			&& UNAME_MACHINE=i686
+ 		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ 	else
+ 		echo ${UNAME_MACHINE}-pc-sysv32
+ 	fi
+ 	exit ;;
+     pc:*:*:*)
+ 	# Left here for compatibility:
+-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+-        # the processor, so we play safe by assuming i586.
++	# uname -m prints for DJGPP always 'pc', but it prints nothing about
++	# the processor, so we play safe by assuming i586.
+ 	# Note: whatever this is, it MUST be the same as what config.sub
+ 	# prints for the "djgpp" host, or else GDB configury will decide that
+ 	# this is a cross-build.
+ 	echo i586-pc-msdosdjgpp
+-        exit ;;
++	exit ;;
+     Intel:Mach:3*:*)
+ 	echo i386-pc-mach3
+ 	exit ;;
+     paragon:*:*:*)
+ 	echo i860-intel-osf1
+ 	exit ;;
+     i860:*:4.*:*) # i860-SVR4
+ 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+@@ -1080,18 +1111,18 @@ EOF
+ 	OS_REL=''
+ 	test -r /etc/.relid \
+ 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ 	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+-          && { echo i486-ncr-sysv4; exit; } ;;
++	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++	  && { echo i486-ncr-sysv4; exit; } ;;
+     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ 	OS_REL='.3'
+ 	test -r /etc/.relid \
+ 	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ 	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ 	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+@@ -1124,20 +1155,20 @@ EOF
+     *:SINIX-*:*:*)
+ 	if uname -p 2>/dev/null >/dev/null ; then
+ 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ 		echo ${UNAME_MACHINE}-sni-sysv4
+ 	else
+ 		echo ns32k-sni-sysv
+ 	fi
+ 	exit ;;
+-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+-        echo i586-unisys-sysv4
+-        exit ;;
++    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
++			# says <Richard.M.Bartel@ccMail.Census.GOV>
++	echo i586-unisys-sysv4
++	exit ;;
+     *:UNIX_System_V:4*:FTX*)
+ 	# From Gerald Hewes <hewes@openmarket.com>.
+ 	# How about differentiating between stratus architectures? -djm
+ 	echo hppa1.1-stratus-sysv4
+ 	exit ;;
+     *:*:*:FTX*)
+ 	# From seanf@swdc.stratus.com.
+ 	echo i860-stratus-sysv4
+@@ -1153,33 +1184,36 @@ EOF
+     mc68*:A/UX:*:*)
+ 	echo m68k-apple-aux${UNAME_RELEASE}
+ 	exit ;;
+     news*:NEWS-OS:6*:*)
+ 	echo mips-sony-newsos6
+ 	exit ;;
+     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ 	if [ -d /usr/nec ]; then
+-	        echo mips-nec-sysv${UNAME_RELEASE}
++		echo mips-nec-sysv${UNAME_RELEASE}
+ 	else
+-	        echo mips-unknown-sysv${UNAME_RELEASE}
++		echo mips-unknown-sysv${UNAME_RELEASE}
+ 	fi
+-        exit ;;
++	exit ;;
+     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+ 	echo powerpc-be-beos
+ 	exit ;;
+     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+ 	echo powerpc-apple-beos
+ 	exit ;;
+     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+ 	echo i586-pc-beos
+ 	exit ;;
+     BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+ 	echo i586-pc-haiku
+ 	exit ;;
++    x86_64:Haiku:*:*)
++	echo x86_64-unknown-haiku
++	exit ;;
+     SX-4:SUPER-UX:*:*)
+ 	echo sx4-nec-superux${UNAME_RELEASE}
+ 	exit ;;
+     SX-5:SUPER-UX:*:*)
+ 	echo sx5-nec-superux${UNAME_RELEASE}
+ 	exit ;;
+     SX-6:SUPER-UX:*:*)
+ 	echo sx6-nec-superux${UNAME_RELEASE}
+@@ -1222,17 +1256,20 @@ EOF
+ 		UNAME_PROCESSOR=i386
+ 		UNAME_MACHINE=pc
+ 	fi
+ 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ 	exit ;;
+     *:QNX:*:4*)
+ 	echo i386-pc-qnx
+ 	exit ;;
+-    NSE-?:NONSTOP_KERNEL:*:*)
++    NEO-?:NONSTOP_KERNEL:*:*)
++	echo neo-tandem-nsk${UNAME_RELEASE}
++	exit ;;
++    NSE-*:NONSTOP_KERNEL:*:*)
+ 	echo nse-tandem-nsk${UNAME_RELEASE}
+ 	exit ;;
+     NSR-?:NONSTOP_KERNEL:*:*)
+ 	echo nsr-tandem-nsk${UNAME_RELEASE}
+ 	exit ;;
+     *:NonStop-UX:*:*)
+ 	echo mips-compaq-nonstopux
+ 	exit ;;
+@@ -1267,23 +1304,23 @@ EOF
+ 	exit ;;
+     *:TOPS-20:*:*)
+ 	echo pdp10-unknown-tops20
+ 	exit ;;
+     *:ITS:*:*)
+ 	echo pdp10-unknown-its
+ 	exit ;;
+     SEI:*:*:SEIUX)
+-        echo mips-sei-seiux${UNAME_RELEASE}
++	echo mips-sei-seiux${UNAME_RELEASE}
+ 	exit ;;
+     *:DragonFly:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ 	exit ;;
+     *:*VMS:*:*)
+-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
++	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ 	case "${UNAME_MACHINE}" in
+ 	    A*) echo alpha-dec-vms ; exit ;;
+ 	    I*) echo ia64-dec-vms ; exit ;;
+ 	    V*) echo vax-dec-vms ; exit ;;
+ 	esac ;;
+     *:XENIX:*:SysV)
+ 	echo i386-pc-xenix
+ 	exit ;;
+@@ -1291,21 +1328,21 @@ EOF
+ 	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ 	exit ;;
+     i*86:rdos:*:*)
+ 	echo ${UNAME_MACHINE}-pc-rdos
+ 	exit ;;
+     i*86:AROS:*:*)
+ 	echo ${UNAME_MACHINE}-pc-aros
+ 	exit ;;
++    x86_64:VMkernel:*:*)
++	echo ${UNAME_MACHINE}-unknown-esx
++	exit ;;
+ esac
+ 
+-#echo '(No uname command or uname output not recognized.)' 1>&2
+-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+-
+ eval $set_cc_for_build
+ cat >$dummy.c <<EOF
+ #ifdef _SEQUENT_
+ # include <sys/types.h>
+ # include <sys/utsname.h>
+ #endif
+ main ()
+ {
+@@ -1313,21 +1350,21 @@ main ()
+ #if defined (MIPSEB)
+   /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+      I don't know....  */
+   printf ("mips-sony-bsd\n"); exit (0);
+ #else
+ #include <sys/param.h>
+   printf ("m68k-sony-newsos%s\n",
+ #ifdef NEWSOS4
+-          "4"
++	"4"
+ #else
+-	  ""
++	""
+ #endif
+-         ); exit (0);
++	); exit (0);
+ #endif
+ #endif
+ 
+ #if defined (__arm) && defined (__acorn) && defined (__unix)
+   printf ("arm-acorn-riscix\n"); exit (0);
+ #endif
+ 
+ #if defined (hp300) && !defined (hpux)
+diff --git a/js/src/ctypes/libffi/config.sub b/js/src/ctypes/libffi/config.sub
+--- a/js/src/ctypes/libffi/config.sub
++++ b/js/src/ctypes/libffi/config.sub
+@@ -1,43 +1,38 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+ #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+-#   Free Software Foundation, Inc.
++#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
++#   2011, 2012, 2013 Free Software Foundation, Inc.
+ 
+-timestamp='2011-01-03'
++timestamp='2012-12-29'
+ 
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine.  It does not imply ALL GNU software can.
+-#
+-# This file is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++# General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# the same distribution terms that you use for the rest of that
++# program.  This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+ 
+ 
+-# Please send patches to <config-patches@gnu.org>.  Submit a context
+-# diff and a properly formatted GNU ChangeLog entry.
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+ # If it is invalid, we print an error message on stderr and exit with code 1.
+ # Otherwise, we print the canonical config type on stdout and succeed.
+ 
+ # You can get the latest version of this script from:
+ # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+@@ -70,18 +65,19 @@ Operation modes:
+   -t, --time-stamp   print date of last modification, then exit
+   -v, --version      print version number, then exit
+ 
+ Report bugs and patches to <config-patches@gnu.org>."
+ 
+ version="\
+ GNU config.sub ($timestamp)
+ 
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
++2012, 2013 Free Software Foundation, Inc.
+ 
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ 
+ help="
+ Try \`$me --help' for more information."
+ 
+ # Parse command line
+@@ -118,23 +114,28 @@ case $# in
+  *) echo "$me: too many arguments$help" >&2
+     exit 1;;
+ esac
+ 
+ # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
++  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
++  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++  knetbsd*-gnu* | netbsd*-gnu* | \
+   kopensolaris*-gnu* | \
+-  storm-chaos* | os2-emx* | rtmk-nova* | wince-winmo*)
++  storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
++  android-linux)
++    os=-linux-android
++    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
++    ;;
+   *)
+     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+     if [ $basic_machine != $1 ]
+     then os=`echo $1 | sed 's/.*-/-/'`
+     else os=; fi
+     ;;
+ esac
+ 
+@@ -147,41 +148,41 @@ case $os in
+ 		# Prevent following clause from handling this invalid input.
+ 		;;
+ 	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ 	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ 	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+-	-apple | -axis | -knuth | -cray | -microblaze)
++	-apple | -axis | -knuth | -cray | -microblaze*)
+ 		os=
+ 		basic_machine=$1
+ 		;;
+-        -bluegene*)
+-	        os=-cnk
++	-bluegene*)
++		os=-cnk
+ 		;;
+ 	-sim | -cisco | -oki | -wec | -winbond)
+ 		os=
+ 		basic_machine=$1
+ 		;;
+ 	-scout)
+ 		;;
+ 	-wrs)
+ 		os=-vxworks
+ 		basic_machine=$1
+ 		;;
+ 	-chorusos*)
+ 		os=-chorusos
+ 		basic_machine=$1
+ 		;;
+- 	-chorusrdb)
+- 		os=-chorusrdb
++	-chorusrdb)
++		os=-chorusrdb
+ 		basic_machine=$1
+- 		;;
++		;;
+ 	-hiux*)
+ 		os=-hiuxwe2
+ 		;;
+ 	-sco6)
+ 		os=-sco5v6
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-sco5)
+@@ -216,16 +217,22 @@ case $os in
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
+ 	-clix*)
+ 		basic_machine=clipper-intergraph
+ 		;;
+ 	-isc*)
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ 		;;
++	-lynx*178)
++		os=-lynxos178
++		;;
++	-lynx*5)
++		os=-lynxos5
++		;;
+ 	-lynx*)
+ 		os=-lynxos
+ 		;;
+ 	-ptx*)
+ 		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ 		;;
+ 	-windowsnt*)
+ 		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+@@ -240,30 +247,37 @@ case $os in
+ esac
+ 
+ # Decode aliases for certain CPU-COMPANY combinations.
+ case $basic_machine in
+ 	# Recognize the basic CPU types without company name.
+ 	# Some are omitted here because they have special meanings below.
+ 	1750a | 580 \
+ 	| a29k \
++	| aarch64 | aarch64_be \
+ 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ 	| am33_2.0 \
+-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
++	| arc \
++	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
++	| avr | avr32 \
++	| be32 | be64 \
+ 	| bfin \
+ 	| c4x | clipper \
+ 	| d10v | d30v | dlx | dsp16xx \
++	| epiphany \
+ 	| fido | fr30 | frv \
+ 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++	| hexagon \
+ 	| i370 | i860 | i960 | ia64 \
+ 	| ip2k | iq2000 \
++	| le32 | le64 \
+ 	| lm32 \
+ 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+-	| maxq | mb | microblaze | mcore | mep | metag \
++	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ 	| mips | mipsbe | mipseb | mipsel | mipsle \
+ 	| mips16 \
+ 	| mips64 | mips64el \
+ 	| mips64octeon | mips64octeonel \
+ 	| mips64orion | mips64orionel \
+ 	| mips64r5900 | mips64r5900el \
+ 	| mips64vr | mips64vrel \
+ 	| mips64vr4100 | mips64vr4100el \
+@@ -276,79 +290,111 @@ case $basic_machine in
+ 	| mipsisa64r2 | mipsisa64r2el \
+ 	| mipsisa64sb1 | mipsisa64sb1el \
+ 	| mipsisa64sr71k | mipsisa64sr71kel \
+ 	| mipstx39 | mipstx39el \
+ 	| mn10200 | mn10300 \
+ 	| moxie \
+ 	| mt \
+ 	| msp430 \
++	| nds32 | nds32le | nds32be \
+ 	| nios | nios2 \
+ 	| ns16k | ns32k \
++	| open8 \
+ 	| or32 \
+ 	| pdp10 | pdp11 | pj | pjl \
+-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++	| powerpc | powerpc64 | powerpc64le | powerpcle \
+ 	| pyramid \
++	| rl78 | rx \
+ 	| score \
+ 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ 	| sh64 | sh64le \
+ 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+-	| spu | strongarm \
+-	| tahoe | thumb | tic4x | tic80 | tron \
+-	| v850 | v850e \
++	| spu \
++	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
++	| ubicom32 \
++	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ 	| we32k \
+-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
++	| x86 | xc16x | xstormy16 | xtensa \
+ 	| z8k | z80)
+ 		basic_machine=$basic_machine-unknown
+ 		;;
+-	m6811 | m68hc11 | m6812 | m68hc12)
+-		# Motorola 68HC11/12.
++	c54x)
++		basic_machine=tic54x-unknown
++		;;
++	c55x)
++		basic_machine=tic55x-unknown
++		;;
++	c6x)
++		basic_machine=tic6x-unknown
++		;;
++	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ 		basic_machine=$basic_machine-unknown
+ 		os=-none
+ 		;;
+ 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ 		;;
+ 	ms1)
+ 		basic_machine=mt-unknown
+ 		;;
+ 
++	strongarm | thumb | xscale)
++		basic_machine=arm-unknown
++		;;
++	xgate)
++		basic_machine=$basic_machine-unknown
++		os=-none
++		;;
++	xscaleeb)
++		basic_machine=armeb-unknown
++		;;
++
++	xscaleel)
++		basic_machine=armel-unknown
++		;;
++
+ 	# We use `pc' rather than `unknown'
+ 	# because (1) that's what they normally are, and
+ 	# (2) the word "unknown" tends to confuse beginning users.
+ 	i*86 | x86_64)
+ 	  basic_machine=$basic_machine-pc
+ 	  ;;
+ 	# Object if more than one company name word.
+ 	*-*-*)
+ 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ 		exit 1
+ 		;;
+ 	# Recognize the basic CPU types with company name.
+ 	580-* \
+ 	| a29k-* \
++	| aarch64-* | aarch64_be-* \
+ 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+ 	| avr-* | avr32-* \
++	| be32-* | be64-* \
+ 	| bfin-* | bs2000-* \
+-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
++	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+ 	| clipper-* | craynv-* | cydra-* \
+ 	| d10v-* | d30v-* | dlx-* \
+ 	| elxsi-* \
+ 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ 	| h8300-* | h8500-* \
+ 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
++	| hexagon-* \
+ 	| i*86-* | i860-* | i960-* | ia64-* \
+ 	| ip2k-* | iq2000-* \
++	| le32-* | le64-* \
+ 	| lm32-* \
+ 	| m32c-* | m32r-* | m32rle-* \
+ 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
++	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++	| microblaze-* | microblazeel-* \
+ 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ 	| mips16-* \
+ 	| mips64-* | mips64el-* \
+ 	| mips64octeon-* | mips64octeonel-* \
+ 	| mips64orion-* | mips64orionel-* \
+ 	| mips64r5900-* | mips64r5900el-* \
+ 	| mips64vr-* | mips64vrel-* \
+ 	| mips64vr4100-* | mips64vr4100el-* \
+@@ -360,34 +406,39 @@ case $basic_machine in
+ 	| mipsisa64-* | mipsisa64el-* \
+ 	| mipsisa64r2-* | mipsisa64r2el-* \
+ 	| mipsisa64sb1-* | mipsisa64sb1el-* \
+ 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ 	| mipstx39-* | mipstx39el-* \
+ 	| mmix-* \
+ 	| mt-* \
+ 	| msp430-* \
++	| nds32-* | nds32le-* | nds32be-* \
+ 	| nios-* | nios2-* \
+ 	| none-* | np1-* | ns16k-* | ns32k-* \
++	| open8-* \
+ 	| orion-* \
+ 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ 	| pyramid-* \
+-	| romp-* | rs6000-* \
++	| rl78-* | romp-* | rs6000-* | rx-* \
+ 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ 	| sparclite-* \
+-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+-	| tahoe-* | thumb-* \
+-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
++	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
++	| tahoe-* \
++	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
++	| tile*-* \
+ 	| tron-* \
+-	| v850-* | v850e-* | vax-* \
++	| ubicom32-* \
++	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
++	| vax-* \
+ 	| we32k-* \
+-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
++	| x86-* | x86_64-* | xc16x-* | xps100-* \
+ 	| xstormy16-* | xtensa*-* \
+ 	| ymp-* \
+ 	| z8k-* | z80-*)
+ 		;;
+ 	# Recognize the basic CPU types without company name, with glob match.
+ 	xtensa*)
+ 		basic_machine=$basic_machine-unknown
+ 		;;
+@@ -402,17 +453,17 @@ case $basic_machine in
+ 		;;
+ 	3b*)
+ 		basic_machine=we32k-att
+ 		;;
+ 	a29khif)
+ 		basic_machine=a29k-amd
+ 		os=-udi
+ 		;;
+-    	abacus)
++	abacus)
+ 		basic_machine=abacus-unknown
+ 		;;
+ 	adobe68k)
+ 		basic_machine=m68010-adobe
+ 		os=-scout
+ 		;;
+ 	alliant | fx80)
+ 		basic_machine=fx80-alliant
+@@ -472,21 +523,30 @@ case $basic_machine in
+ 	blackfin-*)
+ 		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		os=-linux
+ 		;;
+ 	bluegene*)
+ 		basic_machine=powerpc-ibm
+ 		os=-cnk
+ 		;;
++	c54x-*)
++		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
++		;;
++	c55x-*)
++		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
++		;;
++	c6x-*)
++		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
++		;;
+ 	c90)
+ 		basic_machine=c90-cray
+ 		os=-unicos
+ 		;;
+-        cegcc)
++	cegcc)
+ 		basic_machine=arm-unknown
+ 		os=-cegcc
+ 		;;
+ 	convex-c1)
+ 		basic_machine=c1-convex
+ 		os=-bsd
+ 		;;
+ 	convex-c2)
+@@ -508,17 +568,17 @@ case $basic_machine in
+ 	cray | j90)
+ 		basic_machine=j90-cray
+ 		os=-unicos
+ 		;;
+ 	craynv)
+ 		basic_machine=craynv-cray
+ 		os=-unicosmp
+ 		;;
+-	cr16)
++	cr16 | cr16-*)
+ 		basic_machine=cr16-unknown
+ 		os=-elf
+ 		;;
+ 	crds | unos)
+ 		basic_machine=m68k-crds
+ 		;;
+ 	crisv32 | crisv32-* | etraxfs*)
+ 		basic_machine=crisv32-axis
+@@ -666,17 +726,16 @@ case $basic_machine in
+ 		;;
+ 	hppro)
+ 		basic_machine=hppa1.1-hp
+ 		os=-proelf
+ 		;;
+ 	i370-ibm* | ibm*)
+ 		basic_machine=i370-ibm
+ 		;;
+-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+ 	i*86v32)
+ 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ 		os=-sysv32
+ 		;;
+ 	i*86v4*)
+ 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ 		os=-sysv4
+ 		;;
+@@ -724,19 +783,23 @@ case $basic_machine in
+ 	magnum | m3230)
+ 		basic_machine=mips-mips
+ 		os=-sysv
+ 		;;
+ 	merlin)
+ 		basic_machine=ns32k-utek
+ 		os=-sysv
+ 		;;
+-        microblaze)
++	microblaze*)
+ 		basic_machine=microblaze-xilinx
+ 		;;
++	mingw64)
++		basic_machine=x86_64-pc
++		os=-mingw64
++		;;
+ 	mingw32)
+ 		basic_machine=i386-pc
+ 		os=-mingw32
+ 		;;
+ 	mingw32ce)
+ 		basic_machine=arm-unknown
+ 		os=-mingw32ce
+ 		;;
+@@ -763,20 +826,28 @@ case $basic_machine in
+ 		;;
+ 	msdos)
+ 		basic_machine=i386-pc
+ 		os=-msdos
+ 		;;
+ 	ms1-*)
+ 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ 		;;
++	msys)
++		basic_machine=i386-pc
++		os=-msys
++		;;
+ 	mvs)
+ 		basic_machine=i370-ibm
+ 		os=-mvs
+ 		;;
++	nacl)
++		basic_machine=le32-unknown
++		os=-nacl
++		;;
+ 	ncr3000)
+ 		basic_machine=i486-ncr
+ 		os=-sysv4
+ 		;;
+ 	netbsd386)
+ 		basic_machine=i386-unknown
+ 		os=-netbsd
+ 		;;
+@@ -831,16 +902,22 @@ case $basic_machine in
+ 		;;
+ 	nonstopux)
+ 		basic_machine=mips-compaq
+ 		os=-nonstopux
+ 		;;
+ 	np1)
+ 		basic_machine=np1-gould
+ 		;;
++	neo-tandem)
++		basic_machine=neo-tandem
++		;;
++	nse-tandem)
++		basic_machine=nse-tandem
++		;;
+ 	nsr-tandem)
+ 		basic_machine=nsr-tandem
+ 		;;
+ 	op50n-* | op60c-*)
+ 		basic_machine=hppa1.1-oki
+ 		os=-proelf
+ 		;;
+ 	openrisc | openrisc-*)
+@@ -913,44 +990,49 @@ case $basic_machine in
+ 	pentium4-*)
+ 		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	pn)
+ 		basic_machine=pn-gould
+ 		;;
+ 	power)	basic_machine=power-ibm
+ 		;;
+-	ppc)	basic_machine=powerpc-unknown
++	ppc | ppcbe)	basic_machine=powerpc-unknown
+ 		;;
+-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++	ppc-* | ppcbe-*)
++		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ppcle | powerpclittle | ppc-le | powerpc-little)
+ 		basic_machine=powerpcle-unknown
+ 		;;
+ 	ppcle-* | powerpclittle-*)
+ 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ppc64)	basic_machine=powerpc64-unknown
+ 		;;
+-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
++	ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ 		basic_machine=powerpc64le-unknown
+ 		;;
+ 	ppc64le-* | powerpc64little-*)
+ 		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ 		;;
+ 	ps2)
+ 		basic_machine=i386-ibm
+ 		;;
+ 	pw32)
+ 		basic_machine=i586-unknown
+ 		os=-pw32
+ 		;;
+-	rdos)
++	rdos | rdos64)
++		basic_machine=x86_64-pc
++		os=-rdos
++		;;
++	rdos32)
+ 		basic_machine=i386-pc
+ 		os=-rdos
+ 		;;
+ 	rom68k)
+ 		basic_machine=m68k-rom68k
+ 		os=-coff
+ 		;;
+ 	rm[46]00)
+@@ -1009,16 +1091,19 @@ case $basic_machine in
+ 		;;
+ 	st2000)
+ 		basic_machine=m68k-tandem
+ 		;;
+ 	stratus)
+ 		basic_machine=i860-stratus
+ 		os=-sysv4
+ 		;;
++	strongarm-* | thumb-*)
++		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
++		;;
+ 	sun2)
+ 		basic_machine=m68000-sun
+ 		;;
+ 	sun2os3)
+ 		basic_machine=m68000-sun
+ 		os=-sunos3
+ 		;;
+ 	sun2os4)
+@@ -1065,30 +1150,18 @@ case $basic_machine in
+ 	t3e)
+ 		basic_machine=alphaev5-cray
+ 		os=-unicos
+ 		;;
+ 	t90)
+ 		basic_machine=t90-cray
+ 		os=-unicos
+ 		;;
+-	tic54x | c54x*)
+-		basic_machine=tic54x-unknown
+-		os=-coff
+-		;;
+-	tic55x | c55x*)
+-		basic_machine=tic55x-unknown
+-		os=-coff
+-		;;
+-	tic6x | c6x*)
+-		basic_machine=tic6x-unknown
+-		os=-coff
+-		;;
+ 	tile*)
+-		basic_machine=tile-unknown
++		basic_machine=$basic_machine-unknown
+ 		os=-linux-gnu
+ 		;;
+ 	tx39)
+ 		basic_machine=mipstx39-unknown
+ 		;;
+ 	tx39el)
+ 		basic_machine=mipstx39el-unknown
+ 		;;
+@@ -1148,16 +1221,19 @@ case $basic_machine in
+ 		;;
+ 	xbox)
+ 		basic_machine=i686-pc
+ 		os=-mingw32
+ 		;;
+ 	xps | xps100)
+ 		basic_machine=xps100-honeywell
+ 		;;
++	xscale-* | xscalee[bl]-*)
++		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
++		;;
+ 	ymp)
+ 		basic_machine=ymp-cray
+ 		os=-unicos
+ 		;;
+ 	z8k-*-coff)
+ 		basic_machine=z8k-unknown
+ 		os=-sim
+ 		;;
+@@ -1245,19 +1321,22 @@ case $basic_machine in
+ 		;;
+ esac
+ 
+ # Decode manufacturer-specific aliases for certain operating systems.
+ 
+ if [ x"$os" != x"" ]
+ then
+ case $os in
+-        # First match some system type aliases
+-        # that might get confused with valid system types.
++	# First match some system type aliases
++	# that might get confused with valid system types.
+ 	# -solaris* is a basic system type, with this one exception.
++	-auroraux)
++		os=-auroraux
++		;;
+ 	-solaris1 | -solaris1.*)
+ 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ 		;;
+ 	-solaris)
+ 		os=-solaris2
+ 		;;
+ 	-svr4*)
+ 		os=-sysv4
+@@ -1269,39 +1348,40 @@ case $os in
+ 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ 		;;
+ 	# First accept the basic system types.
+ 	# The portable systems comes first.
+ 	# Each alternative MUST END IN A *, to match a version number.
+ 	# -sysv* is not here because it comes later, after sysvr4.
+ 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+-	      | -kopensolaris* \
++	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
++	      | -sym* | -kopensolaris* \
+ 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ 	      | -aos* | -aros* \
+ 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+-	      | -openbsd* | -solidbsd* \
++	      | -bitrig* | -openbsd* | -solidbsd* \
+ 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* | -cegcc* \
+-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
++	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ 	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -winmo*)
++	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ 	# Remember, each alternative MUST END IN *, to match a version number.
+ 		;;
+ 	-qnx*)
+ 		case $basic_machine in
+ 		    x86-* | i*86-*)
+ 			;;
+ 		    *)
+ 			os=-nto$os
+@@ -1330,22 +1410,19 @@ case $os in
+ 		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ 		;;
+ 	-sunos6*)
+ 		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ 		;;
+ 	-opened*)
+ 		os=-openedition
+ 		;;
+-        -os400*)
++	-os400*)
+ 		os=-os400
+ 		;;
+-	-wince-winmo*)
+-		os=-wince-winmo
+-		;;
+ 	-wince*)
+ 		os=-wince
+ 		;;
+ 	-osfrose*)
+ 		os=-osfrose
+ 		;;
+ 	-osf*)
+ 		os=-osf
+@@ -1382,17 +1459,17 @@ case $os in
+ 		;;
+ 	# Preserve the version number of sinix5.
+ 	-sinix5.*)
+ 		os=`echo $os | sed -e 's|sinix|sysv|'`
+ 		;;
+ 	-sinix*)
+ 		os=-sysv4
+ 		;;
+-        -tpf*)
++	-tpf*)
+ 		os=-tpf
+ 		;;
+ 	-triton*)
+ 		os=-sysv3
+ 		;;
+ 	-oss*)
+ 		os=-sysv3
+ 		;;
+@@ -1427,19 +1504,18 @@ case $os in
+ 		os=-kaos
+ 		;;
+ 	-zvmoe)
+ 		os=-zvmoe
+ 		;;
+ 	-dicos*)
+ 		os=-dicos
+ 		;;
+-        -android*)
+-	        os=-android
+-                ;;
++	-nacl*)
++		;;
+ 	-none)
+ 		;;
+ 	*)
+ 		# Get rid of the `-' at the beginning of $os.
+ 		os=`echo $os | sed 's/[^-]*-//'`
+ 		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ 		exit 1
+ 		;;
+@@ -1452,33 +1528,45 @@ else
+ 
+ # Note that if you're going to try to match "-MANUFACTURER" here (say,
+ # "-sun"), then you have to tell the case statement up towards the top
+ # that MANUFACTURER isn't an operating system.  Otherwise, code above
+ # will signal an error saying that MANUFACTURER isn't an operating
+ # system, and we'll never get to this point.
+ 
+ case $basic_machine in
+-        score-*)
++	score-*)
+ 		os=-elf
+ 		;;
+-        spu-*)
++	spu-*)
+ 		os=-elf
+ 		;;
+ 	*-acorn)
+ 		os=-riscix1.2
+ 		;;
+ 	arm*-rebel)
+ 		os=-linux
+ 		;;
+ 	arm*-semi)
+ 		os=-aout
+ 		;;
+-        c4x-* | tic4x-*)
+-        	os=-coff
++	c4x-* | tic4x-*)
++		os=-coff
++		;;
++	hexagon-*)
++		os=-elf
++		;;
++	tic54x-*)
++		os=-coff
++		;;
++	tic55x-*)
++		os=-coff
++		;;
++	tic6x-*)
++		os=-coff
+ 		;;
+ 	# This must come before the *-dec entry.
+ 	pdp10-*)
+ 		os=-tops20
+ 		;;
+ 	pdp11-*)
+ 		os=-none
+ 		;;
+@@ -1488,24 +1576,21 @@ case $basic_machine in
+ 	m68*-apollo)
+ 		os=-domain
+ 		;;
+ 	i386-sun)
+ 		os=-sunos4.0.2
+ 		;;
+ 	m68000-sun)
+ 		os=-sunos3
+-		# This also exists in the configure program, but was not the
+-		# default.
+-		# os=-sunos4
+ 		;;
+ 	m68*-cisco)
+ 		os=-aout
+ 		;;
+-        mep-*)
++	mep-*)
+ 		os=-elf
+ 		;;
+ 	mips*-cisco)
+ 		os=-elf
+ 		;;
+ 	mips*-*)
+ 		os=-elf
+ 		;;
+@@ -1522,17 +1607,17 @@ case $basic_machine in
+ 		os=-beos
+ 		;;
+ 	*-haiku)
+ 		os=-haiku
+ 		;;
+ 	*-ibm)
+ 		os=-aix
+ 		;;
+-    	*-knuth)
++	*-knuth)
+ 		os=-mmixware
+ 		;;
+ 	*-wec)
+ 		os=-proelf
+ 		;;
+ 	*-winbond)
+ 		os=-proelf
+ 		;;
+@@ -1684,19 +1769,16 @@ case $basic_machine in
+ 				vendor=apple
+ 				;;
+ 			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ 				vendor=atari
+ 				;;
+ 			-vos*)
+ 				vendor=stratus
+ 				;;
+-			*-android*|*-linuxandroid*)
+-				vendor=linux-
+-				;;
+ 		esac
+ 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ 		;;
+ esac
+ 
+ echo $basic_machine$os
+ exit
+ 
+diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+--- a/js/src/ctypes/libffi/configure
++++ b/js/src/ctypes/libffi/configure
+@@ -1,18 +1,16 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.65 for libffi 3.0.10rc0.
++# Generated by GNU Autoconf 2.69 for libffi 3.1-rc1.
+ #
+-# Report bugs to <http://gcc.gnu.org/bugs.html>.
++# Report bugs to <http://github.com/atgreen/libffi/issues>.
+ #
+ #
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+-# Inc.
++# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+ #
+ #
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+ ## -------------------- ##
+ ## M4sh Initialization. ##
+ ## -------------------- ##
+ 
+@@ -86,16 +84,17 @@ fi
+ # IFS
+ # We need space, tab and new line, in precisely that order.  Quoting is
+ # there to prevent editors from complaining about space-tab.
+ # (If _AS_PATH_WALK were called with IFS unset, it would disable word
+ # splitting by setting IFS to empty value.)
+ IFS=" ""	$as_nl"
+ 
+ # Find who we are.  Look in the path if we contain no directory separator.
++as_myself=
+ case $0 in #((
+   *[\\/]* ) as_myself=$0 ;;
+   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+@@ -130,16 +129,41 @@ PS4='+ '
+ LC_ALL=C
+ export LC_ALL
+ LANGUAGE=C
+ export LANGUAGE
+ 
+ # CDPATH.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+ 
++# Use a proper internal environment variable to ensure we don't fall
++  # into an infinite loop, continuously re-executing ourselves.
++  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
++    _as_can_reexec=no; export _as_can_reexec;
++    # We cannot yet assume a decent shell, so we have to provide a
++# neutralization value for shells without unset; and this also
++# works around shells that cannot unset nonexistent variables.
++# Preserve -v and -x to the replacement shell.
++BASH_ENV=/dev/null
++ENV=/dev/null
++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++case $- in # ((((
++  *v*x* | *x*v* ) as_opts=-vx ;;
++  *v* ) as_opts=-v ;;
++  *x* ) as_opts=-x ;;
++  * ) as_opts= ;;
++esac
++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
++# Admittedly, this is quite paranoid, since all the known shells bail
++# out after a failed `exec'.
++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
++as_fn_exit 255
++  fi
++  # We don't want this to propagate to other subprocesses.
++          { _as_can_reexec=; unset _as_can_reexec;}
+ if test "x$CONFIG_SHELL" = x; then
+   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+   emulate sh
+   NULLCMD=:
+   # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+   # is contrary to our usage.  Disable this feature.
+   alias -g '\${1+\"\$@\"}'='\"\$@\"'
+   setopt NO_GLOB_SUBST
+@@ -163,21 +187,30 @@ as_fn_success || { exitcode=1; echo as_f
+ as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+ as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+ 
+ else
+   exitcode=1; echo positional parameters were not saved.
+ fi
+-test x\$exitcode = x0 || exit 1"
++test x\$exitcode = x0 || exit 1
++test -x / || exit 1"
+   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
++
++  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
++    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
++    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
++    PATH=/empty FPATH=/empty; export PATH FPATH
++    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
++      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+ test \$(( 1 + 1 )) = 2 || exit 1"
+   if (eval "$as_required") 2>/dev/null; then :
+   as_have_required=yes
+ else
+   as_have_required=no
+ fi
+   if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+ 
+@@ -208,36 +241,47 @@ done
+ $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ 	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+   CONFIG_SHELL=$SHELL as_have_required=yes
+ fi; }
+ IFS=$as_save_IFS
+ 
+ 
+       if test "x$CONFIG_SHELL" != x; then :
+-  # We cannot yet assume a decent shell, so we have to provide a
+-	# neutralization value for shells without unset; and this also
+-	# works around shells that cannot unset nonexistent variables.
+-	BASH_ENV=/dev/null
+-	ENV=/dev/null
+-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+-	export CONFIG_SHELL
+-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
++  export CONFIG_SHELL
++             # We cannot yet assume a decent shell, so we have to provide a
++# neutralization value for shells without unset; and this also
++# works around shells that cannot unset nonexistent variables.
++# Preserve -v and -x to the replacement shell.
++BASH_ENV=/dev/null
++ENV=/dev/null
++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++case $- in # ((((
++  *v*x* | *x*v* ) as_opts=-vx ;;
++  *v* ) as_opts=-v ;;
++  *x* ) as_opts=-x ;;
++  * ) as_opts= ;;
++esac
++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
++# Admittedly, this is quite paranoid, since all the known shells bail
++# out after a failed `exec'.
++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
++exit 255
+ fi
+ 
+     if test x$as_have_required = xno; then :
+   $as_echo "$0: This script requires a shell more modern than all"
+   $as_echo "$0: the shells that I found on your system."
+   if test x${ZSH_VERSION+set} = xset ; then
+     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+   else
+     $as_echo "$0: Please tell bug-autoconf@gnu.org and
+-$0: http://gcc.gnu.org/bugs.html about your system,
+-$0: including any error possibly output before this
++$0: http://github.com/atgreen/libffi/issues about your
++$0: system, including any error possibly output before this
+ $0: message. Then install a modern shell, or manually run
+ $0: the script under such a shell if you do have one."
+   fi
+   exit 1
+ fi
+ fi
+ fi
+ SHELL=${CONFIG_SHELL-/bin/sh}
+@@ -314,20 +358,28 @@ as_fn_mkdir_p ()
+ 	  /^X\(\/\).*/{
+ 	    s//\1/
+ 	    q
+ 	  }
+ 	  s/.*/./; q'`
+       test -d "$as_dir" && break
+     done
+     test -z "$as_dirs" || eval "mkdir $as_dirs"
+-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+ 
+ 
+ } # as_fn_mkdir_p
++
++# as_fn_executable_p FILE
++# -----------------------
++# Test if FILE is an executable regular file.
++as_fn_executable_p ()
++{
++  test -f "$1" && test -x "$1"
++} # as_fn_executable_p
+ # as_fn_append VAR VALUE
+ # ----------------------
+ # Append the text in VALUE to the end of the definition contained in VAR. Take
+ # advantage of any shell optimizations that allow amortized linear growth over
+ # repeated appends, instead of the typical quadratic growth present in naive
+ # implementations.
+ if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+   eval 'as_fn_append ()
+@@ -354,29 +406,29 @@ if (eval "test \$(( 1 + 1 )) = 2") 2>/de
+ else
+   as_fn_arith ()
+   {
+     as_val=`expr "$@" || test $? -eq 1`
+   }
+ fi # as_fn_arith
+ 
+ 
+-# as_fn_error ERROR [LINENO LOG_FD]
+-# ---------------------------------
++# as_fn_error STATUS ERROR [LINENO LOG_FD]
++# ----------------------------------------
+ # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+ # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+-# script with status $?, using 1 if that was 0.
++# script with STATUS, using 1 if that was 0.
+ as_fn_error ()
+ {
+-  as_status=$?; test $as_status -eq 0 && as_status=1
+-  if test "$3"; then
+-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+-  fi
+-  $as_echo "$as_me: error: $1" >&2
++  as_status=$1; test $as_status -eq 0 && as_status=1
++  if test "$4"; then
++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
++  fi
++  $as_echo "$as_me: error: $2" >&2
+   as_fn_exit $as_status
+ } # as_fn_error
+ 
+ if expr a : '\(a\)' >/dev/null 2>&1 &&
+    test "X`expr 00001 : '.*\(...\)'`" = X001; then
+   as_expr=expr
+ else
+   as_expr=false
+@@ -439,16 +491,20 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
+       :loop
+       s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+       t loop
+       s/-\n.*//
+     ' >$as_me.lineno &&
+   chmod +x "$as_me.lineno" ||
+     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ 
++  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
++  # already done that, so ensure we don't try to do so again and fall
++  # in an infinite loop.  This has already happened in practice.
++  _as_can_reexec=no; export _as_can_reexec
+   # Don't try to exec as it changes $[0], causing all sort of problems
+   # (the dirname of $[0] is not the place where we might find the
+   # original and so on.  Autoconf is especially sensitive to this).
+   . "./$as_me.lineno"
+   # Exit status is that of the last command.
+   exit
+ }
+ 
+@@ -473,221 +529,54 @@ else
+   mkdir conf$$.dir 2>/dev/null
+ fi
+ if (echo >conf$$.file) 2>/dev/null; then
+   if ln -s conf$$.file conf$$ 2>/dev/null; then
+     as_ln_s='ln -s'
+     # ... but there are two gotchas:
+     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+-    # In both cases, we have to default to `cp -p'.
++    # In both cases, we have to default to `cp -pR'.
+     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+-      as_ln_s='cp -p'
++      as_ln_s='cp -pR'
+   elif ln conf$$.file conf$$ 2>/dev/null; then
+     as_ln_s=ln
+   else
+-    as_ln_s='cp -p'
+-  fi
+-else
+-  as_ln_s='cp -p'
++    as_ln_s='cp -pR'
++  fi
++else
++  as_ln_s='cp -pR'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+ rmdir conf$$.dir 2>/dev/null
+ 
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p='mkdir -p "$as_dir"'
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+ fi
+ 
+-if test -x / >/dev/null 2>&1; then
+-  as_test_x='test -x'
+-else
+-  if ls -dL / >/dev/null 2>&1; then
+-    as_ls_L_option=L
+-  else
+-    as_ls_L_option=
+-  fi
+-  as_test_x='
+-    eval sh -c '\''
+-      if test -d "$1"; then
+-	test -d "$1/.";
+-      else
+-	case $1 in #(
+-	-*)set "./$1";;
+-	esac;
+-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+-	???[sx]*):;;*)false;;esac;fi
+-    '\'' sh
+-  '
+-fi
+-as_executable_p=$as_test_x
++as_test_x='test -x'
++as_executable_p=as_fn_executable_p
+ 
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+-
+-
+-# Check that we are running under the correct shell.
+ SHELL=${CONFIG_SHELL-/bin/sh}
+ 
+-case X$lt_ECHO in
+-X*--fallback-echo)
+-  # Remove one level of quotation (which was required for Make).
+-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+-  ;;
+-esac
+-
+-ECHO=${lt_ECHO-echo}
+-if test "X$1" = X--no-reexec; then
+-  # Discard the --no-reexec flag, and continue.
+-  shift
+-elif test "X$1" = X--fallback-echo; then
+-  # Avoid inline document here, it may be left over
+-  :
+-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+-  # Yippee, $ECHO works!
+-  :
+-else
+-  # Restart under the correct shell.
+-  exec $SHELL "$0" --no-reexec ${1+"$@"}
+-fi
+-
+-if test "X$1" = X--fallback-echo; then
+-  # used as fallback echo
+-  shift
+-  cat <<_LT_EOF
+-$*
+-_LT_EOF
+-  exit 0
+-fi
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-if test -z "$lt_ECHO"; then
+-  if test "X${echo_test_string+set}" != Xset; then
+-    # find a string as large as possible, as long as the shell can cope with it
+-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+-      then
+-        break
+-      fi
+-    done
+-  fi
+-
+-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-     test "X$echo_testing_string" = "X$echo_test_string"; then
+-    :
+-  else
+-    # The Solaris, AIX, and Digital Unix default echo programs unquote
+-    # backslashes.  This makes it impossible to quote backslashes using
+-    #   echo "$something" | sed 's/\\/\\\\/g'
+-    #
+-    # So, first we look for a working echo in the user's PATH.
+-
+-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-    for dir in $PATH /usr/ucb; do
+-      IFS="$lt_save_ifs"
+-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        ECHO="$dir/echo"
+-        break
+-      fi
+-    done
+-    IFS="$lt_save_ifs"
+-
+-    if test "X$ECHO" = Xecho; then
+-      # We didn't find a better echo, so look for alternatives.
+-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        # This shell has a builtin print -r that does the trick.
+-        ECHO='print -r'
+-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+-        # If we have ksh, try running configure again with it.
+-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+-        export ORIGINAL_CONFIG_SHELL
+-        CONFIG_SHELL=/bin/ksh
+-        export CONFIG_SHELL
+-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+-      else
+-        # Try using printf.
+-        ECHO='printf %s\n'
+-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-	   test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  # Cool, printf works
+-	  :
+-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+-	  export CONFIG_SHELL
+-	  SHELL="$CONFIG_SHELL"
+-	  export SHELL
+-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
+-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
+-        else
+-	  # maybe with a smaller string...
+-	  prev=:
+-
+-	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+-	    then
+-	      break
+-	    fi
+-	    prev="$cmd"
+-	  done
+-
+-	  if test "$prev" != 'sed 50q "$0"'; then
+-	    echo_test_string=`eval $prev`
+-	    export echo_test_string
+-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+-	  else
+-	    # Oops.  We lost completely, so just stick with echo.
+-	    ECHO=echo
+-	  fi
+-        fi
+-      fi
+-    fi
+-  fi
+-fi
+-
+-# Copy echo and quote the copy suitably for passing to libtool from
+-# the Makefile, instead of quoting the original, which is used later.
+-lt_ECHO=$ECHO
+-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+-fi
+-
+-
+-
+ 
+ test -n "$DJDIR" || exec 7<&0 </dev/null
+ exec 6>&1
+ 
+ # Name of the host.
+-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
++# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+ # so uname gets run too.
+ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+ 
+ #
+ # Initializations.
+ #
+ ac_default_prefix=/usr/local
+ ac_clean_files=
+@@ -696,19 +585,19 @@ LIBOBJS=
+ cross_compiling=no
+ subdirs=
+ MFLAGS=
+ MAKEFLAGS=
+ 
+ # Identity of this package.
+ PACKAGE_NAME='libffi'
+ PACKAGE_TARNAME='libffi'
+-PACKAGE_VERSION='3.0.10rc0'
+-PACKAGE_STRING='libffi 3.0.10rc0'
+-PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html'
++PACKAGE_VERSION='3.1-rc1'
++PACKAGE_STRING='libffi 3.1-rc1'
++PACKAGE_BUGREPORT='http://github.com/atgreen/libffi/issues'
+ PACKAGE_URL=''
+ 
+ # Factoring default headers for most tests.
+ ac_includes_default="\
+ #include <stdio.h>
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+@@ -747,19 +636,29 @@ am__EXEEXT_TRUE
+ LTLIBOBJS
+ LIBOBJS
+ toolexeclibdir
+ toolexecdir
+ FFI_DEBUG_FALSE
+ FFI_DEBUG_TRUE
+ TARGETDIR
+ TARGET
++FFI_EXEC_TRAMPOLINE_TABLE
++FFI_EXEC_TRAMPOLINE_TABLE_FALSE
++FFI_EXEC_TRAMPOLINE_TABLE_TRUE
+ sys_symbol_underscore
++HAVE_LONG_DOUBLE_VARIANT
+ HAVE_LONG_DOUBLE
+ ALLOCA
++XTENSA_FALSE
++XTENSA_TRUE
++VAX_FALSE
++VAX_TRUE
++TILE_FALSE
++TILE_TRUE
+ PA64_HPUX_FALSE
+ PA64_HPUX_TRUE
+ PA_HPUX_FALSE
+ PA_HPUX_TRUE
+ PA_LINUX_FALSE
+ PA_LINUX_TRUE
+ SH64_FALSE
+ SH64_TRUE
+@@ -772,64 +671,85 @@ S390_TRUE
+ FRV_FALSE
+ FRV_TRUE
+ LIBFFI_CRIS_FALSE
+ LIBFFI_CRIS_TRUE
+ AVR32_FALSE
+ AVR32_TRUE
+ ARM_FALSE
+ ARM_TRUE
++ARC_FALSE
++ARC_TRUE
++AARCH64_FALSE
++AARCH64_TRUE
+ POWERPC_FREEBSD_FALSE
+ POWERPC_FREEBSD_TRUE
+ POWERPC_DARWIN_FALSE
+ POWERPC_DARWIN_TRUE
+ POWERPC_AIX_FALSE
+ POWERPC_AIX_TRUE
+ POWERPC_FALSE
+ POWERPC_TRUE
++NIOS2_FALSE
++NIOS2_TRUE
+ MOXIE_FALSE
+ MOXIE_TRUE
++METAG_FALSE
++METAG_TRUE
++MICROBLAZE_FALSE
++MICROBLAZE_TRUE
++M88K_FALSE
++M88K_TRUE
+ M68K_FALSE
+ M68K_TRUE
+ M32R_FALSE
+ M32R_TRUE
+ IA64_FALSE
+ IA64_TRUE
+ ALPHA_FALSE
+ ALPHA_TRUE
++X86_DARWIN64_FALSE
++X86_DARWIN64_TRUE
++X86_DARWIN32_FALSE
++X86_DARWIN32_TRUE
+ X86_DARWIN_FALSE
+ X86_DARWIN_TRUE
+ X86_WIN64_FALSE
+ X86_WIN64_TRUE
+ X86_WIN32_FALSE
+ X86_WIN32_TRUE
+ X86_FREEBSD_FALSE
+ X86_FREEBSD_TRUE
+ X86_FALSE
+ X86_TRUE
+ SPARC_FALSE
+ SPARC_TRUE
++BFIN_FALSE
++BFIN_TRUE
+ MIPS_FALSE
+ MIPS_TRUE
+ AM_LTLDFLAGS
+ AM_RUNTESTFLAGS
+ TESTSUBDIR_FALSE
+ TESTSUBDIR_TRUE
+ MAINT
+ MAINTAINER_MODE_FALSE
+ MAINTAINER_MODE_TRUE
++PRTDIAG
+ CPP
+ OTOOL64
+ OTOOL
+ LIPO
+ NMEDIT
+ DSYMUTIL
+-lt_ECHO
++MANIFEST_TOOL
+ RANLIB
++ac_ct_AR
+ AR
++DLLTOOL
+ OBJDUMP
+ LN_S
+ NM
+ ac_ct_DUMPBIN
+ DUMPBIN
+ LD
+ FGREP
+ EGREP
+@@ -839,29 +759,34 @@ LIBTOOL
+ am__fastdepCCAS_FALSE
+ am__fastdepCCAS_TRUE
+ CCASDEPMODE
+ CCASFLAGS
+ CCAS
+ am__fastdepCC_FALSE
+ am__fastdepCC_TRUE
+ CCDEPMODE
++am__nodep
+ AMDEPBACKSLASH
+ AMDEP_FALSE
+ AMDEP_TRUE
+ am__quote
+ am__include
+ DEPDIR
+ OBJEXT
+ EXEEXT
+ ac_ct_CC
+ CPPFLAGS
+ LDFLAGS
+ CFLAGS
+ CC
++AM_BACKSLASH
++AM_DEFAULT_VERBOSITY
++AM_DEFAULT_V
++AM_V
+ am__untar
+ am__tar
+ AMTAR
+ am__leading_dot
+ SET_MAKE
+ AWK
+ mkdir_p
+ MKDIR_P
+@@ -875,16 +800,17 @@ AUTOCONF
+ ACLOCAL
+ VERSION
+ PACKAGE
+ CYGPATH_W
+ am__isrc
+ INSTALL_DATA
+ INSTALL_SCRIPT
+ INSTALL_PROGRAM
++ax_enable_builddir_sed
+ target_os
+ target_vendor
+ target_cpu
+ target
+ host_os
+ host_vendor
+ host_cpu
+ host
+@@ -928,24 +854,30 @@ PACKAGE_STRING
+ PACKAGE_VERSION
+ PACKAGE_TARNAME
+ PACKAGE_NAME
+ PATH_SEPARATOR
+ SHELL'
+ ac_subst_files=''
+ ac_user_opts='
+ enable_option_checking
++enable_builddir
++enable_silent_rules
+ enable_dependency_tracking
+ enable_shared
+ enable_static
+ with_pic
+ enable_fast_install
+ with_gnu_ld
++with_sysroot
+ enable_libtool_lock
++enable_portable_binary
++with_gcc_arch
+ enable_maintainer_mode
++enable_pax_emutramp
+ enable_debug
+ enable_structs
+ enable_raw_api
+ enable_purify_safety
+ '
+       ac_precious_vars='build_alias
+ host_alias
+ target_alias
+@@ -1010,18 +942,19 @@ do
+   # If the previous option needs an argument, assign it.
+   if test -n "$ac_prev"; then
+     eval $ac_prev=\$ac_option
+     ac_prev=
+     continue
+   fi
+ 
+   case $ac_option in
+-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+-  *)	ac_optarg=yes ;;
++  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++  *=)   ac_optarg= ;;
++  *)    ac_optarg=yes ;;
+   esac
+ 
+   # Accept the important Cygnus configure options, so we can diagnose typos.
+ 
+   case $ac_dashdash$ac_option in
+   --)
+     ac_dashdash=yes ;;
+ 
+@@ -1056,17 +989,17 @@ do
+   -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+   | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+     datarootdir=$ac_optarg ;;
+ 
+   -disable-* | --disable-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid feature name: $ac_useropt"
++      as_fn_error $? "invalid feature name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "enable_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+@@ -1082,17 +1015,17 @@ do
+     ac_prev=dvidir ;;
+   -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+     dvidir=$ac_optarg ;;
+ 
+   -enable-* | --enable-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid feature name: $ac_useropt"
++      as_fn_error $? "invalid feature name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "enable_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+@@ -1286,33 +1219,33 @@ do
+ 
+   -version | --version | --versio | --versi | --vers | -V)
+     ac_init_version=: ;;
+ 
+   -with-* | --with-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid package name: $ac_useropt"
++      as_fn_error $? "invalid package name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "with_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+     esac
+     eval with_$ac_useropt=\$ac_optarg ;;
+ 
+   -without-* | --without-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid package name: $ac_useropt"
++      as_fn_error $? "invalid package name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "with_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+@@ -1332,50 +1265,50 @@ do
+ 
+   -x-libraries | --x-libraries | --x-librarie | --x-librari \
+   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+     ac_prev=x_libraries ;;
+   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+     x_libraries=$ac_optarg ;;
+ 
+-  -*) as_fn_error "unrecognized option: \`$ac_option'
+-Try \`$0 --help' for more information."
++  -*) as_fn_error $? "unrecognized option: \`$ac_option'
++Try \`$0 --help' for more information"
+     ;;
+ 
+   *=*)
+     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+     # Reject names that are not valid shell variable names.
+     case $ac_envvar in #(
+       '' | [0-9]* | *[!_$as_cr_alnum]* )
+-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
++      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+     esac
+     eval $ac_envvar=\$ac_optarg
+     export $ac_envvar ;;
+ 
+   *)
+     # FIXME: should be removed in autoconf 3.0.
+     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
++    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+     ;;
+ 
+   esac
+ done
+ 
+ if test -n "$ac_prev"; then
+   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+-  as_fn_error "missing argument to $ac_option"
++  as_fn_error $? "missing argument to $ac_option"
+ fi
+ 
+ if test -n "$ac_unrecognized_opts"; then
+   case $enable_option_checking in
+     no) ;;
+-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
++    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+   esac
+ fi
+ 
+ # Check all directory arguments for consistency.
+ for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ 		datadir sysconfdir sharedstatedir localstatedir includedir \
+ 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+@@ -1388,49 +1321,47 @@ do
+       ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+       eval $ac_var=\$ac_val;;
+   esac
+   # Be sure to have absolute directory names.
+   case $ac_val in
+     [\\/$]* | ?:[\\/]* )  continue;;
+     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+   esac
+-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
++  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+ done
+ 
+ # There might be people who depend on the old broken behavior: `$host'
+ # used to hold the argument of --host etc.
+ # FIXME: To remove some day.
+ build=$build_alias
+ host=$host_alias
+ target=$target_alias
+ 
+ # FIXME: To remove some day.
+ if test "x$host_alias" != x; then
+   if test "x$build_alias" = x; then
+     cross_compiling=maybe
+-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+-    If a cross compiler is detected then cross compile mode will be used." >&2
+   elif test "x$build_alias" != "x$host_alias"; then
+     cross_compiling=yes
+   fi
+ fi
+ 
+ ac_tool_prefix=
+ test -n "$host_alias" && ac_tool_prefix=$host_alias-
+ 
+ test "$silent" = yes && exec 6>/dev/null
+ 
+ 
+ ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ ac_ls_di=`ls -di .` &&
+ ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+-  as_fn_error "working directory cannot be determined"
++  as_fn_error $? "working directory cannot be determined"
+ test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+-  as_fn_error "pwd does not report name of working directory"
++  as_fn_error $? "pwd does not report name of working directory"
+ 
+ 
+ # Find the source files, if location was not specified.
+ if test -z "$srcdir"; then
+   ac_srcdir_defaulted=yes
+   # Try the directory containing this script, then the parent directory.
+   ac_confdir=`$as_dirname -- "$as_myself" ||
+ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+@@ -1459,21 +1390,21 @@ if test -z "$srcdir"; then
+   if test ! -r "$srcdir/$ac_unique_file"; then
+     srcdir=..
+   fi
+ else
+   ac_srcdir_defaulted=no
+ fi
+ if test ! -r "$srcdir/$ac_unique_file"; then
+   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
++  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+ fi
+ ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ ac_abs_confdir=`(
+-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
++	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ 	pwd)`
+ # When building in place, set srcdir=.
+ if test "$ac_abs_confdir" = "$ac_pwd"; then
+   srcdir=.
+ fi
+ # Remove unnecessary trailing slashes from srcdir.
+ # Double slashes in file names in object file debugging info
+ # mess up M-x gdb in Emacs.
+@@ -1489,31 +1420,31 @@ done
+ 
+ #
+ # Report the --help message.
+ #
+ if test "$ac_init_help" = "long"; then
+   # Omit some internal or obsolete options to make the list less imposing.
+   # This message is too long to be a string in the A/UX 3.1 sh.
+   cat <<_ACEOF
+-\`configure' configures libffi 3.0.10rc0 to adapt to many kinds of systems.
++\`configure' configures libffi 3.1-rc1 to adapt to many kinds of systems.
+ 
+ Usage: $0 [OPTION]... [VAR=VALUE]...
+ 
+ To assign environment variables (e.g., CC, CFLAGS...), specify them as
+ VAR=VALUE.  See below for descriptions of some of the useful variables.
+ 
+ Defaults for the options are specified in brackets.
+ 
+ Configuration:
+   -h, --help              display this help and exit
+       --help=short        display options specific to this package
+       --help=recursive    display the short help of all the included packages
+   -V, --version           display version information and exit
+-  -q, --quiet, --silent   do not print \`checking...' messages
++  -q, --quiet, --silent   do not print \`checking ...' messages
+       --cache-file=FILE   cache test results in FILE [disabled]
+   -C, --config-cache      alias for \`--cache-file=config.cache'
+   -n, --no-create         do not create output files
+       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+ 
+ Installation directories:
+   --prefix=PREFIX         install architecture-independent files in PREFIX
+                           [$ac_default_prefix]
+@@ -1560,61 +1491,76 @@ System types:
+   --build=BUILD     configure for building on BUILD [guessed]
+   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+   --target=TARGET   configure for building compilers for TARGET [HOST]
+ _ACEOF
+ fi
+ 
+ if test -n "$ac_init_help"; then
+   case $ac_init_help in
+-     short | recursive ) echo "Configuration of libffi 3.0.10rc0:";;
++     short | recursive ) echo "Configuration of libffi 3.1-rc1:";;
+    esac
+   cat <<\_ACEOF
+ 
+ Optional Features:
+   --disable-option-checking  ignore unrecognized --enable/--with options
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+-  --disable-dependency-tracking  speeds up one-time build
+-  --enable-dependency-tracking   do not reject slow dependency extractors
++  --disable-builddir      disable automatic build in subdir of sources
++
++  --enable-silent-rules   less verbose build output (undo: "make V=1")
++  --disable-silent-rules  verbose build output (undo: "make V=0")
++  --enable-dependency-tracking
++                          do not reject slow dependency extractors
++  --disable-dependency-tracking
++                          speeds up one-time build
+   --enable-shared[=PKGS]  build shared libraries [default=yes]
+   --enable-static[=PKGS]  build static libraries [default=yes]
+   --enable-fast-install[=PKGS]
+                           optimize for fast installation [default=yes]
+   --disable-libtool-lock  avoid locking (might break parallel builds)
+-  --enable-maintainer-mode  enable make rules and dependencies not useful
+-			  (and sometimes confusing) to the casual installer
++  --enable-portable-binary
++                          disable compiler optimizations that would produce
++                          unportable binaries
++  --enable-maintainer-mode
++                          enable make rules and dependencies not useful (and
++                          sometimes confusing) to the casual installer
++  --enable-pax_emutramp       enable pax emulated trampolines, for we can't use PROT_EXEC
+   --enable-debug          debugging mode
+   --disable-structs       omit code for struct support
+   --disable-raw-api       make the raw api unavailable
+   --enable-purify-safety  purify-safe mode
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+-  --with-pic              try to use only PIC/non-PIC objects [default=use
++  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                           both]
+   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
++  --with-sysroot=DIR Search for dependent libraries within DIR
++                        (or the compiler's sysroot if not specified).
++  --with-gcc-arch=<arch>  use architecture <arch> for gcc -march/-mtune,
++                          instead of guessing
+ 
+ Some influential environment variables:
+   CC          C compiler command
+   CFLAGS      C compiler flags
+   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+               nonstandard directory <lib dir>
+   LIBS        libraries to pass to the linker, e.g. -l<library>
+   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+               you have headers in a nonstandard directory <include dir>
+   CCAS        assembler compiler command (defaults to CC)
+   CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
+   CPP         C preprocessor
+ 
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+ 
+-Report bugs to <http://gcc.gnu.org/bugs.html>.
++Report bugs to <http://github.com/atgreen/libffi/issues>.
+ _ACEOF
+ ac_status=$?
+ fi
+ 
+ if test "$ac_init_help" = "recursive"; then
+   # If there are subdirs, report their specific --help.
+   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+     test -d "$ac_dir" ||
+@@ -1667,20 +1613,20 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_
+     fi || ac_status=$?
+     cd "$ac_pwd" || { ac_status=$?; break; }
+   done
+ fi
+ 
+ test -n "$ac_init_help" && exit $ac_status
+ if $ac_init_version; then
+   cat <<\_ACEOF
+-libffi configure 3.0.10rc0
+-generated by GNU Autoconf 2.65
+-
+-Copyright (C) 2009 Free Software Foundation, Inc.
++libffi configure 3.1-rc1
++generated by GNU Autoconf 2.69
++
++Copyright (C) 2012 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+   exit
+ fi
+ 
+ ## ------------------------ ##
+ ## Autoconf initialization. ##
+@@ -1714,17 +1660,17 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
+        } && test -s conftest.$ac_objext; then :
+   ac_retval=0
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ 	ac_retval=1
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_compile
+ 
+ # ac_fn_c_try_link LINENO
+ # -----------------------
+ # Try to link conftest.$ac_ext, and return whether this succeeded.
+ ac_fn_c_try_link ()
+@@ -1746,45 +1692,45 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
+     mv -f conftest.er1 conftest.err
+   fi
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; } && {
+ 	 test -z "$ac_c_werror_flag" ||
+ 	 test ! -s conftest.err
+        } && test -s conftest$ac_exeext && {
+ 	 test "$cross_compiling" = yes ||
+-	 $as_test_x conftest$ac_exeext
++	 test -x conftest$ac_exeext
+        }; then :
+   ac_retval=0
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ 	ac_retval=1
+ fi
+   # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+   # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+   # interfere with the next link command; also delete a directory that is
+   # left behind by Apple's compiler.  We do this before executing the actions.
+   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_link
+ 
+ # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists and can be compiled using the include files in
+ # INCLUDES, setting the cache variable VAR accordingly.
+ ac_fn_c_check_header_compile ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ $4
+ #include <$2>
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+@@ -1792,17 +1738,17 @@ if ac_fn_c_try_compile "$LINENO"; then :
+ else
+   eval "$3=no"
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ 
+ } # ac_fn_c_check_header_compile
+ 
+ # ac_fn_c_try_cpp LINENO
+ # ----------------------
+ # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ ac_fn_c_try_cpp ()
+ {
+@@ -1817,28 +1763,28 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
+   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+   ac_status=$?
+   if test -s conftest.err; then
+     grep -v '^ *+' conftest.err >conftest.er1
+     cat conftest.er1 >&5
+     mv -f conftest.er1 conftest.err
+   fi
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-  test $ac_status = 0; } >/dev/null && {
++  test $ac_status = 0; } > conftest.i && {
+ 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ 	 test ! -s conftest.err
+        }; then :
+   ac_retval=0
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+     ac_retval=1
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_cpp
+ 
+ # ac_fn_c_try_run LINENO
+ # ----------------------
+ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+ # that executables *can* be run.
+@@ -1870,30 +1816,30 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
+ else
+   $as_echo "$as_me: program exited with status $ac_status" >&5
+        $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+        ac_retval=$ac_status
+ fi
+   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_run
+ 
+ # ac_fn_c_check_func LINENO FUNC VAR
+ # ----------------------------------
+ # Tests whether FUNC exists, setting the cache variable VAR accordingly
+ ac_fn_c_check_func ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ /* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+ #define $2 innocuous_$2
+ 
+@@ -1938,32 +1884,215 @@ else
+   eval "$3=no"
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ 
+ } # ac_fn_c_check_func
+ 
++# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
++# --------------------------------------------
++# Tries to find the compile-time value of EXPR in a program that includes
++# INCLUDES, setting VAR accordingly. Returns whether the value could be
++# computed
++ac_fn_c_compute_int ()
++{
++  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++  if test "$cross_compiling" = yes; then
++    # Depending upon the size, compute the lo and hi bounds.
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) >= 0)];
++test_array [0] = 0;
++return test_array [0];
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) <= $ac_mid)];
++test_array [0] = 0;
++return test_array [0];
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_hi=$ac_mid; break
++else
++  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
++			if test $ac_lo -le $ac_mid; then
++			  ac_lo= ac_hi=
++			  break
++			fi
++			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) < 0)];
++test_array [0] = 0;
++return test_array [0];
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) >= $ac_mid)];
++test_array [0] = 0;
++return test_array [0];
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_lo=$ac_mid; break
++else
++  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
++			if test $ac_mid -le $ac_hi; then
++			  ac_lo= ac_hi=
++			  break
++			fi
++			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  ac_lo= ac_hi=
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) <= $ac_mid)];
++test_array [0] = 0;
++return test_array [0];
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_hi=$ac_mid
++else
++  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in #((
++?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
++'') ac_retval=1 ;;
++esac
++  else
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++$4
++static long int longval () { return $2; }
++static unsigned long int ulongval () { return $2; }
++#include <stdio.h>
++#include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (($2) < 0)
++    {
++      long int i = longval ();
++      if (i != ($2))
++	return 1;
++      fprintf (f, "%ld", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ($2))
++	return 1;
++      fprintf (f, "%lu", i);
++    }
++  /* Do not output a trailing newline, as this causes \r\n confusion
++     on some platforms.  */
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
++else
++  ac_retval=1
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++rm -f conftest.val
++
++  fi
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++  as_fn_set_status $ac_retval
++
++} # ac_fn_c_compute_int
++
+ # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists, giving a warning if it cannot be compiled using
+ # the include files in INCLUDES and setting the cache variable VAR
+ # accordingly.
+ ac_fn_c_check_header_mongrel ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++  if eval \${$3+:} false; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+ else
+   # Is the header compilable?
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+@@ -1989,17 +2118,17 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_
+ /* end confdefs.h.  */
+ #include <$2>
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+   ac_header_preproc=yes
+ else
+   ac_header_preproc=no
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+ $as_echo "$ac_header_preproc" >&6; }
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+   yes:no: )
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+ $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+@@ -2012,222 +2141,96 @@ case $ac_header_compiler:$ac_header_prep
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+ $as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+ $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+-( cat <<\_ASBOX
+-## ------------------------------------------- ##
+-## Report this to http://gcc.gnu.org/bugs.html ##
+-## ------------------------------------------- ##
+-_ASBOX
++( $as_echo "## ------------------------------------------------------ ##
++## Report this to http://github.com/atgreen/libffi/issues ##
++## ------------------------------------------------------ ##"
+      ) | sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   eval "$3=\$ac_header_compiler"
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ 
+ } # ac_fn_c_check_header_mongrel
+ 
+-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+-# --------------------------------------------
+-# Tries to find the compile-time value of EXPR in a program that includes
+-# INCLUDES, setting VAR accordingly. Returns whether the value could be
+-# computed
+-ac_fn_c_compute_int ()
++# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
++# -------------------------------------------
++# Tests whether TYPE exists after having included INCLUDES, setting cache
++# variable VAR accordingly.
++ac_fn_c_check_type ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-  if test "$cross_compiling" = yes; then
+-    # Depending upon the size, compute the lo and hi bounds.
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if eval \${$3+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  eval "$3=no"
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ $4
+ int
+ main ()
+ {
+-static int test_array [1 - 2 * !(($2) >= 0)];
+-test_array [0] = 0
+-
++if (sizeof ($2))
++	 return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+-  ac_lo=0 ac_mid=0
+-  while :; do
+-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ $4
+ int
+ main ()
+ {
+-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+-test_array [0] = 0
+-
++if (sizeof (($2)))
++	    return 0;
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+-  ac_hi=$ac_mid; break
+-else
+-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+-			if test $ac_lo -le $ac_mid; then
+-			  ac_lo= ac_hi=
+-			  break
+-			fi
+-			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
++
++else
++  eval "$3=yes"
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-  done
+-else
+-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+-$4
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(($2) < 0)];
+-test_array [0] = 0
+-
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+-  ac_hi=-1 ac_mid=-1
+-  while :; do
+-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+-$4
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+-test_array [0] = 0
+-
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+-  ac_lo=$ac_mid; break
+-else
+-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+-			if test $ac_mid -le $ac_hi; then
+-			  ac_lo= ac_hi=
+-			  break
+-			fi
+-			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-  done
+-else
+-  ac_lo= ac_hi=
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-# Binary search between lo and hi bounds.
+-while test "x$ac_lo" != "x$ac_hi"; do
+-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+-$4
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+-test_array [0] = 0
+-
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+-  ac_hi=$ac_mid
+-else
+-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-case $ac_lo in #((
+-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+-'') ac_retval=1 ;;
+-esac
+-  else
+-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+-$4
+-static long int longval () { return $2; }
+-static unsigned long int ulongval () { return $2; }
+-#include <stdio.h>
+-#include <stdlib.h>
+-int
+-main ()
+-{
+-
+-  FILE *f = fopen ("conftest.val", "w");
+-  if (! f)
+-    return 1;
+-  if (($2) < 0)
+-    {
+-      long int i = longval ();
+-      if (i != ($2))
+-	return 1;
+-      fprintf (f, "%ld", i);
+-    }
+-  else
+-    {
+-      unsigned long int i = ulongval ();
+-      if (i != ($2))
+-	return 1;
+-      fprintf (f, "%lu", i);
+-    }
+-  /* Do not output a trailing newline, as this causes \r\n confusion
+-     on some platforms.  */
+-  return ferror (f) || fclose (f) != 0;
+-
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+-else
+-  ac_retval=1
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+-rm -f conftest.val
+-
+-  fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+-  as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_compute_int
++fi
++eval ac_res=\$$3
++	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++
++} # ac_fn_c_check_type
+ cat >config.log <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+ 
+-It was created by libffi $as_me 3.0.10rc0, which was
+-generated by GNU Autoconf 2.65.  Invocation command line was
++It was created by libffi $as_me 3.1-rc1, which was
++generated by GNU Autoconf 2.69.  Invocation command line was
+ 
+   $ $0 $@
+ 
+ _ACEOF
+ exec 5>>config.log
+ {
+ cat <<_ASUNAME
+ ## --------- ##
+@@ -2327,21 +2330,19 @@ done
+ # would cause problems or look ugly.
+ # WARNING: Use '\'' to represent an apostrophe within the trap.
+ # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+ trap 'exit_status=$?
+   # Save into config.log some information that might help in debugging.
+   {
+     echo
+ 
+-    cat <<\_ASBOX
+-## ---------------- ##
++    $as_echo "## ---------------- ##
+ ## Cache variables. ##
+-## ---------------- ##
+-_ASBOX
++## ---------------- ##"
+     echo
+     # The following way of writing the cache mishandles newlines in values,
+ (
+   for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+     eval ac_val=\$$ac_var
+     case $ac_val in #(
+     *${as_nl}*)
+       case $ac_var in #(
+@@ -2365,56 +2366,50 @@ trap 'exit_status=$?
+     *)
+       sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+       ;;
+     esac |
+     sort
+ )
+     echo
+ 
+-    cat <<\_ASBOX
+-## ----------------- ##
++    $as_echo "## ----------------- ##
+ ## Output variables. ##
+-## ----------------- ##
+-_ASBOX
++## ----------------- ##"
+     echo
+     for ac_var in $ac_subst_vars
+     do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+     done | sort
+     echo
+ 
+     if test -n "$ac_subst_files"; then
+-      cat <<\_ASBOX
+-## ------------------- ##
++      $as_echo "## ------------------- ##
+ ## File substitutions. ##
+-## ------------------- ##
+-_ASBOX
++## ------------------- ##"
+       echo
+       for ac_var in $ac_subst_files
+       do
+ 	eval ac_val=\$$ac_var
+ 	case $ac_val in
+ 	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ 	esac
+ 	$as_echo "$ac_var='\''$ac_val'\''"
+       done | sort
+       echo
+     fi
+ 
+     if test -s confdefs.h; then
+-      cat <<\_ASBOX
+-## ----------- ##
++      $as_echo "## ----------- ##
+ ## confdefs.h. ##
+-## ----------- ##
+-_ASBOX
++## ----------- ##"
+       echo
+       cat confdefs.h
+       echo
+     fi
+     test "$ac_signal" != 0 &&
+       $as_echo "$as_me: caught signal $ac_signal"
+     $as_echo "$as_me: exit $exit_status"
+   } >&5
+@@ -2459,32 +2454,41 @@ cat >>confdefs.h <<_ACEOF
+ _ACEOF
+ 
+ 
+ # Let the site file select an alternate cache file if it wants to.
+ # Prefer an explicitly selected file to automatically selected ones.
+ ac_site_file1=NONE
+ ac_site_file2=NONE
+ if test -n "$CONFIG_SITE"; then
+-  ac_site_file1=$CONFIG_SITE
++  # We do not want a PATH search for config.site.
++  case $CONFIG_SITE in #((
++    -*)  ac_site_file1=./$CONFIG_SITE;;
++    */*) ac_site_file1=$CONFIG_SITE;;
++    *)   ac_site_file1=./$CONFIG_SITE;;
++  esac
+ elif test "x$prefix" != xNONE; then
+   ac_site_file1=$prefix/share/config.site
+   ac_site_file2=$prefix/etc/config.site
+ else
+   ac_site_file1=$ac_default_prefix/share/config.site
+   ac_site_file2=$ac_default_prefix/etc/config.site
+ fi
+ for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+ do
+   test "x$ac_site_file" = xNONE && continue
+   if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
+     sed 's/^/| /' "$ac_site_file" >&5
+-    . "$ac_site_file"
++    . "$ac_site_file" \
++      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "failed to load site script $ac_site_file
++See \`config.log' for more details" "$LINENO" 5; }
+   fi
+ done
+ 
+ if test -r "$cache_file"; then
+   # Some versions of bash will fail to source /dev/null (special files
+   # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+   if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+@@ -2550,17 +2554,17 @@ for ac_var in $ac_precious_vars; do
+     esac
+   fi
+ done
+ if $ac_cache_corrupted; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+ $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
++  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ fi
+ ## -------------------- ##
+ ## Main body of script. ##
+ ## -------------------- ##
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+@@ -2568,60 +2572,66 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ ac_config_headers="$ac_config_headers fficonfig.h"
+ 
+ 
+ ac_aux_dir=
+ for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+-  for ac_t in install-sh install.sh shtool; do
+-    if test -f "$ac_dir/$ac_t"; then
+-      ac_aux_dir=$ac_dir
+-      ac_install_sh="$ac_aux_dir/$ac_t -c"
+-      break 2
+-    fi
+-  done
++  if test -f "$ac_dir/install-sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install-sh -c"
++    break
++  elif test -f "$ac_dir/install.sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install.sh -c"
++    break
++  elif test -f "$ac_dir/shtool"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/shtool install -c"
++    break
++  fi
+ done
+ if test -z "$ac_aux_dir"; then
+-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
++  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+ fi
+ 
+ # These three variables are undocumented and unsupported,
+ # and are intended to be withdrawn in a future Autoconf release.
+ # They can cause serious problems if a builder's source tree is in a directory
+ # whose full name contains unusual characters.
+ ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+ 
+ 
+ # Make sure we can run config.sub.
+ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
++  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+ $as_echo_n "checking build system type... " >&6; }
+-if test "${ac_cv_build+set}" = set; then :
++if ${ac_cv_build+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_build_alias=$build_alias
+ test "x$ac_build_alias" = x &&
+   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ test "x$ac_build_alias" = x &&
+-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
++  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
++  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+ $as_echo "$ac_cv_build" >&6; }
+ case $ac_cv_build in
+ *-*-*) ;;
+-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
++*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+ esac
+ build=$ac_cv_build
+ ac_save_IFS=$IFS; IFS='-'
+ set x $ac_cv_build
+ shift
+ build_cpu=$1
+ build_vendor=$2
+ shift; shift
+@@ -2629,32 +2639,32 @@ shift; shift
+ # except with old shells:
+ build_os=$*
+ IFS=$ac_save_IFS
+ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+ $as_echo_n "checking host system type... " >&6; }
+-if test "${ac_cv_host+set}" = set; then :
++if ${ac_cv_host+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test "x$host_alias" = x; then
+   ac_cv_host=$ac_cv_build
+ else
+   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
++    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+ $as_echo "$ac_cv_host" >&6; }
+ case $ac_cv_host in
+ *-*-*) ;;
+-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
++*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+ esac
+ host=$ac_cv_host
+ ac_save_IFS=$IFS; IFS='-'
+ set x $ac_cv_host
+ shift
+ host_cpu=$1
+ host_vendor=$2
+ shift; shift
+@@ -2662,32 +2672,32 @@ shift; shift
+ # except with old shells:
+ host_os=$*
+ IFS=$ac_save_IFS
+ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+ $as_echo_n "checking target system type... " >&6; }
+-if test "${ac_cv_target+set}" = set; then :
++if ${ac_cv_target+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test "x$target_alias" = x; then
+   ac_cv_target=$ac_cv_host
+ else
+   ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+-    as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
++    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+ $as_echo "$ac_cv_target" >&6; }
+ case $ac_cv_target in
+ *-*-*) ;;
+-*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
++*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+ esac
+ target=$ac_cv_target
+ ac_save_IFS=$IFS; IFS='-'
+ set x $ac_cv_target
+ shift
+ target_cpu=$1
+ target_vendor=$2
+ shift; shift
+@@ -2702,19 +2712,127 @@ case $target_os in *\ *) target_os=`echo
+ # will get canonicalized.
+ test -n "$target_alias" &&
+   test "$program_prefix$program_suffix$program_transform_name" = \
+     NONENONEs,x,x, &&
+   program_prefix=${target_alias}-
+ 
+ target_alias=${target_alias-$host_alias}
+ 
+-. ${srcdir}/configure.host
+-
+-am__api_version='1.11'
++case "${host}" in
++  frv*-elf)
++    LDFLAGS=`echo $LDFLAGS | sed "s/\-B^ *libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
++    ;;
++esac
++
++
++   # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args
++   if test "${ac_configure_args+set}" != "set" ; then
++      ac_configure_args=
++      for ac_arg in ${1+"$@"}; do
++         ac_configure_args="$ac_configure_args '$ac_arg'"
++      done
++   fi
++
++# expand $ac_aux_dir to an absolute path
++am_aux_dir=`cd $ac_aux_dir && pwd`
++
++
++ax_enable_builddir="."
++# Check whether --enable-builddir was given.
++if test "${enable_builddir+set}" = set; then :
++  enableval=$enable_builddir; ax_enable_builddir="$enableval"
++else
++  ax_enable_builddir="auto"
++fi
++
++if test ".$ac_srcdir_defaulted" != ".no" ; then
++if test ".$srcdir" = ".." ; then
++  if test -f config.status ; then
++    { $as_echo "$as_me:${as_lineno-$LINENO}: toplevel srcdir already configured... skipping subdir build" >&5
++$as_echo "$as_me: toplevel srcdir already configured... skipping subdir build" >&6;}
++  else
++    test ".$ax_enable_builddir" = "."  && ax_enable_builddir="."
++    test ".$ax_enable_builddir" = ".no"  && ax_enable_builddir="."
++    test ".$TARGET" = "." && TARGET="$target"
++    test ".$ax_enable_builddir" = ".auto" && ax_enable_builddir="$TARGET"
++    if test ".$ax_enable_builddir" != ".." ; then    # we know where to go and
++      as_dir=$ax_enable_builddir; as_fn_mkdir_p
++      echo __.$ax_enable_builddir.__ > $ax_enable_builddir/conftest.tmp
++      cd $ax_enable_builddir
++      if grep __.$ax_enable_builddir.__ conftest.tmp >/dev/null 2>/dev/null ; then
++        rm conftest.tmp
++        { $as_echo "$as_me:${as_lineno-$LINENO}: result: continue configure in default builddir \"./$ax_enable_builddir\"" >&5
++$as_echo "continue configure in default builddir \"./$ax_enable_builddir\"" >&6; }
++      else
++        as_fn_error $? "could not change to default builddir \"./$ax_enable_builddir\"" "$LINENO" 5
++      fi
++      srcdir=`echo "$ax_enable_builddir" |
++              sed -e 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g;s,[/]$,,;'`
++      # going to restart from subdirectory location
++      test -f $srcdir/config.log   && mv $srcdir/config.log   .
++      test -f $srcdir/confdefs.h   && mv $srcdir/confdefs.h   .
++      test -f $srcdir/conftest.log && mv $srcdir/conftest.log .
++      test -f $srcdir/$cache_file  && mv $srcdir/$cache_file  .
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ....exec $SHELL $srcdir/$0 \"--srcdir=$srcdir\" \"--enable-builddir=$ax_enable_builddir\" ${1+\"$@\"}" >&5
++$as_echo "....exec $SHELL $srcdir/$0 \"--srcdir=$srcdir\" \"--enable-builddir=$ax_enable_builddir\" ${1+\"$@\"}" >&6; }
++      case "$0" in # restart
++       /\\*) eval $SHELL "'$0'" "'--srcdir=$srcdir'" "'--enable-builddir=$ax_enable_builddir'" $ac_configure_args ;;
++       *) eval $SHELL "'$srcdir/$0'" "'--srcdir=$srcdir'" "'--enable-builddir=$ax_enable_builddir'" $ac_configure_args ;;
++      esac ; exit $?
++    fi
++  fi
++fi fi
++test ".$ax_enable_builddir" = ".auto" && ax_enable_builddir="."
++# Extract the first word of "gsed sed", so it can be a program name with args.
++set dummy gsed sed; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_path_ax_enable_builddir_sed+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  case $ax_enable_builddir_sed in
++  [\\/]* | ?:[\\/]*)
++  ac_cv_path_ax_enable_builddir_sed="$ax_enable_builddir_sed" # Let the user override the test with a path.
++  ;;
++  *)
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_path_ax_enable_builddir_sed="$as_dir/$ac_word$ac_exec_ext"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++  test -z "$ac_cv_path_ax_enable_builddir_sed" && ac_cv_path_ax_enable_builddir_sed="sed"
++  ;;
++esac
++fi
++ax_enable_builddir_sed=$ac_cv_path_ax_enable_builddir_sed
++if test -n "$ax_enable_builddir_sed"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_enable_builddir_sed" >&5
++$as_echo "$ax_enable_builddir_sed" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ax_enable_builddir_auxdir="$am_aux_dir"
++ac_config_commands="$ac_config_commands buildir"
++
++
++am__api_version='1.13'
+ 
+ # Find a good install program.  We prefer a C program (faster),
+ # so one script is as good as another.  But avoid the broken or
+ # incompatible versions:
+ # SysV /etc/install, /usr/sbin/install
+ # SunOS /usr/etc/install
+ # IRIX /sbin/install
+ # AIX /bin/install
+@@ -2723,17 +2841,17 @@ am__api_version='1.11'
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+ # Reject install programs that cannot install multiple files.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+ $as_echo_n "checking for a BSD-compatible install... " >&6; }
+ if test -z "$INSTALL"; then
+-if test "${ac_cv_path_install+set}" = set; then :
++if ${ac_cv_path_install+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     # Account for people who put trailing slashes in PATH elements.
+@@ -2743,17 +2861,17 @@ case $as_dir/ in #((
+   ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+   /usr/ucb/* ) ;;
+   *)
+     # OSF1 and SCO ODT 3.0 have their own names for install.
+     # Don't use installbsd from OSF since it installs stuff as root
+     # by default.
+     for ac_prog in ginstall scoinst install; do
+       for ac_exec_ext in '' $ac_executable_extensions; do
+-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
++	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ 	  if test $ac_prog = install &&
+ 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # AIX install.  It has an incompatible calling convention.
+ 	    :
+ 	  elif test $ac_prog = install &&
+ 	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ 	    # program-specific install script used by HP pwplus--don't use.
+ 	    :
+@@ -2801,128 +2919,140 @@ fi
+ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+ 
+ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+ 
+ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+ $as_echo_n "checking whether build environment is sane... " >&6; }
+-# Just in case
+-sleep 1
+-echo timestamp > conftest.file
+ # Reject unsafe characters in $srcdir or the absolute working directory
+ # name.  Accept space and tab only in the latter.
+ am_lf='
+ '
+ case `pwd` in
+   *[\\\"\#\$\&\'\`$am_lf]*)
+-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
++    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+ esac
+ case $srcdir in
+   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+-esac
+-
+-# Do `set' in a subshell so we don't clobber the current shell's
++    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
++esac
++
++# Do 'set' in a subshell so we don't clobber the current shell's
+ # arguments.  Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+-   if test "$*" = "X"; then
+-      # -L didn't work.
+-      set X `ls -t "$srcdir/configure" conftest.file`
+-   fi
+-   rm -f conftest.file
+-   if test "$*" != "X $srcdir/configure conftest.file" \
+-      && test "$*" != "X conftest.file $srcdir/configure"; then
+-
+-      # If neither matched, then we have a broken ls.  This can happen
+-      # if, for instance, CONFIG_SHELL is bash and it inherits a
+-      # broken ls alias from the environment.  This has actually
+-      # happened.  Such a system could not be considered "sane".
+-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+-alias in your environment" "$LINENO" 5
+-   fi
+-
++   am_has_slept=no
++   for am_try in 1 2; do
++     echo "timestamp, slept: $am_has_slept" > conftest.file
++     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
++     if test "$*" = "X"; then
++	# -L didn't work.
++	set X `ls -t "$srcdir/configure" conftest.file`
++     fi
++     if test "$*" != "X $srcdir/configure conftest.file" \
++	&& test "$*" != "X conftest.file $srcdir/configure"; then
++
++	# If neither matched, then we have a broken ls.  This can happen
++	# if, for instance, CONFIG_SHELL is bash and it inherits a
++	# broken ls alias from the environment.  This has actually
++	# happened.  Such a system could not be considered "sane".
++	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
++  alias in your environment" "$LINENO" 5
++     fi
++     if test "$2" = conftest.file || test $am_try -eq 2; then
++       break
++     fi
++     # Just in case.
++     sleep 1
++     am_has_slept=yes
++   done
+    test "$2" = conftest.file
+    )
+ then
+    # Ok.
+    :
+ else
+-   as_fn_error "newly created file is older than distributed files!
++   as_fn_error $? "newly created file is older than distributed files!
+ Check your system clock" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
++# If we didn't sleep, we still need to ensure time stamps of config.status and
++# generated files are strictly newer.
++am_sleep_pid=
++if grep 'slept: no' conftest.file >/dev/null 2>&1; then
++  ( sleep 1 ) &
++  am_sleep_pid=$!
++fi
++
++rm -f conftest.file
++
+ test "$program_prefix" != NONE &&
+   program_transform_name="s&^&$program_prefix&;$program_transform_name"
+ # Use a double $ so make ignores it.
+ test "$program_suffix" != NONE &&
+   program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+ # Double any \ or $.
+ # By default was `s,x,x', remove it if useless.
+ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+ 
+-# expand $ac_aux_dir to an absolute path
+-am_aux_dir=`cd $ac_aux_dir && pwd`
+-
+ if test x"${MISSING+set}" != xset; then
+   case $am_aux_dir in
+   *\ * | *\	*)
+     MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+   *)
+     MISSING="\${SHELL} $am_aux_dir/missing" ;;
+   esac
+ fi
+ # Use eval to expand $SHELL
+-if eval "$MISSING --run true"; then
+-  am_missing_run="$MISSING --run "
++if eval "$MISSING --is-lightweight"; then
++  am_missing_run="$MISSING "
+ else
+   am_missing_run=
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
++$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+ fi
+ 
+ if test x"${install_sh}" != xset; then
+   case $am_aux_dir in
+   *\ * | *\	*)
+     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+   *)
+     install_sh="\${SHELL} $am_aux_dir/install-sh"
+   esac
+ fi
+ 
+-# Installed binaries are usually stripped using `strip' when the user
+-# run `make install-strip'.  However `strip' might not be the right
++# Installed binaries are usually stripped using 'strip' when the user
++# run "make install-strip".  However 'strip' might not be the right
+ # tool to use in cross-compilation environments, therefore Automake
+-# will honor the `STRIP' environment variable to overrule this program.
++# will honor the 'STRIP' environment variable to overrule this program.
+ if test "$cross_compiling" != no; then
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_STRIP+set}" = set; then :
++if ${ac_cv_prog_STRIP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$STRIP"; then
+   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -2940,29 +3070,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_STRIP"; then
+   ac_ct_STRIP=$STRIP
+   # Extract the first word of "strip", so it can be a program name with args.
+ set dummy strip; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
++if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_STRIP"; then
+   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_STRIP="strip"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -2993,27 +3123,27 @@ else
+ fi
+ 
+ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+ $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+ if test -z "$MKDIR_P"; then
+-  if test "${ac_cv_path_mkdir+set}" = set; then :
++  if ${ac_cv_path_mkdir+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_prog in mkdir gmkdir; do
+ 	 for ac_exec_ext in '' $ac_executable_extensions; do
+-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
++	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 	     'mkdir (GNU coreutils) '* | \
+ 	     'mkdir (coreutils) '* | \
+ 	     'mkdir (fileutils) '4.1*)
+ 	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ 	       break 3;;
+ 	   esac
+ 	 done
+@@ -3032,41 +3162,35 @@ fi
+     # break other packages using the cache if that directory is
+     # removed, or if the value is a relative name.
+     MKDIR_P="$ac_install_sh -d"
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+ $as_echo "$MKDIR_P" >&6; }
+ 
+-mkdir_p="$MKDIR_P"
+-case $mkdir_p in
+-  [\\/$]* | ?:[\\/]*) ;;
+-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+-esac
+-
+ for ac_prog in gawk mawk nawk awk
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_AWK+set}" = set; then :
++if ${ac_cv_prog_AWK+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$AWK"; then
+   ac_cv_prog_AWK="$AWK" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_AWK="$ac_prog"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -3084,25 +3208,25 @@ fi
+ 
+   test -n "$AWK" && break
+ done
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+ $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+ set x ${MAKE-make}
+ ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat >conftest.make <<\_ACEOF
+ SHELL = /bin/sh
+ all:
+ 	@echo '@@@%%%=$(MAKE)=@@@%%%'
+ _ACEOF
+-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
++# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+ case `${MAKE-make} -f conftest.make 2>/dev/null` in
+   *@@@%%%=?*=@@@%%%*)
+     eval ac_cv_prog_make_${ac_make}_set=yes;;
+   *)
+     eval ac_cv_prog_make_${ac_make}_set=no;;
+ esac
+ rm -f conftest.make
+ fi
+@@ -3120,39 +3244,78 @@ rm -rf .tst 2>/dev/null
+ mkdir .tst 2>/dev/null
+ if test -d .tst; then
+   am__leading_dot=.
+ else
+   am__leading_dot=_
+ fi
+ rmdir .tst 2>/dev/null
+ 
++# Check whether --enable-silent-rules was given.
++if test "${enable_silent_rules+set}" = set; then :
++  enableval=$enable_silent_rules;
++fi
++
++case $enable_silent_rules in # (((
++  yes) AM_DEFAULT_VERBOSITY=0;;
++   no) AM_DEFAULT_VERBOSITY=1;;
++    *) AM_DEFAULT_VERBOSITY=1;;
++esac
++am_make=${MAKE-make}
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
++$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
++if ${am_cv_make_support_nested_variables+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if $as_echo 'TRUE=$(BAR$(V))
++BAR0=false
++BAR1=true
++V=1
++am__doit:
++	@$(TRUE)
++.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
++  am_cv_make_support_nested_variables=yes
++else
++  am_cv_make_support_nested_variables=no
++fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
++$as_echo "$am_cv_make_support_nested_variables" >&6; }
++if test $am_cv_make_support_nested_variables = yes; then
++    AM_V='$(V)'
++  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
++else
++  AM_V=$AM_DEFAULT_VERBOSITY
++  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
++fi
++AM_BACKSLASH='\'
++
+ if test "`cd $srcdir && pwd`" != "`pwd`"; then
+   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+   # is not polluted with repeated "-I."
+   am__isrc=' -I$(srcdir)'
+   # test to see if srcdir already configured
+   if test -f $srcdir/config.status; then
+-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
++    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+   fi
+ fi
+ 
+ # test whether we have cygpath
+ if test -z "$CYGPATH_W"; then
+   if (cygpath --version) >/dev/null 2>/dev/null; then
+     CYGPATH_W='cygpath -w'
+   else
+     CYGPATH_W=echo
+   fi
+ fi
+ 
+ 
+ # Define the identity of the package.
+  PACKAGE='libffi'
+- VERSION='3.0.10rc0'
++ VERSION='3.1-rc1'
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define PACKAGE "$PACKAGE"
+ _ACEOF
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+@@ -3170,23 +3333,34 @@ AUTOCONF=${AUTOCONF-"${am_missing_run}au
+ AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+ 
+ 
+ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+ 
+ 
+ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+ 
++# For better backward compatibility.  To be removed once Automake 1.9.x
++# dies out for good.  For more background, see:
++# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
++# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
++mkdir_p='$(MKDIR_P)'
++
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+-# Always define AMTAR for backward compatibility.
+-
+-AMTAR=${AMTAR-"${am_missing_run}tar"}
+-
+-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
++# Always define AMTAR for backward compatibility.  Yes, it's still used
++# in the wild :-(  We should find a proper way to deprecate it ...
++AMTAR='$${TAR-tar}'
++
++
++# We'll loop over all known methods to create a tar archive until one works.
++_am_tools='gnutar  pax cpio none'
++
++am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
++
+ 
+ 
+ 
+ 
+ 
+ 
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
+ # We must force CC to /not/ be precious variables; otherwise
+@@ -3203,29 +3377,29 @@ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}gcc"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -3243,29 +3417,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="gcc"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -3296,29 +3470,29 @@ else
+ fi
+ 
+ if test -z "$CC"; then
+           if test -n "$ac_tool_prefix"; then
+     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="${ac_tool_prefix}cc"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -3336,30 +3510,30 @@ fi
+ 
+   fi
+ fi
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   ac_prog_rejected=no
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+        continue
+      fi
+     ac_cv_prog_CC="cc"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+@@ -3395,29 +3569,29 @@ fi
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl.exe
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -3439,29 +3613,29 @@ fi
+ if test -z "$CC"; then
+   ac_ct_CC=$CC
+   for ac_prog in cl.exe
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_CC="$ac_prog"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -3493,18 +3667,18 @@ esac
+   fi
+ fi
+ 
+ fi
+ 
+ 
+ test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "no acceptable C compiler found in \$PATH
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "no acceptable C compiler found in \$PATH
++See \`config.log' for more details" "$LINENO" 5; }
+ 
+ # Provide some information about the compiler.
+ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+ set X $ac_compile
+ ac_compiler=$2
+ for ac_option in --version -v -V -qversion; do
+   { { ac_try="$ac_compiler $ac_option >&5"
+ case "(($ac_try" in
+@@ -3608,19 +3782,18 @@ fi
+ if test -z "$ac_file"; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ as_fn_set_status 77
+-as_fn_error "C compiler cannot create executables
+-See \`config.log' for more details." "$LINENO" 5; }; }
++as_fn_error 77 "C compiler cannot create executables
++See \`config.log' for more details" "$LINENO" 5; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+ $as_echo_n "checking for C compiler default output file name... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+ $as_echo "$ac_file" >&6; }
+@@ -3652,18 +3825,18 @@ for ac_file in conftest.exe conftest con
+     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	  break;;
+     * ) break;;
+   esac
+ done
+ else
+   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "cannot compute suffix of executables: cannot compile and link
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "cannot compute suffix of executables: cannot compile and link
++See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ rm -f conftest conftest$ac_cv_exeext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+ $as_echo "$ac_cv_exeext" >&6; }
+ 
+ rm -f conftest.$ac_ext
+ EXEEXT=$ac_cv_exeext
+ ac_exeext=$EXEEXT
+@@ -3710,30 +3883,30 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
+   test $ac_status = 0; }; }; then
+     cross_compiling=no
+   else
+     if test "$cross_compiling" = maybe; then
+ 	cross_compiling=yes
+     else
+ 	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "cannot run C compiled programs.
++as_fn_error $? "cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+-See \`config.log' for more details." "$LINENO" 5; }
++See \`config.log' for more details" "$LINENO" 5; }
+     fi
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+ $as_echo "$cross_compiling" >&6; }
+ 
+ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ ac_clean_files=$ac_clean_files_save
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+ $as_echo_n "checking for suffix of object files... " >&6; }
+-if test "${ac_cv_objext+set}" = set; then :
++if ${ac_cv_objext+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -3763,28 +3936,28 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
+   esac
+ done
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "cannot compute suffix of object files: cannot compile
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "cannot compute suffix of object files: cannot compile
++See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ rm -f conftest.$ac_cv_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+ $as_echo "$ac_cv_objext" >&6; }
+ OBJEXT=$ac_cv_objext
+ ac_objext=$OBJEXT
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+ $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
++if ${ac_cv_c_compiler_gnu+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -3811,17 +3984,17 @@ if test $ac_compiler_gnu = yes; then
+   GCC=yes
+ else
+   GCC=
+ fi
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+ $as_echo_n "checking whether $CC accepts -g... " >&6; }
+-if test "${ac_cv_prog_cc_g+set}" = set; then :
++if ${ac_cv_prog_cc_g+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_save_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    ac_cv_prog_cc_g=no
+    CFLAGS="-g"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -3889,27 +4062,26 @@ else
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+ $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+-if test "${ac_cv_prog_cc_c89+set}" = set; then :
++if ${ac_cv_prog_cc_c89+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_cv_prog_cc_c89=no
+ ac_save_CC=$CC
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
++struct stat;
+ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+ struct buf { int x; };
+ FILE * (*rcsopen) (struct buf *, struct stat *, int);
+ static char *e (p, i)
+      char **p;
+      int i;
+ {
+   return p[i];
+@@ -4002,17 +4174,17 @@ END
+ # If we don't find an include directive, just comment out the code.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+ $as_echo_n "checking for style of include used by $am_make... " >&6; }
+ am__include="#"
+ am__quote=
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+-# Ignore all kinds of additional output from `make'.
++# Ignore all kinds of additional output from 'make'.
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+   am__include=include
+   am__quote=
+   _am_result=GNU
+   ;;
+ esac
+ # Now try BSD make style include.
+@@ -4035,40 +4207,42 @@ rm -f confinc confmf
+ # Check whether --enable-dependency-tracking was given.
+ if test "${enable_dependency_tracking+set}" = set; then :
+   enableval=$enable_dependency_tracking;
+ fi
+ 
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
++  am__nodep='_no'
+ fi
+  if test "x$enable_dependency_tracking" != xno; then
+   AMDEP_TRUE=
+   AMDEP_FALSE='#'
+ else
+   AMDEP_TRUE='#'
+   AMDEP_FALSE=
+ fi
+ 
+ 
+ 
+ depcc="$CC"   am_compiler_list=
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
++if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+-  # making a dummy file named `D' -- because `-MD' means `put the output
+-  # in D'.
++  # making a dummy file named 'D' -- because '-MD' means "put the output
++  # in D".
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -4092,44 +4266,44 @@ else
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+-      # Solaris 8's {/usr,}/bin/sh.
+-      touch sub/conftst$i.h
++      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
++      # Solaris 10 /bin/sh.
++      echo '/* dummy */' > sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
++    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+-    # handle `-M -o', and we need to detect this.  Also, some Intel
+-    # versions had trouble with output in subdirs
++    # handle '-M -o', and we need to detect this.  Also, some Intel
++    # versions had trouble with output in subdirs.
+     am__obj=sub/conftest.${OBJEXT-o}
+     am__minus_obj="-o $am__obj"
+     case $depmode in
+     gcc)
+       # This depmode causes a compiler race in universal mode.
+       test "$am__universal" = false || continue
+       ;;
+     nosideeffect)
+-      # after this tag, mechanisms are not by side-effect, so they'll
+-      # only be used when explicitly requested
++      # After this tag, mechanisms are not by side-effect, so they'll
++      # only be used when explicitly requested.
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
+-      # This compiler won't grok `-c -o', but also, the minuso test has
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
++      # This compiler won't grok '-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+     if depmode=$depmode \
+@@ -4190,25 +4364,26 @@ test "${CCAS+set}" = set || CCAS=$CC
+ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+ 
+ 
+ 
+ depcc="$CCAS"   am_compiler_list=
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then :
++if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+-  # making a dummy file named `D' -- because `-MD' means `put the output
+-  # in D'.
++  # making a dummy file named 'D' -- because '-MD' means "put the output
++  # in D".
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -4230,44 +4405,44 @@ else
+     # we should not choose a depcomp mode which is confused by this.
+     #
+     # We need to recreate these files for each test, as the compiler may
+     # overwrite some of them when testing with obscure command lines.
+     # This happens at least with the AIX C compiler.
+     : > sub/conftest.c
+     for i in 1 2 3 4 5 6; do
+       echo '#include "conftst'$i'.h"' >> sub/conftest.c
+-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+-      # Solaris 8's {/usr,}/bin/sh.
+-      touch sub/conftst$i.h
++      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
++      # Solaris 10 /bin/sh.
++      echo '/* dummy */' > sub/conftst$i.h
+     done
+     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+ 
+-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
++    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+     # mode.  It turns out that the SunPro C++ compiler does not properly
+-    # handle `-M -o', and we need to detect this.  Also, some Intel
+-    # versions had trouble with output in subdirs
++    # handle '-M -o', and we need to detect this.  Also, some Intel
++    # versions had trouble with output in subdirs.
+     am__obj=sub/conftest.${OBJEXT-o}
+     am__minus_obj="-o $am__obj"
+     case $depmode in
+     gcc)
+       # This depmode causes a compiler race in universal mode.
+       test "$am__universal" = false || continue
+       ;;
+     nosideeffect)
+-      # after this tag, mechanisms are not by side-effect, so they'll
+-      # only be used when explicitly requested
++      # After this tag, mechanisms are not by side-effect, so they'll
++      # only be used when explicitly requested.
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
+-      # This compiler won't grok `-c -o', but also, the minuso test has
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
++      # This compiler won't grok '-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+     if depmode=$depmode \
+@@ -4320,17 +4495,17 @@ if test "x$CC" != xcc; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+ $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+ $as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+ fi
+ set dummy $CC; ac_cc=`$as_echo "$2" |
+ 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+-if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -4445,36 +4620,105 @@ fi
+ case `pwd` in
+   *\ * | *\	*)
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+ $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+ esac
+ 
+ 
+ 
+-macro_version='2.2.6b'
+-macro_revision='1.3017'
++macro_version='2.4.2'
++macro_revision='1.3337'
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ltmain="$ac_aux_dir/ltmain.sh"
+ 
++# Backslashify metacharacters that are still active within
++# double-quoted strings.
++sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
++
++# Same as above, but do not quote variable references.
++double_quote_subst='s/\(["`\\]\)/\\\1/g'
++
++# Sed substitution to delay expansion of an escaped shell variable in a
++# double_quote_subst'ed string.
++delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
++
++# Sed substitution to delay expansion of an escaped single quote.
++delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
++
++# Sed substitution to avoid accidental globbing in evaled expressions
++no_glob_subst='s/\*/\\\*/g'
++
++ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
++ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
++$as_echo_n "checking how to print strings... " >&6; }
++# Test print first, because it will be a builtin if present.
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
++   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
++  ECHO='print -r --'
++elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
++  ECHO='printf %s\n'
++else
++  # Use this function as a fallback that always works.
++  func_fallback_echo ()
++  {
++    eval 'cat <<_LTECHO_EOF
++$1
++_LTECHO_EOF'
++  }
++  ECHO='func_fallback_echo'
++fi
++
++# func_echo_all arg...
++# Invoke $ECHO with all args, space-separated.
++func_echo_all ()
++{
++    $ECHO ""
++}
++
++case "$ECHO" in
++  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
++$as_echo "printf" >&6; } ;;
++  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
++$as_echo "print -r" >&6; } ;;
++  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
++$as_echo "cat" >&6; } ;;
++esac
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+ $as_echo_n "checking for a sed that does not truncate output... " >&6; }
+-if test "${ac_cv_path_SED+set}" = set; then :
++if ${ac_cv_path_SED+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+      for ac_i in 1 2 3 4 5 6 7; do
+        ac_script="$ac_script$as_nl$ac_script"
+      done
+      echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+      { ac_script=; unset ac_script;}
+@@ -4484,17 +4728,17 @@ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_prog in sed gsed; do
+     for ac_exec_ext in '' $ac_executable_extensions; do
+       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
++      as_fn_executable_p "$ac_path_SED" || continue
+ # Check for GNU ac_path_SED and select it if it is found.
+   # Check for GNU $ac_path_SED
+ case `"$ac_path_SED" --version 2>&1` in
+ *GNU*)
+   ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+ *)
+   ac_count=0
+   $as_echo_n 0123456789 >"conftest.in"
+@@ -4519,17 +4763,17 @@ case `"$ac_path_SED" --version 2>&1` in
+ esac
+ 
+       $ac_path_SED_found && break 3
+     done
+   done
+   done
+ IFS=$as_save_IFS
+   if test -z "$ac_cv_path_SED"; then
+-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
++    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+   fi
+ else
+   ac_cv_path_SED=$SED
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+ $as_echo "$ac_cv_path_SED" >&6; }
+@@ -4546,31 +4790,31 @@ Xsed="$SED -e 1s/^X//"
+ 
+ 
+ 
+ 
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+ $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+-if test "${ac_cv_path_GREP+set}" = set; then :
++if ${ac_cv_path_GREP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$GREP"; then
+   ac_path_GREP_found=false
+   # Loop through the user's path and test for each of PROGNAME-LIST
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_prog in grep ggrep; do
+     for ac_exec_ext in '' $ac_executable_extensions; do
+       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++      as_fn_executable_p "$ac_path_GREP" || continue
+ # Check for GNU ac_path_GREP and select it if it is found.
+   # Check for GNU $ac_path_GREP
+ case `"$ac_path_GREP" --version 2>&1` in
+ *GNU*)
+   ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+ *)
+   ac_count=0
+   $as_echo_n 0123456789 >"conftest.in"
+@@ -4595,48 +4839,48 @@ case `"$ac_path_GREP" --version 2>&1` in
+ esac
+ 
+       $ac_path_GREP_found && break 3
+     done
+   done
+   done
+ IFS=$as_save_IFS
+   if test -z "$ac_cv_path_GREP"; then
+-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+   fi
+ else
+   ac_cv_path_GREP=$GREP
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+ $as_echo "$ac_cv_path_GREP" >&6; }
+  GREP="$ac_cv_path_GREP"
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+ $as_echo_n "checking for egrep... " >&6; }
+-if test "${ac_cv_path_EGREP+set}" = set; then :
++if ${ac_cv_path_EGREP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+    then ac_cv_path_EGREP="$GREP -E"
+    else
+      if test -z "$EGREP"; then
+   ac_path_EGREP_found=false
+   # Loop through the user's path and test for each of PROGNAME-LIST
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_prog in egrep; do
+     for ac_exec_ext in '' $ac_executable_extensions; do
+       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++      as_fn_executable_p "$ac_path_EGREP" || continue
+ # Check for GNU ac_path_EGREP and select it if it is found.
+   # Check for GNU $ac_path_EGREP
+ case `"$ac_path_EGREP" --version 2>&1` in
+ *GNU*)
+   ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+ *)
+   ac_count=0
+   $as_echo_n 0123456789 >"conftest.in"
+@@ -4661,49 +4905,49 @@ case `"$ac_path_EGREP" --version 2>&1` i
+ esac
+ 
+       $ac_path_EGREP_found && break 3
+     done
+   done
+   done
+ IFS=$as_save_IFS
+   if test -z "$ac_cv_path_EGREP"; then
+-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+   fi
+ else
+   ac_cv_path_EGREP=$EGREP
+ fi
+ 
+    fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+ $as_echo "$ac_cv_path_EGREP" >&6; }
+  EGREP="$ac_cv_path_EGREP"
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+ $as_echo_n "checking for fgrep... " >&6; }
+-if test "${ac_cv_path_FGREP+set}" = set; then :
++if ${ac_cv_path_FGREP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+    then ac_cv_path_FGREP="$GREP -F"
+    else
+      if test -z "$FGREP"; then
+   ac_path_FGREP_found=false
+   # Loop through the user's path and test for each of PROGNAME-LIST
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_prog in fgrep; do
+     for ac_exec_ext in '' $ac_executable_extensions; do
+       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
++      as_fn_executable_p "$ac_path_FGREP" || continue
+ # Check for GNU ac_path_FGREP and select it if it is found.
+   # Check for GNU $ac_path_FGREP
+ case `"$ac_path_FGREP" --version 2>&1` in
+ *GNU*)
+   ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+ *)
+   ac_count=0
+   $as_echo_n 0123456789 >"conftest.in"
+@@ -4728,17 +4972,17 @@ case `"$ac_path_FGREP" --version 2>&1` i
+ esac
+ 
+       $ac_path_FGREP_found && break 3
+     done
+   done
+   done
+ IFS=$as_save_IFS
+   if test -z "$ac_cv_path_FGREP"; then
+-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+   fi
+ else
+   ac_cv_path_FGREP=$FGREP
+ fi
+ 
+    fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+@@ -4807,17 +5051,17 @@ if test "$GCC" = yes; then
+   esac
+ elif test "$with_gnu_ld" = yes; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+ $as_echo_n "checking for GNU ld... " >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+ $as_echo_n "checking for non-GNU ld... " >&6; }
+ fi
+-if test "${lt_cv_path_LD+set}" = set; then :
++if ${lt_cv_path_LD+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$LD"; then
+   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+   for ac_dir in $PATH; do
+     IFS="$lt_save_ifs"
+     test -z "$ac_dir" && ac_dir=.
+     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+@@ -4844,20 +5088,20 @@ fi
+ LD="$lt_cv_path_LD"
+ if test -n "$LD"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+ $as_echo "$LD" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
++test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+ $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
++if ${lt_cv_prog_gnu_ld+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   # I'd rather use --version here, but apparently some GNU lds only accept -v.
+ case `$LD -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+   lt_cv_prog_gnu_ld=yes
+   ;;
+ *)
+@@ -4874,17 +5118,17 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
+ 
+ 
+ 
+ 
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+ $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+-if test "${lt_cv_path_NM+set}" = set; then :
++if ${lt_cv_path_NM+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$NM"; then
+   # Let the user override the test.
+   lt_cv_path_NM="$NM"
+ else
+   lt_nm_to_check="${ac_tool_prefix}nm"
+   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+@@ -4927,36 +5171,39 @@ else
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+ $as_echo "$lt_cv_path_NM" >&6; }
+ if test "$lt_cv_path_NM" != "no"; then
+   NM="$lt_cv_path_NM"
+ else
+   # Didn't find any BSD compatible name lister, look for dumpbin.
+-  if test -n "$ac_tool_prefix"; then
+-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
++  if test -n "$DUMPBIN"; then :
++    # Let the user override the test.
++  else
++    if test -n "$ac_tool_prefix"; then
++  for ac_prog in dumpbin "link -dump"
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
++if ${ac_cv_prog_DUMPBIN+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$DUMPBIN"; then
+   ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -4972,35 +5219,35 @@ else
+ fi
+ 
+ 
+     test -n "$DUMPBIN" && break
+   done
+ fi
+ if test -z "$DUMPBIN"; then
+   ac_ct_DUMPBIN=$DUMPBIN
+-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
++  for ac_prog in dumpbin "link -dump"
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
++if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_DUMPBIN"; then
+   ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5027,42 +5274,51 @@ yes:)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+     DUMPBIN=$ac_ct_DUMPBIN
+   fi
+ fi
+ 
++    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
++    *COFF*)
++      DUMPBIN="$DUMPBIN -symbols"
++      ;;
++    *)
++      DUMPBIN=:
++      ;;
++    esac
++  fi
+ 
+   if test "$DUMPBIN" != ":"; then
+     NM="$DUMPBIN"
+   fi
+ fi
+ test -z "$NM" && NM=nm
+ 
+ 
+ 
+ 
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+ $as_echo_n "checking the name lister ($NM) interface... " >&6; }
+-if test "${lt_cv_nm_interface+set}" = set; then :
++if ${lt_cv_nm_interface+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_nm_interface="BSD nm"
+   echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:5054: $ac_compile\"" >&5)
++  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+   (eval "$ac_compile" 2>conftest.err)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:5057: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:5060: output\"" >&5)
++  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+   cat conftest.out >&5
+   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+     lt_cv_nm_interface="MS dumpbin"
+   fi
+   rm -f conftest*
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+ $as_echo "$lt_cv_nm_interface" >&6; }
+@@ -5076,17 +5332,17 @@ if test "$LN_S" = "ln -s"; then
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+ $as_echo "no, using $LN_S" >&6; }
+ fi
+ 
+ # find the maximum length of command line arguments
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+ $as_echo_n "checking the maximum length of command line arguments... " >&6; }
+-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
++if ${lt_cv_sys_max_cmd_len+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+     i=0
+   teststring="ABCD"
+ 
+   case $build_os in
+   msdosdjgpp*)
+     # On DJGPP, this test can blow up pretty badly due to problems in libc
+@@ -5109,16 +5365,21 @@ else
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+     # you end up with a "frozen" computer, even though with patience
+     # the test eventually succeeds (with a max line length of 256k).
+     # Instead, let's just punt: use the minimum linelength reported by
+     # all of the supported platforms: 8192 (on NT/2K/XP).
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
++  mint*)
++    # On MiNT this can take a long time and run out of memory.
++    lt_cv_sys_max_cmd_len=8192;
++    ;;
++
+   amigaos*)
+     # On AmigaOS with pdksh, this test takes hours, literally.
+     # So we just punt and use a minimum line length of 8192.
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+     # This has been around since 386BSD, at least.  Likely further.
+@@ -5134,16 +5395,21 @@ else
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+     ;;
+ 
+   interix*)
+     # We know the value 262144 and hardcode it with a safety zone (like BSD)
+     lt_cv_sys_max_cmd_len=196608
+     ;;
+ 
++  os2*)
++    # The test takes a long time on OS/2.
++    lt_cv_sys_max_cmd_len=8192
++    ;;
++
+   osf*)
+     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+     # nice to cause kernel panics so lets avoid the loop below.
+     # First set a reasonable default.
+     lt_cv_sys_max_cmd_len=16384
+     #
+     if test -x /sbin/sysconfig; then
+@@ -5173,18 +5439,18 @@ else
+       # a 1K string should be a reasonable start.
+       for i in 1 2 3 4 5 6 7 8 ; do
+         teststring=$teststring$teststring
+       done
+       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+       # If test is not a shell built-in, we'll probably end up computing a
+       # maximum length that is only half of the actual maximum length, but
+       # we can't tell.
+-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
++      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
++	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ 	      test $i != 17 # 1/2 MB should be enough
+       do
+         i=`expr $i + 1`
+         teststring=$teststring$teststring
+       done
+       # Only check the string length outside the loop.
+       lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+       teststring=
+@@ -5216,18 +5482,18 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
+ : ${MV="mv -f"}
+ : ${RM="rm -f"}
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+-      = c,a/b,, \
++  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++      = c,a/b,b/c, \
+     && eval 'test $(( 1 + 1 )) -eq 2 \
+     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+   && xsi_shell=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+ $as_echo "$xsi_shell" >&6; }
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+@@ -5266,32 +5532,111 @@ esac
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
++$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
++if ${lt_cv_to_host_file_cmd+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  case $host in
++  *-*-mingw* )
++    case $build in
++      *-*-mingw* ) # actually msys
++        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++        ;;
++      *-*-cygwin* )
++        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++        ;;
++      * ) # otherwise, assume *nix
++        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++        ;;
++    esac
++    ;;
++  *-*-cygwin* )
++    case $build in
++      *-*-mingw* ) # actually msys
++        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++        ;;
++      *-*-cygwin* )
++        lt_cv_to_host_file_cmd=func_convert_file_noop
++        ;;
++      * ) # otherwise, assume *nix
++        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++        ;;
++    esac
++    ;;
++  * ) # unhandled hosts (and "normal" native builds)
++    lt_cv_to_host_file_cmd=func_convert_file_noop
++    ;;
++esac
++
++fi
++
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
++$as_echo "$lt_cv_to_host_file_cmd" >&6; }
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
++if ${lt_cv_to_tool_file_cmd+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  #assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++  *-*-mingw* )
++    case $build in
++      *-*-mingw* ) # actually msys
++        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++        ;;
++    esac
++    ;;
++esac
++
++fi
++
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
++$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
++
++
++
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+-if test "${lt_cv_ld_reload_flag+set}" = set; then :
++if ${lt_cv_ld_reload_flag+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_ld_reload_flag='-r'
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+ $as_echo "$lt_cv_ld_reload_flag" >&6; }
+ reload_flag=$lt_cv_ld_reload_flag
+ case $reload_flag in
+ "" | " "*) ;;
+ *) reload_flag=" $reload_flag" ;;
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++  cygwin* | mingw* | pw32* | cegcc*)
++    if test "$GCC" != yes; then
++      reload_cmds=false
++    fi
++    ;;
+   darwin*)
+     if test "$GCC" = yes; then
+       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+     else
+       reload_cmds='$LD$reload_flag -o $output$reload_objs'
+     fi
+     ;;
+ esac
+@@ -5304,29 +5649,29 @@ esac
+ 
+ 
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}objdump; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
++if ${ac_cv_prog_OBJDUMP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$OBJDUMP"; then
+   ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5344,29 +5689,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_OBJDUMP"; then
+   ac_ct_OBJDUMP=$OBJDUMP
+   # Extract the first word of "objdump", so it can be a program name with args.
+ set dummy objdump; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_OBJDUMP"; then
+   ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_OBJDUMP="objdump"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5403,17 +5748,17 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
+ 
+ 
+ 
+ 
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+ $as_echo_n "checking how to recognize dependent libraries... " >&6; }
+-if test "${lt_cv_deplibs_check_method+set}" = set; then :
++if ${lt_cv_deplibs_check_method+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_file_magic_cmd='$MAGIC_CMD'
+ lt_cv_file_magic_test_file=
+ lt_cv_deplibs_check_method='unknown'
+ # Need to set the preceding variable on all platforms that support
+ # interlibrary dependencies.
+ # 'none' -- dependencies not supported.
+@@ -5445,26 +5790,28 @@ cygwin*)
+   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+   lt_cv_file_magic_cmd='func_win32_libid'
+   ;;
+ 
+ mingw* | pw32*)
+   # Base MSYS/MinGW do not provide the 'file' command needed by
+   # func_win32_libid shell function, so use a weaker test based on 'objdump',
+   # unless we find 'file', for example because we are cross-compiling.
+-  if ( file / ) >/dev/null 2>&1; then
++  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
++  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+     lt_cv_file_magic_cmd='func_win32_libid'
+   else
+-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++    # Keep this pattern in sync with the one in func_win32_libid.
++    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+     lt_cv_file_magic_cmd='$OBJDUMP -f'
+   fi
+   ;;
+ 
+-cegcc)
++cegcc*)
+   # use the weaker test based on 'objdump'. See mingw*.
+   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+   lt_cv_file_magic_cmd='$OBJDUMP -f'
+   ;;
+ 
+ darwin* | rhapsody*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -5484,29 +5831,33 @@ freebsd* | dragonfly*)
+     lt_cv_deplibs_check_method=pass_all
+   fi
+   ;;
+ 
+ gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
++haiku*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ hpux10.20* | hpux11*)
+   lt_cv_file_magic_cmd=/usr/bin/file
+   case $host_cpu in
+   ia64*)
+     lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+     ;;
+   hppa*64*)
+-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
++    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+     ;;
+   *)
+-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
++    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+     lt_cv_file_magic_test_file=/usr/lib/libc.sl
+     ;;
+   esac
+   ;;
+ 
+ interix[3-9]*)
+   # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+   lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+@@ -5517,18 +5868,18 @@ irix5* | irix6* | nonstopux*)
+   *-32|*"-32 ") libmagic=32-bit;;
+   *-n32|*"-n32 ") libmagic=N32;;
+   *-64|*"-64 ") libmagic=64-bit;;
+   *) libmagic=never-match;;
+   esac
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu)
++# This must be glibc/ELF.
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ netbsd*)
+   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+   else
+     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+@@ -5599,154 +5950,387 @@ sysv4 | sysv4.3*)
+ tpf*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ esac
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++  case $host_os in
++  mingw* | pw32*)
++    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++      want_nocaseglob=yes
++    else
++      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
++    fi
++    ;;
++  esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
++
++
++
++
++
++
++
++
++
++
+ if test -n "$ac_tool_prefix"; then
+-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}ar; ac_word=$2
++  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_AR+set}" = set; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-  if test -n "$AR"; then
+-  ac_cv_prog_AR="$AR" # Let the user override the test.
++if ${ac_cv_prog_DLLTOOL+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$DLLTOOL"; then
++  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+-    ac_cv_prog_AR="${ac_tool_prefix}ar"
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+ fi
+ fi
+-AR=$ac_cv_prog_AR
+-if test -n "$AR"; then
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+-$as_echo "$AR" >&6; }
++DLLTOOL=$ac_cv_prog_DLLTOOL
++if test -n "$DLLTOOL"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
++$as_echo "$DLLTOOL" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+ 
+ 
+ fi
+-if test -z "$ac_cv_prog_AR"; then
+-  ac_ct_AR=$AR
+-  # Extract the first word of "ar", so it can be a program name with args.
+-set dummy ar; ac_word=$2
++if test -z "$ac_cv_prog_DLLTOOL"; then
++  ac_ct_DLLTOOL=$DLLTOOL
++  # Extract the first word of "dlltool", so it can be a program name with args.
++set dummy dlltool; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-  if test -n "$ac_ct_AR"; then
+-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_DLLTOOL"; then
++  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+-    ac_cv_prog_ac_ct_AR="ar"
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+ fi
+ fi
+-ac_ct_AR=$ac_cv_prog_ac_ct_AR
+-if test -n "$ac_ct_AR"; then
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+-$as_echo "$ac_ct_AR" >&6; }
++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
++if test -n "$ac_ct_DLLTOOL"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
++$as_echo "$ac_ct_DLLTOOL" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+ 
+-  if test "x$ac_ct_AR" = x; then
+-    AR="false"
++  if test "x$ac_ct_DLLTOOL" = x; then
++    DLLTOOL="false"
+   else
+     case $cross_compiling:$ac_tool_warned in
+ yes:)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
++    DLLTOOL=$ac_ct_DLLTOOL
++  fi
++else
++  DLLTOOL="$ac_cv_prog_DLLTOOL"
++fi
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
++$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++  # two different shell functions defined in ltmain.sh
++  # decide which to use based on capabilities of $DLLTOOL
++  case `$DLLTOOL --help 2>&1` in
++  *--identify-strict*)
++    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++    ;;
++  *)
++    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++    ;;
++  esac
++  ;;
++*)
++  # fallback: assume linklib IS sharedlib
++  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++  ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
++$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++  for ac_prog in ar
++  do
++    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_AR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$AR"; then
++  ac_cv_prog_AR="$AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++AR=$ac_cv_prog_AR
++if test -n "$AR"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
++$as_echo "$AR" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++    test -n "$AR" && break
++  done
++fi
++if test -z "$AR"; then
++  ac_ct_AR=$AR
++  for ac_prog in ar
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_AR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_AR"; then
++  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_AR="$ac_prog"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_AR=$ac_cv_prog_ac_ct_AR
++if test -n "$ac_ct_AR"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
++$as_echo "$ac_ct_AR" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++  test -n "$ac_ct_AR" && break
++done
++
++  if test "x$ac_ct_AR" = x; then
++    AR="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
+     AR=$ac_ct_AR
+   fi
+-else
+-  AR="$ac_cv_prog_AR"
+-fi
+-
+-test -z "$AR" && AR=ar
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
+-
+-
+-
+-
++fi
++
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
++$as_echo_n "checking for archiver @FILE support... " >&6; }
++if ${lt_cv_ar_at_file+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_ar_at_file=no
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  echo conftest.$ac_objext > conftest.lst
++      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
++      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++  (eval $lt_ar_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }
++      if test "$ac_status" -eq 0; then
++	# Ensure the archiver fails upon bogus file names.
++	rm -f conftest.$ac_objext libconftest.a
++	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
++  (eval $lt_ar_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }
++	if test "$ac_status" -ne 0; then
++          lt_cv_ar_at_file=@
++        fi
++      fi
++      rm -f conftest.* libconftest.a
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
++$as_echo "$lt_cv_ar_at_file" >&6; }
++
++if test "x$lt_cv_ar_at_file" = xno; then
++  archiver_list_spec=
++else
++  archiver_list_spec=$lt_cv_ar_at_file
++fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_STRIP+set}" = set; then :
++if ${ac_cv_prog_STRIP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$STRIP"; then
+   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5764,29 +6348,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_STRIP"; then
+   ac_ct_STRIP=$STRIP
+   # Extract the first word of "strip", so it can be a program name with args.
+ set dummy strip; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
++if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_STRIP"; then
+   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_STRIP="strip"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5823,29 +6407,29 @@ test -z "$STRIP" && STRIP=:
+ 
+ 
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_RANLIB+set}" = set; then :
++if ${ac_cv_prog_RANLIB+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$RANLIB"; then
+   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5863,29 +6447,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_RANLIB"; then
+   ac_ct_RANLIB=$RANLIB
+   # Extract the first word of "ranlib", so it can be a program name with args.
+ set dummy ranlib; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
++if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_RANLIB"; then
+   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_RANLIB="ranlib"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -5925,24 +6509,36 @@ test -z "$RANLIB" && RANLIB=:
+ # Determine commands to create old-style static archives.
+ old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+ old_postinstall_cmds='chmod 644 $oldlib'
+ old_postuninstall_cmds=
+ 
+ if test -n "$RANLIB"; then
+   case $host_os in
+   openbsd*)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
++    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+     ;;
+   *)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+-    ;;
+-  esac
+-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+-fi
++    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
++    ;;
++  esac
++  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
++fi
++
++case $host_os in
++  darwin*)
++    lock_old_archive_extraction=yes ;;
++  *)
++    lock_old_archive_extraction=no ;;
++esac
++
++
++
++
++
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+@@ -5980,17 +6576,17 @@ LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+ 
+ # Allow CC to be a program name with arguments.
+ compiler=$CC
+ 
+ 
+ # Check for command to grab the raw symbol name followed by C symbol from nm.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+ $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
++if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+ # These are sane defaults that work on at least a few old systems.
+ # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+ 
+ # Character class describing NM global symbol codes.
+ symcode='[BCDEGRST]'
+@@ -6041,18 +6637,18 @@ case `$NM -V 2>&1` in
+ esac
+ 
+ # Transform an extracted symbol line into a proper C declaration.
+ # Some systems (esp. on ia64) link data and code symbols differently,
+ # so use this general approach.
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ 
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+ 
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+ case $build_os in
+ mingw*)
+   opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+   ;;
+ esac
+@@ -6066,28 +6662,30 @@ for ac_symprfx in "" "_"; do
+   # Write the raw and C identifiers.
+   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+     # Fake it for dumpbin and say T for any non-static function
+     # and D for any global variable.
+     # Also find C++ and __fastcall symbols from MSVC++,
+     # which start with @ or ?.
+     lt_cv_sys_global_symbol_pipe="$AWK '"\
+ "     {last_section=section; section=\$ 3};"\
++"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+ "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+ "     \$ 0!~/External *\|/{next};"\
+ "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+ "     {if(hide[section]) next};"\
+ "     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+ "     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+ "     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+ "     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+ "     ' prfx=^$ac_symprfx"
+   else
+     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+   fi
++  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ 
+   # Check to see that the pipe works correctly.
+   pipe_works=no
+ 
+   rm -f conftest*
+   cat > conftest.$ac_ext <<_LT_EOF
+ #ifdef __cplusplus
+ extern "C" {
+@@ -6103,44 +6701,56 @@ int main(){nm_test_var='a';nm_test_func(
+ 
+   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+     # Now try to grab the symbols.
+     nlist=conftest.nm
+-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
++    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
++  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; } && test -s "$nlist"; then
+       # Try sorting and uniquifying the output.
+       if sort "$nlist" | uniq > "$nlist"T; then
+ 	mv -f "$nlist"T "$nlist"
+       else
+ 	rm -f "$nlist"T
+       fi
+ 
+       # Make sure that we snagged all the symbols we need.
+       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ 	  cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++   relocations are performed -- see ld's documentation on pseudo-relocs.  */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data.  */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ _LT_EOF
+ 	  # Now generate the symbol file.
+ 	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+ 
+ 	  cat <<_LT_EOF >> conftest.$ac_ext
+ 
+ /* The mapping between symbol names and symbols.  */
+-const struct {
++LT_DLSYM_CONST struct {
+   const char *name;
+   void       *address;
+ }
+ lt__PROGRAM__LTX_preloaded_symbols[] =
+ {
+   { "@PROGRAM@", (void *) 0 },
+ _LT_EOF
+ 	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+@@ -6156,29 +6766,29 @@ static const void *lt_preloaded_setup() 
+ #endif
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ _LT_EOF
+ 	  # Now try linking the two files.
+ 	  mv conftest.$ac_objext conftstm.$ac_objext
+-	  lt_save_LIBS="$LIBS"
+-	  lt_save_CFLAGS="$CFLAGS"
++	  lt_globsym_save_LIBS=$LIBS
++	  lt_globsym_save_CFLAGS=$CFLAGS
+ 	  LIBS="conftstm.$ac_objext"
+ 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ 	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ 	    pipe_works=yes
+ 	  fi
+-	  LIBS="$lt_save_LIBS"
+-	  CFLAGS="$lt_save_CFLAGS"
++	  LIBS=$lt_globsym_save_LIBS
++	  CFLAGS=$lt_globsym_save_CFLAGS
+ 	else
+ 	  echo "cannot find nm_test_func in $nlist" >&5
+ 	fi
+       else
+ 	echo "cannot find nm_test_var in $nlist" >&5
+       fi
+     else
+       echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+@@ -6205,33 +6815,81 @@ fi
+ if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+ $as_echo "failed" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+ $as_echo "ok" >&6; }
+ fi
+ 
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++  nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
++  nm_file_list_spec='@'
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
++$as_echo_n "checking for sysroot... " >&6; }
++
++# Check whether --with-sysroot was given.
++if test "${with_sysroot+set}" = set; then :
++  withval=$with_sysroot;
++else
++  with_sysroot=no
++fi
++
++
++lt_sysroot=
++case ${with_sysroot} in #(
++ yes)
++   if test "$GCC" = yes; then
++     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++   fi
++   ;; #(
++ /*)
++   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
++   ;; #(
++ no|'')
++   ;; #(
++ *)
++   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
++$as_echo "${with_sysroot}" >&6; }
++   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
++   ;;
++esac
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
++$as_echo "${lt_sysroot:-no}" >&6; }
+ 
+ 
+ 
+ 
+ 
+ # Check whether --enable-libtool-lock was given.
+ if test "${enable_libtool_lock+set}" = set; then :
+   enableval=$enable_libtool_lock;
+@@ -6258,17 +6916,17 @@ ia64-*-hpux*)
+ 	HPUX_IA64_MODE="64"
+ 	;;
+     esac
+   fi
+   rm -rf conftest*
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 6266 "configure"' > conftest.$ac_ext
++  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+     if test "$lt_cv_prog_gnu_ld" = yes; then
+       case `/usr/bin/file conftest.$ac_objext` in
+ 	*32-bit*)
+@@ -6358,17 +7016,17 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*
+   ;;
+ 
+ *-*-sco3.2v5*)
+   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+   SAVE_CFLAGS="$CFLAGS"
+   CFLAGS="$CFLAGS -belf"
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+ $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+-if test "${lt_cv_cc_needs_belf+set}" = set; then :
++if ${lt_cv_cc_needs_belf+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+@@ -6399,64 +7057,194 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+ $as_echo "$lt_cv_cc_needs_belf" >&6; }
+   if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+     CFLAGS="$SAVE_CFLAGS"
+   fi
+   ;;
+-sparc*-*solaris*)
++*-*solaris*)
+   # Find out which ABI we are using.
+   echo 'int i;' > conftest.$ac_ext
+   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+     case `/usr/bin/file conftest.o` in
+     *64-bit*)
+       case $lt_cv_prog_gnu_ld in
+-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
++      yes*)
++        case $host in
++        i?86-*-solaris*)
++          LD="${LD-ld} -m elf_x86_64"
++          ;;
++        sparc*-*-solaris*)
++          LD="${LD-ld} -m elf64_sparc"
++          ;;
++        esac
++        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
++        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
++          LD="${LD-ld}_sol2"
++        fi
++        ;;
+       *)
+ 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ 	  LD="${LD-ld} -64"
+ 	fi
+ 	;;
+       esac
+       ;;
+     esac
+   fi
+   rm -rf conftest*
+   ;;
+ esac
+ 
+ need_locks="$enable_libtool_lock"
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
++set dummy ${ac_tool_prefix}mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$MANIFEST_TOOL"; then
++  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
++if test -n "$MANIFEST_TOOL"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
++$as_echo "$MANIFEST_TOOL" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
++  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
++  # Extract the first word of "mt", so it can be a program name with args.
++set dummy mt; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_MANIFEST_TOOL"; then
++  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
++if test -n "$ac_ct_MANIFEST_TOOL"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_MANIFEST_TOOL" = x; then
++    MANIFEST_TOOL=":"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
++  fi
++else
++  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
++fi
++
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
++if ${lt_cv_path_mainfest_tool+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_path_mainfest_tool=no
++  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
++  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++  cat conftest.err >&5
++  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++    lt_cv_path_mainfest_tool=yes
++  fi
++  rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
++$as_echo "$lt_cv_path_mainfest_tool" >&6; }
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++  MANIFEST_TOOL=:
++fi
++
++
++
++
++
+ 
+   case $host_os in
+     rhapsody* | darwin*)
+     if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
++if ${ac_cv_prog_DSYMUTIL+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$DSYMUTIL"; then
+   ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6474,29 +7262,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_DSYMUTIL"; then
+   ac_ct_DSYMUTIL=$DSYMUTIL
+   # Extract the first word of "dsymutil", so it can be a program name with args.
+ set dummy dsymutil; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
++if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_DSYMUTIL"; then
+   ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6526,29 +7314,29 @@ else
+   DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+ fi
+ 
+     if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
++if ${ac_cv_prog_NMEDIT+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$NMEDIT"; then
+   ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6566,29 +7354,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_NMEDIT"; then
+   ac_ct_NMEDIT=$NMEDIT
+   # Extract the first word of "nmedit", so it can be a program name with args.
+ set dummy nmedit; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
++if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_NMEDIT"; then
+   ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_NMEDIT="nmedit"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6618,29 +7406,29 @@ else
+   NMEDIT="$ac_cv_prog_NMEDIT"
+ fi
+ 
+     if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}lipo; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_LIPO+set}" = set; then :
++if ${ac_cv_prog_LIPO+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$LIPO"; then
+   ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6658,29 +7446,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_LIPO"; then
+   ac_ct_LIPO=$LIPO
+   # Extract the first word of "lipo", so it can be a program name with args.
+ set dummy lipo; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
++if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_LIPO"; then
+   ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_LIPO="lipo"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6710,29 +7498,29 @@ else
+   LIPO="$ac_cv_prog_LIPO"
+ fi
+ 
+     if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}otool; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OTOOL+set}" = set; then :
++if ${ac_cv_prog_OTOOL+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$OTOOL"; then
+   ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6750,29 +7538,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_OTOOL"; then
+   ac_ct_OTOOL=$OTOOL
+   # Extract the first word of "otool", so it can be a program name with args.
+ set dummy otool; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
++if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_OTOOL"; then
+   ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_OTOOL="otool"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6802,29 +7590,29 @@ else
+   OTOOL="$ac_cv_prog_OTOOL"
+ fi
+ 
+     if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}otool64; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
++if ${ac_cv_prog_OTOOL64+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$OTOOL64"; then
+   ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6842,29 +7630,29 @@ fi
+ 
+ fi
+ if test -z "$ac_cv_prog_OTOOL64"; then
+   ac_ct_OTOOL64=$OTOOL64
+   # Extract the first word of "otool64", so it can be a program name with args.
+ set dummy otool64; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
++if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_OTOOL64"; then
+   ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_OTOOL64="otool64"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+@@ -6917,46 +7705,53 @@ fi
+ 
+ 
+ 
+ 
+ 
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+ $as_echo_n "checking for -single_module linker flag... " >&6; }
+-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
++if ${lt_cv_apple_cc_single_mod+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_apple_cc_single_mod=no
+       if test -z "${LT_MULTI_MODULE}"; then
+ 	# By default we will add the -single_module flag. You can override
+ 	# by either setting the environment variable LT_MULTI_MODULE
+ 	# non-empty at configure time, or by adding -multi_module to the
+ 	# link flags.
+ 	rm -rf libconftest.dylib*
+ 	echo "int foo(void){return 1;}" > conftest.c
+ 	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c" >&5
+ 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+         _lt_result=$?
+-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
++	# If there is a non-empty error log, and "single_module"
++	# appears in it, assume the flag caused a linker warning
++        if test -s conftest.err && $GREP single_module conftest.err; then
++	  cat conftest.err >&5
++	# Otherwise, if the output was created with a 0 exit code from
++	# the compiler, it worked.
++	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ 	  lt_cv_apple_cc_single_mod=yes
+ 	else
+ 	  cat conftest.err >&5
+ 	fi
+ 	rm -rf libconftest.dylib*
+ 	rm -f conftest.*
+       fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+ $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
++
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+ $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
++if ${lt_cv_ld_exported_symbols_list+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_ld_exported_symbols_list=no
+       save_LDFLAGS=$LDFLAGS
+       echo "_main" > conftest.sym
+       LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -6976,16 +7771,51 @@ else
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ 	LDFLAGS="$save_LDFLAGS"
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
++
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
++$as_echo_n "checking for -force_load linker flag... " >&6; }
++if ${lt_cv_ld_force_load+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_ld_force_load=no
++      cat > conftest.c << _LT_EOF
++int forced_loaded() { return 2;}
++_LT_EOF
++      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
++      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
++      echo "$AR cru libconftest.a conftest.o" >&5
++      $AR cru libconftest.a conftest.o 2>&5
++      echo "$RANLIB libconftest.a" >&5
++      $RANLIB libconftest.a 2>&5
++      cat > conftest.c << _LT_EOF
++int main() { return 0;}
++_LT_EOF
++      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
++      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
++      _lt_result=$?
++      if test -s conftest.err && $GREP force_load conftest.err; then
++	cat conftest.err >&5
++      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
++	lt_cv_ld_force_load=yes
++      else
++	cat conftest.err >&5
++      fi
++        rm -f conftest.err libconftest.a conftest conftest.c
++        rm -rf conftest.dSYM
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
++$as_echo "$lt_cv_ld_force_load" >&6; }
+     case $host_os in
+     rhapsody* | darwin1.[012])
+       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+     darwin1.*)
+       _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+     darwin*) # darwin 5.x on
+       # if running on 10.5 or later, the deployment target defaults
+       # to the OS version, if on x86, and 10.4, the deployment
+@@ -7003,17 +7833,17 @@ fi
+     if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+       _lt_dar_single_mod='$single_module'
+     fi
+     if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+       _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+     else
+       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+     fi
+-    if test "$DSYMUTIL" != ":"; then
++    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+       _lt_dsymutil='~$DSYMUTIL $lib || :'
+     else
+       _lt_dsymutil=
+     fi
+     ;;
+   esac
+ 
+ ac_ext=c
+@@ -7023,17 +7853,17 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+ $as_echo_n "checking how to run the C preprocessor... " >&6; }
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+   CPP=
+ fi
+ if test -z "$CPP"; then
+-  if test "${ac_cv_prog_CPP+set}" = set; then :
++  if ${ac_cv_prog_CPP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+       # Double quotes because CPP needs to be expanded
+     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+@@ -7053,37 +7883,37 @@ do
+ 		     Syntax error
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+ 
+ else
+   # Broken: fails on valid input.
+ continue
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether nonexistent headers
+   # can be detected and how.
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+   # Broken: success on invalid input.
+ continue
+ else
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.i conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then :
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CPP=$CPP
+ 
+ fi
+@@ -7112,56 +7942,56 @@ do
+ 		     Syntax error
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+ 
+ else
+   # Broken: fails on valid input.
+ continue
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether nonexistent headers
+   # can be detected and how.
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+   # Broken: success on invalid input.
+ continue
+ else
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.i conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then :
+ 
+ else
+   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "C preprocessor \"$CPP\" fails sanity check
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
++See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+ $as_echo_n "checking for ANSI C header files... " >&6; }
+-if test "${ac_cv_header_stdc+set}" = set; then :
++if ${ac_cv_header_stdc+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #include <float.h>
+@@ -7268,42 +8098,43 @@ fi
+ 
+ # On IRIX 5.3, sys/types and inttypes.h are conflicting.
+ for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ 		  inttypes.h stdint.h unistd.h
+ do :
+   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+ "
+-eval as_val=\$$as_ac_Header
+-   if test "x$as_val" = x""yes; then :
++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+   cat >>confdefs.h <<_ACEOF
+ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+ for ac_header in dlfcn.h
+ do :
+   ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+ "
+-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
++if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_DLFCN_H 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+ 
++
++
+ # Set options
+ 
+ 
+ 
+         enable_dlopen=no
+ 
+ 
+   enable_win32_dll=no
+@@ -7369,17 +8200,32 @@ fi
+ 
+ 
+ 
+ 
+ 
+ 
+ # Check whether --with-pic was given.
+ if test "${with_pic+set}" = set; then :
+-  withval=$with_pic; pic_mode="$withval"
++  withval=$with_pic; lt_p=${PACKAGE-default}
++    case $withval in
++    yes|no) pic_mode=$withval ;;
++    *)
++      pic_mode=default
++      # Look at the argument we got.  We use all the common list separators.
++      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++      for lt_pkg in $withval; do
++	IFS="$lt_save_ifs"
++	if test "X$lt_pkg" = "X$lt_p"; then
++	  pic_mode=yes
++	fi
++      done
++      IFS="$lt_save_ifs"
++      ;;
++    esac
+ else
+   pic_mode=default
+ fi
+ 
+ 
+ test -z "$pic_mode" && pic_mode=default
+ 
+ 
+@@ -7446,16 +8292,21 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtoo
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
++
++
++
++
++
+ test -z "$LN_S" && LN_S="ln -s"
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+@@ -7467,17 +8318,17 @@ test -z "$LN_S" && LN_S="ln -s"
+ 
+ 
+ if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+ $as_echo_n "checking for objdir... " >&6; }
+-if test "${lt_cv_objdir+set}" = set; then :
++if ${lt_cv_objdir+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   rm -f .libs 2>/dev/null
+ mkdir .libs 2>/dev/null
+ if test -d .libs; then
+   lt_cv_objdir=.libs
+ else
+   # MS-DOS does not allow filenames that begin with a dot.
+@@ -7495,58 +8346,28 @@ objdir=$lt_cv_objdir
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define LT_OBJDIR "$lt_cv_objdir/"
+ _ACEOF
+ 
+ 
+ 
+ 
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+ case $host_os in
+ aix3*)
+   # AIX sometimes has problems with the GCC collect2 program.  For some
+   # reason, if we set the COLLECT_NAMES environment variable, the problems
+   # vanish in a puff of smoke.
+   if test "X${COLLECT_NAMES+set}" != Xset; then
+     COLLECT_NAMES=
+     export COLLECT_NAMES
+   fi
+   ;;
+ esac
+ 
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+-
+-# Same as above, but do not quote variable references.
+-double_quote_subst='s/\(["`\\]\)/\\\1/g'
+-
+-# Sed substitution to delay expansion of an escaped shell variable in a
+-# double_quote_subst'ed string.
+-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+-
+-# Sed substitution to delay expansion of an escaped single quote.
+-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+-
+-# Sed substitution to avoid accidental globbing in evaled expressions
+-no_glob_subst='s/\*/\\\*/g'
+-
+ # Global variables:
+ ofile=libtool
+ can_build_shared=yes
+ 
+ # All known linkers require a `.a' archive for static linking (except MSVC,
+ # which needs '.lib').
+ libext=a
+ 
+@@ -7565,27 +8386,27 @@ test -z "$ac_objext" && ac_objext=o
+ for cc_temp in $compiler""; do
+   case $cc_temp in
+     compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+     distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+     \-*) ;;
+     *) break;;
+   esac
+ done
+-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
++cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+ 
+ 
+ # Only perform the check for file, if the check method requires it
+ test -z "$MAGIC_CMD" && MAGIC_CMD=file
+ case $deplibs_check_method in
+ file_magic*)
+   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+ $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
++if ${lt_cv_path_MAGIC_CMD+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   case $MAGIC_CMD in
+ [\\/*] |  ?:[\\/]*)
+   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+   ;;
+ *)
+   lt_save_MAGIC_CMD="$MAGIC_CMD"
+@@ -7641,17 +8462,17 @@ fi
+ 
+ 
+ 
+ 
+ if test -z "$lt_cv_path_MAGIC_CMD"; then
+   if test -n "$ac_tool_prefix"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+ $as_echo_n "checking for file... " >&6; }
+-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
++if ${lt_cv_path_MAGIC_CMD+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   case $MAGIC_CMD in
+ [\\/*] |  ?:[\\/]*)
+   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+   ;;
+ *)
+   lt_save_MAGIC_CMD="$MAGIC_CMD"
+@@ -7765,50 +8586,59 @@ eval "$ac_compile" 2>&1 >/dev/null | $SE
+ 
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_link_test_code" >conftest.$ac_ext
+ eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+ _lt_linker_boilerplate=`cat conftest.err`
+ $RM -r conftest*
+ 
+ 
++## CAVEAT EMPTOR:
++## There is no encapsulation within the following macros, do not change
++## the running order or otherwise move them around unless you know exactly
++## what you are doing...
+ if test -n "$compiler"; then
+ 
+ lt_prog_compiler_no_builtin_flag=
+ 
+ if test "$GCC" = yes; then
+-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
++  case $cc_basename in
++  nvcc*)
++    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
++  *)
++    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
++  esac
+ 
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+ $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
++if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_prog_compiler_rtti_exceptions=no
+    ac_outfile=conftest.$ac_objext
+    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+    lt_compiler_flag="-fno-rtti -fno-exceptions"
+    # Insert the option either (1) after the last *FLAGS variable, or
+    # (2) before a word containing "conftest.", or (3) at the end.
+    # Note that $ac_compile itself does not contain backslashes and begins
+    # with a dollar sign (not a hyphen), so the echo should work correctly.
+    # The option is referenced via a variable to avoid confusing sed.
+    lt_compile=`echo "$ac_compile" | $SED \
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7792: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:7796: \$? = $ac_status" >&5
++   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
++     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+        lt_cv_prog_compiler_rtti_exceptions=yes
+      fi
+    fi
+    $RM conftest*
+ 
+ fi
+@@ -7827,18 +8657,16 @@ fi
+ 
+ 
+ 
+ 
+   lt_prog_compiler_wl=
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+ 
+   if test "$GCC" = yes; then
+     lt_prog_compiler_wl='-Wl,'
+     lt_prog_compiler_static='-static'
+ 
+     case $host_os in
+       aix*)
+       # All AIX code is PIC.
+@@ -7876,16 +8704,22 @@ lt_prog_compiler_static=
+       ;;
+ 
+     darwin* | rhapsody*)
+       # PIC is the default on this platform
+       # Common symbols not allowed in MH_DYLIB files
+       lt_prog_compiler_pic='-fno-common'
+       ;;
+ 
++    haiku*)
++      # PIC is the default for Haiku.
++      # The "-static" flag exists, but is broken.
++      lt_prog_compiler_static=
++      ;;
++
+     hpux*)
+       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+       # sets the default TLS model and affects inlining.
+       case $host_cpu in
+       hppa*64*)
+ 	# +Z the default
+ 	;;
+@@ -7918,16 +8752,25 @@ lt_prog_compiler_static=
+ 	lt_prog_compiler_pic=-Kconform_pic
+       fi
+       ;;
+ 
+     *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+     esac
++
++    case $cc_basename in
++    nvcc*) # Cuda Compiler Driver 2.2
++      lt_prog_compiler_wl='-Xlinker '
++      if test -n "$lt_prog_compiler_pic"; then
++        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
++      fi
++      ;;
++    esac
+   else
+     # PORTME Check for flag to pass linker flags through the system compiler.
+     case $host_os in
+     aix*)
+       lt_prog_compiler_wl='-Wl,'
+       if test "$host_cpu" = ia64; then
+ 	# AIX 5 now supports IA64 processor
+ 	lt_prog_compiler_static='-Bstatic'
+@@ -7959,17 +8802,17 @@ lt_prog_compiler_static=
+       ;;
+ 
+     irix5* | irix6* | nonstopux*)
+       lt_prog_compiler_wl='-Wl,'
+       # PIC (with -KPIC) is the default.
+       lt_prog_compiler_static='-non_shared'
+       ;;
+ 
+-    linux* | k*bsd*-gnu)
++    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+       case $cc_basename in
+       # old Intel for x86_64 which still supported -KPIC.
+       ecc*)
+ 	lt_prog_compiler_wl='-Wl,'
+ 	lt_prog_compiler_pic='-KPIC'
+ 	lt_prog_compiler_static='-static'
+         ;;
+       # icc used to be incompatible with GCC.
+@@ -7980,47 +8823,68 @@ lt_prog_compiler_static=
+ 	lt_prog_compiler_static='-static'
+         ;;
+       # Lahey Fortran 8.1.
+       lf95*)
+ 	lt_prog_compiler_wl='-Wl,'
+ 	lt_prog_compiler_pic='--shared'
+ 	lt_prog_compiler_static='--static'
+ 	;;
+-      pgcc* | pgf77* | pgf90* | pgf95*)
++      nagfor*)
++	# NAG Fortran compiler
++	lt_prog_compiler_wl='-Wl,-Wl,,'
++	lt_prog_compiler_pic='-PIC'
++	lt_prog_compiler_static='-Bstatic'
++	;;
++      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+         # Portland Group compilers (*not* the Pentium gcc compiler,
+ 	# which looks to be a dead project)
+ 	lt_prog_compiler_wl='-Wl,'
+ 	lt_prog_compiler_pic='-fpic'
+ 	lt_prog_compiler_static='-Bstatic'
+         ;;
+       ccc*)
+         lt_prog_compiler_wl='-Wl,'
+         # All Alpha code is PIC.
+         lt_prog_compiler_static='-non_shared'
+         ;;
+-      xl*)
+-	# IBM XL C 8.0/Fortran 10.1 on PPC
++      xl* | bgxl* | bgf* | mpixl*)
++	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ 	lt_prog_compiler_wl='-Wl,'
+ 	lt_prog_compiler_pic='-qpic'
+ 	lt_prog_compiler_static='-qstaticlink'
+ 	;;
+       *)
+ 	case `$CC -V 2>&1 | sed 5q` in
++	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
++	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
++	  lt_prog_compiler_pic='-KPIC'
++	  lt_prog_compiler_static='-Bstatic'
++	  lt_prog_compiler_wl=''
++	  ;;
++	*Sun\ F* | *Sun*Fortran*)
++	  lt_prog_compiler_pic='-KPIC'
++	  lt_prog_compiler_static='-Bstatic'
++	  lt_prog_compiler_wl='-Qoption ld '
++	  ;;
+ 	*Sun\ C*)
+ 	  # Sun C 5.9
+ 	  lt_prog_compiler_pic='-KPIC'
+ 	  lt_prog_compiler_static='-Bstatic'
+ 	  lt_prog_compiler_wl='-Wl,'
+ 	  ;;
+-	*Sun\ F*)
+-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+-	  lt_prog_compiler_pic='-KPIC'
++        *Intel*\ [CF]*Compiler*)
++	  lt_prog_compiler_wl='-Wl,'
++	  lt_prog_compiler_pic='-fPIC'
++	  lt_prog_compiler_static='-static'
++	  ;;
++	*Portland\ Group*)
++	  lt_prog_compiler_wl='-Wl,'
++	  lt_prog_compiler_pic='-fpic'
+ 	  lt_prog_compiler_static='-Bstatic'
+-	  lt_prog_compiler_wl=''
+ 	  ;;
+ 	esac
+ 	;;
+       esac
+       ;;
+ 
+     newsos6)
+       lt_prog_compiler_pic='-KPIC'
+@@ -8042,17 +8906,17 @@ lt_prog_compiler_static=
+     rdos*)
+       lt_prog_compiler_static='-non_shared'
+       ;;
+ 
+     solaris*)
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-Bstatic'
+       case $cc_basename in
+-      f77* | f90* | f95*)
++      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ 	lt_prog_compiler_wl='-Qoption ld ';;
+       *)
+ 	lt_prog_compiler_wl='-Wl,';;
+       esac
+       ;;
+ 
+     sunos4*)
+       lt_prog_compiler_wl='-Qoption ld '
+@@ -8099,55 +8963,59 @@ case $host_os in
+   # For platforms which do not support PIC, -DPIC is meaningless:
+   *djgpp*)
+     lt_prog_compiler_pic=
+     ;;
+   *)
+     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+     ;;
+ esac
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+-$as_echo "$lt_prog_compiler_pic" >&6; }
+-
+-
+-
+-
+-
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++if ${lt_cv_prog_compiler_pic+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
++$as_echo "$lt_cv_prog_compiler_pic" >&6; }
++lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+ 
+ #
+ # Check to make sure the PIC flag actually works.
+ #
+ if test -n "$lt_prog_compiler_pic"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+ $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
++if ${lt_cv_prog_compiler_pic_works+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_prog_compiler_pic_works=no
+    ac_outfile=conftest.$ac_objext
+    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+    lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+    # Insert the option either (1) after the last *FLAGS variable, or
+    # (2) before a word containing "conftest.", or (3) at the end.
+    # Note that $ac_compile itself does not contain backslashes and begins
+    # with a dollar sign (not a hyphen), so the echo should work correctly.
+    # The option is referenced via a variable to avoid confusing sed.
+    lt_compile=`echo "$ac_compile" | $SED \
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8131: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8135: \$? = $ac_status" >&5
++   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
++     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+        lt_cv_prog_compiler_pic_works=yes
+      fi
+    fi
+    $RM conftest*
+ 
+ fi
+@@ -8166,36 +9034,41 @@ fi
+ 
+ fi
+ 
+ 
+ 
+ 
+ 
+ 
++
++
++
++
++
+ #
+ # Check to make sure the static flag actually works.
+ #
+ wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+ $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
++if ${lt_cv_prog_compiler_static_works+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_prog_compiler_static_works=no
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+    echo "$lt_simple_link_test_code" > conftest.$ac_ext
+    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+      # The linker can only warn and ignore the option if not recognized
+      # So say no if there are warnings
+      if test -s conftest.err; then
+        # Append any errors to the config.log.
+        cat conftest.err 1>&5
+-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
++       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+        if diff conftest.exp conftest.er2 >/dev/null; then
+          lt_cv_prog_compiler_static_works=yes
+        fi
+      else
+        lt_cv_prog_compiler_static_works=yes
+      fi
+    fi
+@@ -8215,17 +9088,17 @@ fi
+ 
+ 
+ 
+ 
+ 
+ 
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+ $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
++if ${lt_cv_prog_compiler_c_o+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_prog_compiler_c_o=no
+    $RM -r conftest 2>/dev/null
+    mkdir conftest
+    cd conftest
+    mkdir out
+    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+@@ -8234,26 +9107,26 @@ else
+    # Insert the option either (1) after the last *FLAGS variable, or
+    # (2) before a word containing "conftest.", or (3) at the end.
+    # Note that $ac_compile itself does not contain backslashes and begins
+    # with a dollar sign (not a hyphen), so the echo should work correctly.
+    lt_compile=`echo "$ac_compile" | $SED \
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8236: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8240: \$? = $ac_status" >&5
++   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
++     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+        lt_cv_prog_compiler_c_o=yes
+      fi
+    fi
+    chmod u+w . 2>&5
+    $RM conftest*
+    # SGI C++ compiler will create directory out/ii_files/ for
+@@ -8270,17 +9143,17 @@ fi
+ 
+ 
+ 
+ 
+ 
+ 
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+ $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
++if ${lt_cv_prog_compiler_c_o+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_prog_compiler_c_o=no
+    $RM -r conftest 2>/dev/null
+    mkdir conftest
+    cd conftest
+    mkdir out
+    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+@@ -8289,26 +9162,26 @@ else
+    # Insert the option either (1) after the last *FLAGS variable, or
+    # (2) before a word containing "conftest.", or (3) at the end.
+    # Note that $ac_compile itself does not contain backslashes and begins
+    # with a dollar sign (not a hyphen), so the echo should work correctly.
+    lt_compile=`echo "$ac_compile" | $SED \
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8291: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8295: \$? = $ac_status" >&5
++   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
++     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+        lt_cv_prog_compiler_c_o=yes
+      fi
+    fi
+    chmod u+w . 2>&5
+    $RM conftest*
+    # SGI C++ compiler will create directory out/ii_files/ for
+@@ -8364,17 +9237,16 @@ fi
+   compiler_needs_object=no
+   enable_shared_with_static_runtimes=no
+   export_dynamic_flag_spec=
+   export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+   hardcode_automatic=no
+   hardcode_direct=no
+   hardcode_direct_absolute=no
+   hardcode_libdir_flag_spec=
+-  hardcode_libdir_flag_spec_ld=
+   hardcode_libdir_separator=
+   hardcode_minus_L=no
+   hardcode_shlibpath_var=unsupported
+   inherit_rpath=no
+   link_all_deplibs=unknown
+   module_cmds=
+   module_expsym_cmds=
+   old_archive_from_new_cmds=
+@@ -8411,17 +9283,43 @@ fi
+     with_gnu_ld=yes
+     ;;
+   openbsd*)
+     with_gnu_ld=no
+     ;;
+   esac
+ 
+   ld_shlibs=yes
++
++  # On some targets, GNU ld is compatible enough with the native linker
++  # that we're better off using the native interface for both.
++  lt_use_gnu_ld_interface=no
+   if test "$with_gnu_ld" = yes; then
++    case $host_os in
++      aix*)
++	# The AIX port of GNU ld has always aspired to compatibility
++	# with the native linker.  However, as the warning in the GNU ld
++	# block says, versions before 2.19.5* couldn't really create working
++	# shared libraries, regardless of the interface used.
++	case `$LD -v 2>&1` in
++	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
++	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
++	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
++	  *)
++	    lt_use_gnu_ld_interface=yes
++	    ;;
++	esac
++	;;
++      *)
++	lt_use_gnu_ld_interface=yes
++	;;
++    esac
++  fi
++
++  if test "$lt_use_gnu_ld_interface" = yes; then
+     # If archive_cmds runs LD, not CC, wlarc should be empty
+     wlarc='${wl}'
+ 
+     # Set some defaults for GNU ld with shared library support. These
+     # are reset later if shared libraries are not supported. Putting them
+     # here allows them to be overridden if necessary.
+     runpath_var=LD_RUN_PATH
+     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+@@ -8429,36 +9327,38 @@ fi
+     # ancient GNU ld didn't support --whole-archive et. al.
+     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+       whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+     else
+       whole_archive_flag_spec=
+     fi
+     supports_anon_versioning=no
+     case `$LD -v 2>&1` in
++      *GNU\ gold*) supports_anon_versioning=yes ;;
+       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+       *\ 2.11.*) ;; # other 2.11 versions
+       *) supports_anon_versioning=yes ;;
+     esac
+ 
+     # See if GNU ld supports shared libraries.
+     case $host_os in
+     aix[3-9]*)
+       # On AIX/PPC, the GNU linker is very broken
+       if test "$host_cpu" != ia64; then
+ 	ld_shlibs=no
+ 	cat <<_LT_EOF 1>&2
+ 
+-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
++*** Warning: the GNU linker, at least up to release 2.19, is reported
+ *** to be unable to reliably create shared libraries on AIX.
+ *** Therefore, libtool is disabling shared libraries support.  If you
+-*** really care for shared libraries, you may want to modify your PATH
+-*** so that a non-GNU linker is found, and then restart.
++*** really care for shared libraries, you may want to install binutils
++*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
++*** You will then need to restart the configuration process.
+ 
+ _LT_EOF
+       fi
+       ;;
+ 
+     amigaos*)
+       case $host_cpu in
+       powerpc)
+@@ -8484,20 +9384,22 @@ fi
+ 	ld_shlibs=no
+       fi
+       ;;
+ 
+     cygwin* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec='-L$libdir'
++      export_dynamic_flag_spec='${wl}--export-all-symbols'
+       allow_undefined_flag=unsupported
+       always_export_symbols=no
+       enable_shared_with_static_runtimes=yes
+-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
++      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+ 
+       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+         archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ 	# If the export-symbols file already is a .def file (1st line
+ 	# is EXPORTS), use it as is; otherwise, prepend...
+ 	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ 	  cp $export_symbols $output_objdir/$soname.def;
+ 	else
+@@ -8505,108 +9407,117 @@ fi
+ 	  cat $export_symbols >> $output_objdir/$soname.def;
+ 	fi~
+ 	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       else
+ 	ld_shlibs=no
+       fi
+       ;;
+ 
++    haiku*)
++      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++      link_all_deplibs=yes
++      ;;
++
+     interix[3-9]*)
+       hardcode_direct=no
+       hardcode_shlibpath_var=no
+       hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+       export_dynamic_flag_spec='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+ 
+-    gnu* | linux* | tpf* | k*bsd*-gnu)
++    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+       tmp_diet=no
+       if test "$host_os" = linux-dietlibc; then
+ 	case $cc_basename in
+ 	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+ 	esac
+       fi
+       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ 	 && test "$tmp_diet" = no
+       then
+-	tmp_addflag=
++	tmp_addflag=' $pic_flag'
+ 	tmp_sharedflag='-shared'
+ 	case $cc_basename,$host_cpu in
+         pgcc*)				# Portland Group C compiler
+-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	  tmp_addflag=' $pic_flag'
+ 	  ;;
+-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	pgf77* | pgf90* | pgf95* | pgfortran*)
++					# Portland Group f77 and f90 compilers
++	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	  tmp_addflag=' $pic_flag -Mnomain' ;;
+ 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+ 	  tmp_addflag=' -i_dynamic' ;;
+ 	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+ 	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+ 	ifc* | ifort*)			# Intel Fortran compiler
+ 	  tmp_addflag=' -nofor_main' ;;
+ 	lf95*)				# Lahey Fortran 8.1
+ 	  whole_archive_flag_spec=
+ 	  tmp_sharedflag='--shared' ;;
+-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
++	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ 	  tmp_sharedflag='-qmkshrobj'
+ 	  tmp_addflag= ;;
++	nvcc*)	# Cuda Compiler Driver 2.2
++	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++	  compiler_needs_object=yes
++	  ;;
+ 	esac
+ 	case `$CC -V 2>&1 | sed 5q` in
+ 	*Sun\ C*)			# Sun C 5.9
+-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	  compiler_needs_object=yes
+ 	  tmp_sharedflag='-G' ;;
+ 	*Sun\ F*)			# Sun Fortran 8.3
+ 	  tmp_sharedflag='-G' ;;
+ 	esac
+ 	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ 
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ 	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ 	    echo "local: *; };" >> $output_objdir/$libname.ver~
+ 	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+         fi
+ 
+ 	case $cc_basename in
+-	xlf*)
++	xlf* | bgf* | bgxlf* | mpixlf*)
+ 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+-	  hardcode_libdir_flag_spec=
+-	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+-	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ 	  if test "x$supports_anon_versioning" = xyes; then
+ 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ 	      echo "local: *; };" >> $output_objdir/$libname.ver~
+-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ 	  fi
+ 	  ;;
+ 	esac
+       else
+         ld_shlibs=no
+       fi
+       ;;
+ 
+     netbsd*)
+       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ 	wlarc=
+       else
+-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       fi
+       ;;
+ 
+     solaris*)
+       if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ 	ld_shlibs=no
+ 	cat <<_LT_EOF 1>&2
+ 
+@@ -8614,18 +9525,18 @@ fi
+ *** create shared libraries on Solaris systems.  Therefore, libtool
+ *** is disabling shared libraries support.  We urge you to upgrade GNU
+ *** binutils to release 2.9.1 or newer.  Another option is to modify
+ *** your PATH or compiler configuration so that the native linker is
+ *** used, and then restart.
+ 
+ _LT_EOF
+       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       else
+ 	ld_shlibs=no
+       fi
+       ;;
+ 
+     sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+       case `$LD -v 2>&1` in
+         *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+@@ -8661,18 +9572,18 @@ fi
+       archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+       wlarc=
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       ;;
+ 
+     *)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       else
+ 	ld_shlibs=no
+       fi
+       ;;
+     esac
+ 
+     if test "$ld_shlibs" = no; then
+       runpath_var=
+@@ -8702,18 +9613,20 @@ fi
+ 	# On IA64, the linker does run time linking by default, so we don't
+ 	# have to do anything special.
+ 	aix_use_runtimelinking=no
+ 	exp_sym_flag='-Bexport'
+ 	no_entry_flag=""
+       else
+ 	# If we're using GNU nm, then we don't want the "-C" option.
+ 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
++	# Also, AIX nm treats weak defined symbols like other global
++	# defined symbols, whereas GNU nm marks them as "W".
+ 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ 	else
+ 	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ 	fi
+ 	aix_use_runtimelinking=no
+ 
+ 	# Test if we are trying to use run time linking or normal
+ 	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ 	# need to do runtime linking.
+@@ -8790,93 +9703,124 @@ fi
+       # underscore (_), so it is better to generate a list of symbols to export.
+       always_export_symbols=yes
+       if test "$aix_use_runtimelinking" = yes; then
+ 	# Warning - without using the other runtime loading flags (-brtl),
+ 	# -berok will link without error, but may produce a broken library.
+ 	allow_undefined_flag='-berok'
+         # Determine the default libpath from the value encoded in an
+         # empty executable.
+-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++        if test "${lt_cv_aix_libpath+set}" = set; then
++  aix_libpath=$lt_cv_aix_libpath
++else
++  if ${lt_cv_aix_libpath_+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+ 
+-lt_aix_libpath_sed='
+-    /Import File Strings/,/^$/ {
+-	/^0/ {
+-	    s/^0  *\(.*\)$/\1/
+-	    p
+-	}
+-    }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++  lt_aix_libpath_sed='
++      /Import File Strings/,/^$/ {
++	  /^0/ {
++	      s/^0  *\([^ ]*\) *$/\1/
++	      p
++	  }
++      }'
++  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++  # Check for a 64-bit object if we didn't find anything.
++  if test -z "$lt_cv_aix_libpath_"; then
++    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++  fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++  if test -z "$lt_cv_aix_libpath_"; then
++    lt_cv_aix_libpath_="/usr/lib:/lib"
++  fi
++
++fi
++
++  aix_libpath=$lt_cv_aix_libpath_
++fi
+ 
+         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
++        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+ 	if test "$host_cpu" = ia64; then
+ 	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ 	  allow_undefined_flag="-z nodefs"
+ 	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ 	else
+ 	 # Determine the default libpath from the value encoded in an
+ 	 # empty executable.
+-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++	 if test "${lt_cv_aix_libpath+set}" = set; then
++  aix_libpath=$lt_cv_aix_libpath
++else
++  if ${lt_cv_aix_libpath_+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+ 
+-lt_aix_libpath_sed='
+-    /Import File Strings/,/^$/ {
+-	/^0/ {
+-	    s/^0  *\(.*\)$/\1/
+-	    p
+-	}
+-    }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi
++  lt_aix_libpath_sed='
++      /Import File Strings/,/^$/ {
++	  /^0/ {
++	      s/^0  *\([^ ]*\) *$/\1/
++	      p
++	  }
++      }'
++  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++  # Check for a 64-bit object if we didn't find anything.
++  if test -z "$lt_cv_aix_libpath_"; then
++    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++  fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++  if test -z "$lt_cv_aix_libpath_"; then
++    lt_cv_aix_libpath_="/usr/lib:/lib"
++  fi
++
++fi
++
++  aix_libpath=$lt_cv_aix_libpath_
++fi
+ 
+ 	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ 	  # Warning - without using the other run time loading flags,
+ 	  # -berok will link without error, but may produce a broken library.
+ 	  no_undefined_flag=' ${wl}-bernotok'
+ 	  allow_undefined_flag=' ${wl}-berok'
+-	  # Exported symbols can be pulled into shared objects from archives
+-	  whole_archive_flag_spec='$convenience'
++	  if test "$with_gnu_ld" = yes; then
++	    # We only use this code for GNU lds that support --whole-archive.
++	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
++	  else
++	    # Exported symbols can be pulled into shared objects from archives
++	    whole_archive_flag_spec='$convenience'
++	  fi
+ 	  archive_cmds_need_lc=yes
+ 	  # This is similar to how AIX traditionally builds its shared libraries.
+ 	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ 	fi
+       fi
+       ;;
+ 
+     amigaos*)
+@@ -8898,48 +9842,97 @@ if test -z "$aix_libpath"; then aix_libp
+       export_dynamic_flag_spec=-rdynamic
+       ;;
+ 
+     cygwin* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+       # no search path for DLLs.
+-      hardcode_libdir_flag_spec=' '
+-      allow_undefined_flag=unsupported
+-      # Tell ltmain to make .lib files, not .a files.
+-      libext=lib
+-      # Tell ltmain to make .dll files, not .so files.
+-      shrext_cmds=".dll"
+-      # FIXME: Setting linknames here is a bad hack.
+-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+-      # The linker will automatically build a .lib file if we build a DLL.
+-      old_archive_from_new_cmds='true'
+-      # FIXME: Should let the user specify the lib program.
+-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+-      fix_srcfile_path=''
+-      enable_shared_with_static_runtimes=yes
++      case $cc_basename in
++      cl*)
++	# Native MSVC
++	hardcode_libdir_flag_spec=' '
++	allow_undefined_flag=unsupported
++	always_export_symbols=yes
++	file_list_spec='@'
++	# Tell ltmain to make .lib files, not .a files.
++	libext=lib
++	# Tell ltmain to make .dll files, not .so files.
++	shrext_cmds=".dll"
++	# FIXME: Setting linknames here is a bad hack.
++	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++	  else
++	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++	  fi~
++	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++	  linknames='
++	# The linker will not automatically build a static lib if we build a DLL.
++	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
++	enable_shared_with_static_runtimes=yes
++	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
++	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++	# Don't use ranlib
++	old_postinstall_cmds='chmod 644 $oldlib'
++	postlink_cmds='lt_outputfile="@OUTPUT@"~
++	  lt_tool_outputfile="@TOOL_OUTPUT@"~
++	  case $lt_outputfile in
++	    *.exe|*.EXE) ;;
++	    *)
++	      lt_outputfile="$lt_outputfile.exe"
++	      lt_tool_outputfile="$lt_tool_outputfile.exe"
++	      ;;
++	  esac~
++	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++	    $RM "$lt_outputfile.manifest";
++	  fi'
++	;;
++      *)
++	# Assume MSVC wrapper
++	hardcode_libdir_flag_spec=' '
++	allow_undefined_flag=unsupported
++	# Tell ltmain to make .lib files, not .a files.
++	libext=lib
++	# Tell ltmain to make .dll files, not .so files.
++	shrext_cmds=".dll"
++	# FIXME: Setting linknames here is a bad hack.
++	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++	# The linker will automatically build a .lib file if we build a DLL.
++	old_archive_from_new_cmds='true'
++	# FIXME: Should let the user specify the lib program.
++	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++	enable_shared_with_static_runtimes=yes
++	;;
++      esac
+       ;;
+ 
+     darwin* | rhapsody*)
+ 
+ 
+   archive_cmds_need_lc=no
+   hardcode_direct=no
+   hardcode_automatic=yes
+   hardcode_shlibpath_var=unsupported
+-  whole_archive_flag_spec=''
++  if test "$lt_cv_ld_force_load" = "yes"; then
++    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
++
++  else
++    whole_archive_flag_spec=''
++  fi
+   link_all_deplibs=yes
+   allow_undefined_flag="$_lt_dar_allow_undefined"
+   case $cc_basename in
+      ifort*) _lt_dar_can_shared=yes ;;
+      *) _lt_dar_can_shared=$GCC ;;
+   esac
+   if test "$_lt_dar_can_shared" = "yes"; then
+-    output_verbose_link_cmd=echo
++    output_verbose_link_cmd=func_echo_all
+     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+     module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ 
+   else
+   ld_shlibs=no
+   fi
+@@ -8947,105 +9940,139 @@ if test -z "$aix_libpath"; then aix_libp
+       ;;
+ 
+     dgux*)
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_libdir_flag_spec='-L$libdir'
+       hardcode_shlibpath_var=no
+       ;;
+ 
+-    freebsd1*)
+-      ld_shlibs=no
+-      ;;
+-
+     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+     # support.  Future versions do this automatically, but an explicit c++rt0.o
+     # does not break anything, and helps significantly (at the cost of a little
+     # extra space).
+     freebsd2.2*)
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+       hardcode_libdir_flag_spec='-R$libdir'
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       ;;
+ 
+     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+-    freebsd2*)
++    freebsd2.*)
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_direct=yes
+       hardcode_minus_L=yes
+       hardcode_shlibpath_var=no
+       ;;
+ 
+     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+     freebsd* | dragonfly*)
+-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       hardcode_libdir_flag_spec='-R$libdir'
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       ;;
+ 
+     hpux9*)
+       if test "$GCC" = yes; then
+-	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       else
+ 	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       fi
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+ 
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+       export_dynamic_flag_spec='${wl}-E'
+       ;;
+ 
+     hpux10*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+-	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
++	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+       else
+ 	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+       fi
+       if test "$with_gnu_ld" = no; then
+ 	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+-	hardcode_libdir_flag_spec_ld='+b $libdir'
+ 	hardcode_libdir_separator=:
+ 	hardcode_direct=yes
+ 	hardcode_direct_absolute=yes
+ 	export_dynamic_flag_spec='${wl}-E'
+ 	# hardcode_minus_L: Not really in the search PATH,
+ 	# but as the default location of the library.
+ 	hardcode_minus_L=yes
+       fi
+       ;;
+ 
+     hpux11*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
++      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ 	case $host_cpu in
+ 	hppa*64*)
+ 	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	ia64*)
+-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	*)
+-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	esac
+       else
+ 	case $host_cpu in
+ 	hppa*64*)
+ 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	ia64*)
+ 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	*)
+-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++
++	  # Older versions of the 11.00 compiler do not understand -b yet
++	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
++	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
++$as_echo_n "checking if $CC understands -b... " >&6; }
++if ${lt_cv_prog_compiler__b+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_prog_compiler__b=no
++   save_LDFLAGS="$LDFLAGS"
++   LDFLAGS="$LDFLAGS -b"
++   echo "$lt_simple_link_test_code" > conftest.$ac_ext
++   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
++     # The linker can only warn and ignore the option if not recognized
++     # So say no if there are warnings
++     if test -s conftest.err; then
++       # Append any errors to the config.log.
++       cat conftest.err 1>&5
++       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
++       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
++       if diff conftest.exp conftest.er2 >/dev/null; then
++         lt_cv_prog_compiler__b=yes
++       fi
++     else
++       lt_cv_prog_compiler__b=yes
++     fi
++   fi
++   $RM -r conftest*
++   LDFLAGS="$save_LDFLAGS"
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
++$as_echo "$lt_cv_prog_compiler__b" >&6; }
++
++if test x"$lt_cv_prog_compiler__b" = xyes; then
++    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++else
++    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
++fi
++
+ 	  ;;
+ 	esac
+       fi
+       if test "$with_gnu_ld" = no; then
+ 	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ 	hardcode_libdir_separator=:
+ 
+ 	case $host_cpu in
+@@ -9063,36 +10090,49 @@ if test -z "$aix_libpath"; then aix_libp
+ 	  hardcode_minus_L=yes
+ 	  ;;
+ 	esac
+       fi
+       ;;
+ 
+     irix5* | irix6* | nonstopux*)
+       if test "$GCC" = yes; then
+-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 	# Try to use the -exported_symbol ld option, if it does not
+ 	# work, assume that -exports_file does not work either and
+ 	# implicitly export all symbols.
+-        save_LDFLAGS="$LDFLAGS"
+-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+-int foo(void) {}
++	# This should be the same for all languages, so no per-tag cache variable.
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
++if ${lt_cv_irix_exported_symbol+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  save_LDFLAGS="$LDFLAGS"
++	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++int foo (void) { return 0; }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-
++  lt_cv_irix_exported_symbol=yes
++else
++  lt_cv_irix_exported_symbol=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+-        LDFLAGS="$save_LDFLAGS"
++           LDFLAGS="$save_LDFLAGS"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
++$as_echo "$lt_cv_irix_exported_symbol" >&6; }
++	if test "$lt_cv_irix_exported_symbol" = yes; then
++          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++	fi
+       else
+-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
++	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
++	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       fi
+       archive_cmds_need_lc='no'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+       hardcode_libdir_separator=:
+       inherit_rpath=yes
+       link_all_deplibs=yes
+       ;;
+ 
+@@ -9144,58 +10184,58 @@ rm -f core conftest.err conftest.$ac_obj
+ 	ld_shlibs=no
+       fi
+       ;;
+ 
+     os2*)
+       hardcode_libdir_flag_spec='-L$libdir'
+       hardcode_minus_L=yes
+       allow_undefined_flag=unsupported
+-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
++      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+       old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+       ;;
+ 
+     osf3*)
+       if test "$GCC" = yes; then
+ 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       else
+ 	allow_undefined_flag=' -expect_unresolved \*'
+-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       fi
+       archive_cmds_need_lc='no'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+       hardcode_libdir_separator=:
+       ;;
+ 
+     osf4* | osf5*)	# as osf3* with the addition of -msym flag
+       if test "$GCC" = yes; then
+ 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+       else
+ 	allow_undefined_flag=' -expect_unresolved \*'
+-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ 	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
++	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+ 
+ 	# Both c and cxx compiler support -rpath directly
+ 	hardcode_libdir_flag_spec='-rpath $libdir'
+       fi
+       archive_cmds_need_lc='no'
+       hardcode_libdir_separator=:
+       ;;
+ 
+     solaris*)
+       no_undefined_flag=' -z defs'
+       if test "$GCC" = yes; then
+ 	wlarc='${wl}'
+-	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+       else
+ 	case `$CC -V 2>&1` in
+ 	*"Compilers 5.0"*)
+ 	  wlarc=''
+ 	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ 	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ 	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ 	  ;;
+@@ -9373,54 +10413,60 @@ x|xyes)
+       # FIXME: we may have to deal with multi-command sequences.
+       ;;
+     '$CC '*)
+       # Test whether the compiler implicitly links with -lc since on some
+       # systems, -lgcc has to come before -lc. If gcc already passes -lc
+       # to ld, don't add -lc before -lgcc.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+-      $RM conftest*
+-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++if ${lt_cv_archive_cmds_need_lc+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  $RM conftest*
++	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; } 2>conftest.err; then
+-        soname=conftest
+-        lib=conftest
+-        libobjs=conftest.$ac_objext
+-        deplibs=
+-        wl=$lt_prog_compiler_wl
+-	pic_flag=$lt_prog_compiler_pic
+-        compiler_flags=-v
+-        linker_flags=-v
+-        verstring=
+-        output_objdir=.
+-        libname=conftest
+-        lt_save_allow_undefined_flag=$allow_undefined_flag
+-        allow_undefined_flag=
+-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
++	  soname=conftest
++	  lib=conftest
++	  libobjs=conftest.$ac_objext
++	  deplibs=
++	  wl=$lt_prog_compiler_wl
++	  pic_flag=$lt_prog_compiler_pic
++	  compiler_flags=-v
++	  linker_flags=-v
++	  verstring=
++	  output_objdir=.
++	  libname=conftest
++	  lt_save_allow_undefined_flag=$allow_undefined_flag
++	  allow_undefined_flag=
++	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }
+-        then
+-	  archive_cmds_need_lc=no
+-        else
+-	  archive_cmds_need_lc=yes
+-        fi
+-        allow_undefined_flag=$lt_save_allow_undefined_flag
+-      else
+-        cat conftest.err 1>&5
+-      fi
+-      $RM conftest*
+-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+-$as_echo "$archive_cmds_need_lc" >&6; }
++	  then
++	    lt_cv_archive_cmds_need_lc=no
++	  else
++	    lt_cv_archive_cmds_need_lc=yes
++	  fi
++	  allow_undefined_flag=$lt_save_allow_undefined_flag
++	else
++	  cat conftest.err 1>&5
++	fi
++	$RM conftest*
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
++$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
++      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+       ;;
+     esac
+   fi
+   ;;
+ esac
+ 
+ 
+ 
+@@ -9568,52 +10614,54 @@ esac
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+-
+-
+-
+-
+-
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+ $as_echo_n "checking dynamic linker characteristics... " >&6; }
+ 
+ if test "$GCC" = yes; then
+   case $host_os in
+     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+     *) lt_awk_arg="/^libraries:/" ;;
+   esac
+-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
++  case $host_os in
++    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
++    *) lt_sed_strip_eq="s,=/,/,g" ;;
++  esac
++  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
++  case $lt_search_path_spec in
++  *\;*)
+     # if the path contains ";" then we assume it to be the separator
+     # otherwise default to the standard path separator (i.e. ":") - it is
+     # assumed that no part of a normal pathname contains ";" but that should
+     # okay in the real world where ";" in dirpaths is itself problematic.
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+-  else
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-  fi
++    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
++    ;;
++  *)
++    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
++    ;;
++  esac
+   # Ok, now we have the path, separated by spaces, we can step through it
+   # and add multilib dir if necessary.
+   lt_tmp_lt_search_path_spec=
+   lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+   for lt_sys_path in $lt_search_path_spec; do
+     if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+     else
+       test -d "$lt_sys_path" && \
+ 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+     fi
+   done
+-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
++  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+ BEGIN {RS=" "; FS="/|\n";} {
+   lt_foo="";
+   lt_count=0;
+   for (lt_i = NF; lt_i > 0; lt_i--) {
+     if ($lt_i != "" && $lt_i != ".") {
+       if ($lt_i == "..") {
+         lt_count++;
+       } else {
+@@ -9623,17 +10671,23 @@ BEGIN {RS=" "; FS="/|\n";} {
+           lt_count--;
+         }
+       }
+     }
+   }
+   if (lt_foo != "") { lt_freq[lt_foo]++; }
+   if (lt_freq[lt_foo] == 1) { print lt_foo; }
+ }'`
+-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
++  # AWK program above erroneously prepends '/' to C:/dos/paths
++  # for these hosts.
++  case $host_os in
++    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
++      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
++  esac
++  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+ else
+   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ fi
+ library_names_spec=
+ libname_spec='lib$name'
+ soname_spec=
+ shrext_cmds=".so"
+ postinstall_cmds=
+@@ -9649,26 +10703,26 @@ need_lib_prefix=unknown
+ hardcode_into_libs=no
+ 
+ # when you set need_version to no, make sure it does not cause -set_version
+ # flags to be left without arguments
+ need_version=unknown
+ 
+ case $host_os in
+ aix3*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+   shlibpath_var=LIBPATH
+ 
+   # AIX 3 has no versioning support, so we append a major version to the name.
+   soname_spec='${libname}${release}${shared_ext}$major'
+   ;;
+ 
+ aix[4-9]*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   hardcode_into_libs=yes
+   if test "$host_cpu" = ia64; then
+     # AIX 5 supports IA64
+     library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+     shlibpath_var=LD_LIBRARY_PATH
+   else
+@@ -9711,29 +10765,29 @@ amigaos*)
+   powerpc)
+     # Since July 2007 AmigaOS4 officially supports .so libraries.
+     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     ;;
+   m68k)
+     library_names_spec='$libname.ixlibrary $libname.a'
+     # Create ${libname}_ixlibrary.a entries in /sys/libs.
+-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
++    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+     ;;
+   esac
+   ;;
+ 
+ beos*)
+   library_names_spec='${libname}${shared_ext}'
+   dynamic_linker="$host_os ld.so"
+   shlibpath_var=LIBRARY_PATH
+   ;;
+ 
+ bsdi[45]*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+   shlibpath_var=LD_LIBRARY_PATH
+   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+   sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+   # the default ld.so.conf also contains /usr/contrib/lib and
+@@ -9742,18 +10796,19 @@ bsdi[45]*)
+   ;;
+ 
+ cygwin* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=".dll"
+   need_version=no
+   need_lib_prefix=no
+ 
+-  case $GCC,$host_os in
+-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++  case $GCC,$cc_basename in
++  yes,*)
++    # gcc
+     library_names_spec='$libname.dll.a'
+     # DLL is installed to $(libdir)/../bin by postinstall_cmds
+     postinstall_cmds='base_file=`basename \${file}`~
+       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+       dldir=$destdir/`dirname \$dlpath`~
+       test -d \$dldir || mkdir -p \$dldir~
+       $install_prog $dir/$dlname \$dldir/$dlname~
+       chmod a+x \$dldir/$dlname~
+@@ -9764,46 +10819,93 @@ cygwin* | mingw* | pw32* | cegcc*)
+       dlpath=$dir/\$dldll~
+        $RM \$dlpath'
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+     cygwin*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
++
++      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+       ;;
+     mingw* | cegcc*)
+       # MinGW DLLs use traditional 'lib' prefix
+       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+-        # It is most probably a Windows format PATH printed by
+-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+-        # path with ; separators, and with drive letters. We can handle the
+-        # drive letters (cygwin fileutils understands them), so leave them,
+-        # especially as we might pass files found there to a mingw objdump,
+-        # which wouldn't understand a cygwinified path. Ahh.
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+-      else
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-      fi
+       ;;
+     pw32*)
+       # pw32 DLLs use 'pw' prefix rather than 'lib'
+       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+       ;;
+     esac
++    dynamic_linker='Win32 ld.exe'
++    ;;
++
++  *,cl*)
++    # Native MSVC
++    libname_spec='$name'
++    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++    library_names_spec='${libname}.dll.lib'
++
++    case $build_os in
++    mingw*)
++      sys_lib_search_path_spec=
++      lt_save_ifs=$IFS
++      IFS=';'
++      for lt_path in $LIB
++      do
++        IFS=$lt_save_ifs
++        # Let DOS variable expansion print the short 8.3 style file name.
++        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++      done
++      IFS=$lt_save_ifs
++      # Convert to MSYS style.
++      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
++      ;;
++    cygwin*)
++      # Convert to unix form, then to dos form, then back to unix form
++      # but this time dos style (no spaces!) so that the unix form looks
++      # like /cygdrive/c/PROGRA~1:/cygdr...
++      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++      ;;
++    *)
++      sys_lib_search_path_spec="$LIB"
++      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++        # It is most probably a Windows format PATH.
++        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++      else
++        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++      fi
++      # FIXME: find the short name or the path components, as spaces are
++      # common. (e.g. "Program Files" -> "PROGRA~1")
++      ;;
++    esac
++
++    # DLL is installed to $(libdir)/../bin by postinstall_cmds
++    postinstall_cmds='base_file=`basename \${file}`~
++      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++      dldir=$destdir/`dirname \$dlpath`~
++      test -d \$dldir || mkdir -p \$dldir~
++      $install_prog $dir/$dlname \$dldir/$dlname'
++    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++      dlpath=$dir/\$dldll~
++       $RM \$dlpath'
++    shlibpath_overrides_runpath=yes
++    dynamic_linker='Win32 link.exe'
+     ;;
+ 
+   *)
++    # Assume MSVC wrapper
+     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+-    ;;
+-  esac
+-  dynamic_linker='Win32 ld.exe'
++    dynamic_linker='Win32 ld.exe'
++    ;;
++  esac
+   # FIXME: first we should search . and the directory the executable is in
+   shlibpath_var=PATH
+   ;;
+ 
+ darwin* | rhapsody*)
+   dynamic_linker="$host_os dyld"
+   version_type=darwin
+   need_lib_prefix=no
+@@ -9814,36 +10916,32 @@ darwin* | rhapsody*)
+   shlibpath_var=DYLD_LIBRARY_PATH
+   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+ 
+   sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+   sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+   ;;
+ 
+ dgux*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   ;;
+ 
+-freebsd1*)
+-  dynamic_linker=no
+-  ;;
+-
+ freebsd* | dragonfly*)
+   # DragonFly does not have aout.  When/if they implement a new
+   # versioning mechanism, adjust this.
+   if test -x /usr/bin/objformat; then
+     objformat=`/usr/bin/objformat`
+   else
+     case $host_os in
+-    freebsd[123]*) objformat=aout ;;
++    freebsd[23].*) objformat=aout ;;
+     *) objformat=elf ;;
+     esac
+   fi
+   version_type=freebsd-$objformat
+   case $version_type in
+     freebsd-elf*)
+       library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+       need_version=no
+@@ -9851,17 +10949,17 @@ freebsd* | dragonfly*)
+       ;;
+     freebsd-*)
+       library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+       need_version=yes
+       ;;
+   esac
+   shlibpath_var=LD_LIBRARY_PATH
+   case $host_os in
+-  freebsd2*)
++  freebsd2.*)
+     shlibpath_overrides_runpath=yes
+     ;;
+   freebsd3.[01]* | freebsdelf3.[01]*)
+     shlibpath_overrides_runpath=yes
+     hardcode_into_libs=yes
+     ;;
+   freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+   freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+@@ -9871,22 +10969,36 @@ freebsd* | dragonfly*)
+   *) # from 4.6 on, and DragonFly
+     shlibpath_overrides_runpath=yes
+     hardcode_into_libs=yes
+     ;;
+   esac
+   ;;
+ 
+ gnu*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  hardcode_into_libs=yes
++  ;;
++
++haiku*)
++  version_type=linux # correct to gnu/linux during the next big refactor
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os runtime_loader"
++  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
++  soname_spec='${libname}${release}${shared_ext}$major'
++  shlibpath_var=LIBRARY_PATH
++  shlibpath_overrides_runpath=yes
++  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+   hardcode_into_libs=yes
+   ;;
+ 
+ hpux9* | hpux10* | hpux11*)
+   # Give a soname corresponding to the major version so that dld.sl refuses to
+   # link against other versions.
+   version_type=sunos
+   need_lib_prefix=no
+@@ -9922,38 +11034,40 @@ hpux9* | hpux10* | hpux11*)
+     shrext_cmds='.sl'
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=SHLIB_PATH
+     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     ;;
+   esac
+-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
++  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+   postinstall_cmds='chmod 555 $lib'
++  # or fails outright, so override atomically:
++  install_override_mode=555
+   ;;
+ 
+ interix[3-9]*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
+   hardcode_into_libs=yes
+   ;;
+ 
+ irix5* | irix6* | nonstopux*)
+   case $host_os in
+     nonstopux*) version_type=nonstopux ;;
+     *)
+ 	if test "$lt_cv_prog_gnu_ld" = yes; then
+-		version_type=linux
++		version_type=linux # correct to gnu/linux during the next big refactor
+ 	else
+ 		version_type=irix
+ 	fi ;;
+   esac
+   need_lib_prefix=no
+   need_version=no
+   soname_spec='${libname}${release}${shared_ext}$major'
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+@@ -9980,64 +11094,74 @@ irix5* | irix6* | nonstopux*)
+   hardcode_into_libs=yes
+   ;;
+ 
+ # No shared lib support for Linux oldld, aout, or coff.
+ linux*oldld* | linux*aout* | linux*coff*)
+   dynamic_linker=no
+   ;;
+ 
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu)
+-  version_type=linux
++# This must be glibc/ELF.
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
++
+   # Some binutils ld are patched to set DT_RUNPATH
+-  save_LDFLAGS=$LDFLAGS
+-  save_libdir=$libdir
+-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  lt_cv_shlibpath_overrides_runpath=no
++    save_LDFLAGS=$LDFLAGS
++    save_libdir=$libdir
++    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
++	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+-  shlibpath_overrides_runpath=yes
++  lt_cv_shlibpath_overrides_runpath=yes
+ fi
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+-  LDFLAGS=$save_LDFLAGS
+-  libdir=$save_libdir
++    LDFLAGS=$save_LDFLAGS
++    libdir=$save_libdir
++
++fi
++
++  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+ 
+   # This implies no fast_install, which is unacceptable.
+   # Some rework will be needed to allow for fast_install
+   # before this can be enabled.
+   hardcode_into_libs=yes
+ 
+   # Add ABI-specific directories to the system library path.
+   sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+ 
+   # Append ld.so.conf contents to the search path
+   if test -f /etc/ld.so.conf; then
+-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
++    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+     sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++
+   fi
+ 
+   # We used to test for /lib/ld.so.1 and disable shared libraries on
+   # powerpc, because MkLinux only supported shared libraries with the
+   # GNU dynamic linker.  Since this was broken with cross compilers,
+   # most powerpc-linux boxes support dynamic linking these days and
+   # people can always --disable-shared, the test was removed, and we
+   # assume the GNU/Linux dynamic linker is in use.
+@@ -10058,17 +11182,17 @@ netbsd*)
+     dynamic_linker='NetBSD ld.elf_so'
+   fi
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=yes
+   hardcode_into_libs=yes
+   ;;
+ 
+ newsos6)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=yes
+   ;;
+ 
+ *nto* | *qnx*)
+   version_type=qnx
+   need_lib_prefix=no
+@@ -10127,17 +11251,17 @@ osf3* | osf4* | osf5*)
+   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+   ;;
+ 
+ rdos*)
+   dynamic_linker=no
+   ;;
+ 
+ solaris*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=yes
+   hardcode_into_libs=yes
+   # ldd complains unless libraries are executable
+@@ -10152,17 +11276,17 @@ sunos4*)
+   shlibpath_overrides_runpath=yes
+   if test "$with_gnu_ld" = yes; then
+     need_lib_prefix=no
+   fi
+   need_version=yes
+   ;;
+ 
+ sysv4 | sysv4.3*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   case $host_vendor in
+     sni)
+       shlibpath_overrides_runpath=no
+       need_lib_prefix=no
+       runpath_var=LD_RUN_PATH
+@@ -10176,17 +11300,17 @@ sysv4 | sysv4.3*)
+       shlibpath_overrides_runpath=no
+       sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+       ;;
+   esac
+   ;;
+ 
+ sysv4*MP*)
+   if test -d /usr/nec ;then
+-    version_type=linux
++    version_type=linux # correct to gnu/linux during the next big refactor
+     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+     soname_spec='$libname${shared_ext}.$major'
+     shlibpath_var=LD_LIBRARY_PATH
+   fi
+   ;;
+ 
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+   version_type=freebsd-elf
+@@ -10207,27 +11331,27 @@ sysv5* | sco3.2v5* | sco5v6* | unixware*
+ 	;;
+     esac
+   fi
+   sys_lib_dlsearch_path_spec='/usr/lib'
+   ;;
+ 
+ tpf*)
+   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
+   hardcode_into_libs=yes
+   ;;
+ 
+ uts4*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   ;;
+ 
+ *)
+   dynamic_linker=no
+   ;;
+@@ -10329,16 +11453,21 @@ fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
++
++
++
++
++
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+ $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+ hardcode_action=
+ if test -n "$hardcode_libdir_flag_spec" ||
+    test -n "$runpath_var" ||
+    test "X$hardcode_automatic" = "Xyes" ; then
+ 
+   # We can hardcode non-existent directories.
+@@ -10401,17 +11530,17 @@ else
+     lt_cv_dlopen="dlopen"
+     lt_cv_dlopen_libs=
+     ;;
+ 
+   darwin*)
+   # if libdl is installed we need to link against it
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+ $as_echo_n "checking for dlopen in -ldl... " >&6; }
+-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
++if ${ac_cv_lib_dl_dlopen+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldl  $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10435,36 +11564,36 @@ else
+   ac_cv_lib_dl_dlopen=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
++if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+ else
+ 
+     lt_cv_dlopen="dyld"
+     lt_cv_dlopen_libs=
+     lt_cv_dlopen_self=yes
+ 
+ fi
+ 
+     ;;
+ 
+   *)
+     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+-if test "x$ac_cv_func_shl_load" = x""yes; then :
++if test "x$ac_cv_func_shl_load" = xyes; then :
+   lt_cv_dlopen="shl_load"
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+ $as_echo_n "checking for shl_load in -ldld... " >&6; }
+-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
++if ${ac_cv_lib_dld_shl_load+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldld  $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10488,26 +11617,26 @@ else
+   ac_cv_lib_dld_shl_load=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+ $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
++if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+ else
+   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+-if test "x$ac_cv_func_dlopen" = x""yes; then :
++if test "x$ac_cv_func_dlopen" = xyes; then :
+   lt_cv_dlopen="dlopen"
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+ $as_echo_n "checking for dlopen in -ldl... " >&6; }
+-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
++if ${ac_cv_lib_dl_dlopen+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldl  $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10531,22 +11660,22 @@ else
+   ac_cv_lib_dl_dlopen=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
++if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+ $as_echo_n "checking for dlopen in -lsvld... " >&6; }
+-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
++if ${ac_cv_lib_svld_dlopen+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lsvld  $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10570,22 +11699,22 @@ else
+   ac_cv_lib_svld_dlopen=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+ $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
++if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+ $as_echo_n "checking for dld_link in -ldld... " >&6; }
+-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
++if ${ac_cv_lib_dld_dld_link+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldld  $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10609,17 +11738,17 @@ else
+   ac_cv_lib_dld_dld_link=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+ $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
++if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+ fi
+ 
+ 
+ fi
+ 
+ 
+ fi
+@@ -10650,26 +11779,26 @@ fi
+     save_LDFLAGS="$LDFLAGS"
+     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+ 
+     save_LIBS="$LIBS"
+     LIBS="$lt_cv_dlopen_libs $LIBS"
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+ $as_echo_n "checking whether a program can dlopen itself... " >&6; }
+-if test "${lt_cv_dlopen_self+set}" = set; then :
++if ${lt_cv_dlopen_self+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   	  if test "$cross_compiling" = yes; then :
+   lt_cv_dlopen_self=cross
+ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 10661 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+ #include <dlfcn.h>
+ #endif
+ 
+ #include <stdio.h>
+ 
+@@ -10700,26 +11829,36 @@ else
+ #        else
+ #          define LT_DLLAZY_OR_NOW	0
+ #        endif
+ #      endif
+ #    endif
+ #  endif
+ #endif
+ 
+-void fnord() { int i=42;}
++/* When -fvisbility=hidden is used, assume the code has been annotated
++   correspondingly for the symbols needed.  */
++#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
++int fnord () __attribute__((visibility("default")));
++#endif
++
++int fnord () { return 42; }
+ int main ()
+ {
+   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+   int status = $lt_dlunknown;
+ 
+   if (self)
+     {
+       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
++      else
++        {
++	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
++          else puts (dlerror ());
++	}
+       /* dlclose (self); */
+     }
+   else
+     puts (dlerror ());
+ 
+   return status;
+ }
+ _LT_EOF
+@@ -10746,26 +11885,26 @@ rm -fr conftest*
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+ $as_echo "$lt_cv_dlopen_self" >&6; }
+ 
+     if test "x$lt_cv_dlopen_self" = xyes; then
+       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+ $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+-if test "${lt_cv_dlopen_self_static+set}" = set; then :
++if ${lt_cv_dlopen_self_static+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   	  if test "$cross_compiling" = yes; then :
+   lt_cv_dlopen_self_static=cross
+ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 10757 "configure"
++#line $LINENO "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+ #include <dlfcn.h>
+ #endif
+ 
+ #include <stdio.h>
+ 
+@@ -10796,26 +11935,36 @@ else
+ #        else
+ #          define LT_DLLAZY_OR_NOW	0
+ #        endif
+ #      endif
+ #    endif
+ #  endif
+ #endif
+ 
+-void fnord() { int i=42;}
++/* When -fvisbility=hidden is used, assume the code has been annotated
++   correspondingly for the symbols needed.  */
++#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
++int fnord () __attribute__((visibility("default")));
++#endif
++
++int fnord () { return 42; }
+ int main ()
+ {
+   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+   int status = $lt_dlunknown;
+ 
+   if (self)
+     {
+       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
++      else
++        {
++	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
++          else puts (dlerror ());
++	}
+       /* dlclose (self); */
+     }
+   else
+     puts (dlerror ());
+ 
+   return status;
+ }
+ _LT_EOF
+@@ -10974,26 +12123,1043 @@ CC="$lt_save_CC"
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
++
++
+         ac_config_commands="$ac_config_commands libtool"
+ 
+ 
+ 
+ 
+ # Only expand once:
+ 
+ 
+ 
+ 
++# Test for 64-bit build.
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
++$as_echo_n "checking size of size_t... " >&6; }
++if ${ac_cv_sizeof_size_t+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"; then :
++
++else
++  if test "$ac_cv_type_size_t" = yes; then
++     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error 77 "cannot compute sizeof (size_t)
++See \`config.log' for more details" "$LINENO" 5; }
++   else
++     ac_cv_sizeof_size_t=0
++   fi
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
++$as_echo "$ac_cv_sizeof_size_t" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
++_ACEOF
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5
++$as_echo_n "checking for C compiler vendor... " >&6; }
++if ${ax_cv_c_compiler_vendor+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  # note: don't check for gcc first since some other compilers define __GNUC__
++  vendors="intel:     __ICC,__ECC,__INTEL_COMPILER
++           ibm:       __xlc__,__xlC__,__IBMC__,__IBMCPP__
++           pathscale: __PATHCC__,__PATHSCALE__
++           clang:     __clang__
++           gnu:       __GNUC__
++           sun:       __SUNPRO_C,__SUNPRO_CC
++           hp:        __HP_cc,__HP_aCC
++           dec:       __DECC,__DECCXX,__DECC_VER,__DECCXX_VER
++           borland:   __BORLANDC__,__TURBOC__
++           comeau:    __COMO__
++           cray:      _CRAYC
++           kai:       __KCC
++           lcc:       __LCC__
++           sgi:       __sgi,sgi
++           microsoft: _MSC_VER
++           metrowerks: __MWERKS__
++           watcom:    __WATCOMC__
++           portland:  __PGI
++           unknown:   UNKNOWN"
++  for ventest in $vendors; do
++    case $ventest in
++      *:) vendor=$ventest; continue ;;
++      *)  vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;;
++    esac
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++      #if !($vencpp)
++        thisisanerror;
++      #endif
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  break
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++  ax_cv_c_compiler_vendor=`echo $vendor | cut -d: -f1`
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5
++$as_echo "$ax_cv_c_compiler_vendor" >&6; }
++
++
++
++
++
++
++# Check whether --enable-portable-binary was given.
++if test "${enable_portable_binary+set}" = set; then :
++  enableval=$enable_portable_binary; acx_maxopt_portable=$enableval
++else
++  acx_maxopt_portable=no
++fi
++
++
++# Try to determine "good" native compiler flags if none specified via CFLAGS
++if test "$ac_test_CFLAGS" != "set"; then
++  CFLAGS=""
++  case $ax_cv_c_compiler_vendor in
++    dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
++	 if test "x$acx_maxopt_portable" = xno; then
++           CFLAGS="$CFLAGS -arch host"
++         fi;;
++
++    sun) CFLAGS="-native -fast -xO5 -dalign"
++	 if test "x$acx_maxopt_portable" = xyes; then
++	   CFLAGS="$CFLAGS -xarch=generic"
++         fi;;
++
++    hp)  CFLAGS="+Oall +Optrs_ansi +DSnative"
++	 if test "x$acx_maxopt_portable" = xyes; then
++	   CFLAGS="$CFLAGS +DAportable"
++	 fi;;
++
++    ibm) if test "x$acx_maxopt_portable" = xno; then
++           xlc_opt="-qarch=auto -qtune=auto"
++	 else
++           xlc_opt="-qtune=auto"
++	 fi
++         as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$xlc_opt" | $as_tr_sh`
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5
++$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; }
++if eval \${$as_CACHEVAR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  ax_check_save_flags=$CFLAGS
++  CFLAGS="$CFLAGS  $xlc_opt"
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  eval "$as_CACHEVAR=yes"
++else
++  eval "$as_CACHEVAR=no"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  CFLAGS=$ax_check_save_flags
++fi
++eval ac_res=\$$as_CACHEVAR
++	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
++  CFLAGS="-O3 -qansialias -w $xlc_opt"
++else
++  CFLAGS="-O3 -qansialias -w"
++                echo "******************************************************"
++                echo "*  You seem to have the IBM  C compiler.  It is      *"
++                echo "*  recommended for best performance that you use:    *"
++                echo "*                                                    *"
++                echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
++                echo "*                      ^^^        ^^^                *"
++                echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
++                echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
++                echo "*  and re-run configure.)  For more info, man cc.    *"
++                echo "******************************************************"
++fi
++
++         ;;
++
++    intel) CFLAGS="-O3 -ansi_alias"
++	if test "x$acx_maxopt_portable" = xno; then
++	  icc_archflag=unknown
++	  icc_flags=""
++	  case $host_cpu in
++	    i686*|x86_64*)
++              # icc accepts gcc assembly syntax, so these should work:
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
++$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
++if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test "$cross_compiling" = yes; then :
++  ax_cv_gcc_x86_cpuid_0=unknown
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <stdio.h>
++int
++main ()
++{
++
++     int op = 0, eax, ebx, ecx, edx;
++     FILE *f;
++      __asm__("cpuid"
++        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++        : "a" (op));
++     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++     fclose(f);
++     return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
++else
++  ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
++$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
++$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
++if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test "$cross_compiling" = yes; then :
++  ax_cv_gcc_x86_cpuid_1=unknown
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <stdio.h>
++int
++main ()
++{
++
++     int op = 1, eax, ebx, ecx, edx;
++     FILE *f;
++      __asm__("cpuid"
++        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++        : "a" (op));
++     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++     fclose(f);
++     return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
++else
++  ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
++$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++	      case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
++                *:756e6547:*:*) # Intel
++                  case $ax_cv_gcc_x86_cpuid_1 in
++                    *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";;
++                    *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";;
++                    *f??:*:*:*) icc_flags="-xN -xW -xK";;
++                  esac ;;
++              esac ;;
++          esac
++          if test "x$icc_flags" != x; then
++            for flag in $icc_flags; do
++              as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh`
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
++$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
++if eval \${$as_CACHEVAR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  ax_check_save_flags=$CFLAGS
++  CFLAGS="$CFLAGS  $flag"
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  eval "$as_CACHEVAR=yes"
++else
++  eval "$as_CACHEVAR=no"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  CFLAGS=$ax_check_save_flags
++fi
++eval ac_res=\$$as_CACHEVAR
++	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
++  icc_archflag=$flag; break
++else
++  :
++fi
++
++            done
++          fi
++          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5
++$as_echo_n "checking for icc architecture flag... " >&6; }
++	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5
++$as_echo "$icc_archflag" >&6; }
++          if test "x$icc_archflag" != xunknown; then
++            CFLAGS="$CFLAGS $icc_archflag"
++          fi
++        fi
++	;;
++
++    gnu)
++     # default optimization flags for gcc on all systems
++     CFLAGS="-O3 -fomit-frame-pointer"
++
++     # -malign-double for x86 systems
++     # 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
++$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
++if ${ax_cv_check_cflags___fstrict_aliasing+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  ax_check_save_flags=$CFLAGS
++  CFLAGS="$CFLAGS  -fstrict-aliasing"
++  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___fstrict_aliasing=yes
++else
++  ax_cv_check_cflags___fstrict_aliasing=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___fstrict_aliasing" >&5
++$as_echo "$ax_cv_check_cflags___fstrict_aliasing" >&6; }
++if test x"$ax_cv_check_cflags___fstrict_aliasing" = xyes; then :
++  CFLAGS="$CFLAGS -fstrict-aliasing"
++else
++  :
++fi
++
++
++     # note that we enable "unsafe" fp optimization with other compilers, too
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
++$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
++if ${ax_cv_check_cflags___ffast_math+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  ax_check_save_flags=$CFLAGS
++  CFLAGS="$CFLAGS  -ffast-math"
++  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___ffast_math=yes
++else
++  ax_cv_check_cflags___ffast_math=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___ffast_math" >&5
++$as_echo "$ax_cv_check_cflags___ffast_math" >&6; }
++if test x"$ax_cv_check_cflags___ffast_math" = xyes; then :
++  CFLAGS="$CFLAGS -ffast-math"
++else
++  :
++fi
++
++
++
++
++
++
++# Check whether --with-gcc-arch was given.
++if test "${with_gcc_arch+set}" = set; then :
++  withval=$with_gcc_arch; ax_gcc_arch=$withval
++else
++  ax_gcc_arch=yes
++fi
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
++$as_echo_n "checking for gcc architecture flag... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
++$as_echo "" >&6; }
++if ${ax_cv_gcc_archflag+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++ax_cv_gcc_archflag="unknown"
++
++if test "$GCC" = yes; then
++
++if test "x$ax_gcc_arch" = xyes; then
++ax_gcc_arch=""
++if test "$cross_compiling" = no; then
++case $host_cpu in
++  i[3456]86*|x86_64*) # use cpuid codes
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
++$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
++if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test "$cross_compiling" = yes; then :
++  ax_cv_gcc_x86_cpuid_0=unknown
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <stdio.h>
++int
++main ()
++{
++
++     int op = 0, eax, ebx, ecx, edx;
++     FILE *f;
++      __asm__("cpuid"
++        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++        : "a" (op));
++     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++     fclose(f);
++     return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
++else
++  ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
++$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
++$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
++if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test "$cross_compiling" = yes; then :
++  ax_cv_gcc_x86_cpuid_1=unknown
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <stdio.h>
++int
++main ()
++{
++
++     int op = 1, eax, ebx, ecx, edx;
++     FILE *f;
++      __asm__("cpuid"
++        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++        : "a" (op));
++     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++     fclose(f);
++     return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
++else
++  ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
++$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++     case $ax_cv_gcc_x86_cpuid_0 in
++       *:756e6547:*:*) # Intel
++          case $ax_cv_gcc_x86_cpuid_1 in
++	    *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
++	    *5??:*:*:*) ax_gcc_arch=pentium ;;
++	    *0?6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
++	    *0?6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
++	    *0?6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
++	    *0?6[9de]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
++	    *0?6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
++	    *0?6f?:*:*:*|*1?66?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;;
++	    *1?6[7d]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;;
++	    *1?6[aef]?:*:*:*|*2?6[5cef]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;;
++	    *1?6c?:*:*:*|*[23]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;;
++	    *2?6[ad]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;;
++	    *0?6??:*:*:*) ax_gcc_arch=pentiumpro ;;
++	    *6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;;
++	    ?000?f3[347]:*:*:*|?000?f41347:*:*:*|?000?f6?:*:*:*)
++		case $host_cpu in
++	          x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
++	          *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
++	        esac ;;
++	    ?000?f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";;
++          esac ;;
++       *:68747541:*:*) # AMD
++          case $ax_cv_gcc_x86_cpuid_1 in
++	    *5[67]?:*:*:*) ax_gcc_arch=k6 ;;
++	    *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
++	    *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
++	    *60?:*:*:*) ax_gcc_arch=k7 ;;
++	    *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;;
++	    *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
++	    *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
++	    *6[68a]?:*:*:*)
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5
++$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; }
++if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test "$cross_compiling" = yes; then :
++  ax_cv_gcc_x86_cpuid_0x80000006=unknown
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <stdio.h>
++int
++main ()
++{
++
++     int op = 0x80000006, eax, ebx, ecx, edx;
++     FILE *f;
++      __asm__("cpuid"
++        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++        : "a" (op));
++     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++     fclose(f);
++     return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid
++else
++  ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5
++$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; }
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++ # L2 cache size
++	       case $ax_cv_gcc_x86_cpuid_0x80000006 in
++                 *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256
++			ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
++                 *) ax_gcc_arch="athlon-4 athlon k7" ;;
++	       esac ;;
++	    ?00??f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
++	    ?00??f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
++	    ?00??f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
++	    ?00??f??:*:*:*) ax_gcc_arch="k8" ;;
++	    ?05??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;;
++	    ?06??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;;
++	    *f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;;
++          esac ;;
++	*:746e6543:*:*) # IDT
++	   case $ax_cv_gcc_x86_cpuid_1 in
++	     *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
++	     *58?:*:*:*) ax_gcc_arch=winchip2 ;;
++	     *6[78]?:*:*:*) ax_gcc_arch=c3 ;;
++	     *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
++	   esac ;;
++     esac
++     if test x"$ax_gcc_arch" = x; then # fallback
++	case $host_cpu in
++	  i586*) ax_gcc_arch=pentium ;;
++	  i686*) ax_gcc_arch=pentiumpro ;;
++        esac
++     fi
++     ;;
++
++  sparc*)
++     # Extract the first word of "prtdiag", so it can be a program name with args.
++set dummy prtdiag; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_path_PRTDIAG+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  case $PRTDIAG in
++  [\\/]* | ?:[\\/]*)
++  ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path.
++  ;;
++  *)
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/"
++for as_dir in $as_dummy
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++  test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag"
++  ;;
++esac
++fi
++PRTDIAG=$ac_cv_path_PRTDIAG
++if test -n "$PRTDIAG"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5
++$as_echo "$PRTDIAG" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++     cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
++     cputype=`echo "$cputype" | tr -d ' -' | sed 's/SPARCIIi/SPARCII/' | tr $as_cr_LETTERS $as_cr_letters`
++     case $cputype in
++         *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
++         *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
++         *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
++         *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;;
++         *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;;
++         *cypress*) ax_gcc_arch=cypress ;;
++     esac ;;
++
++  alphaev5) ax_gcc_arch=ev5 ;;
++  alphaev56) ax_gcc_arch=ev56 ;;
++  alphapca56) ax_gcc_arch="pca56 ev56" ;;
++  alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
++  alphaev6) ax_gcc_arch=ev6 ;;
++  alphaev67) ax_gcc_arch=ev67 ;;
++  alphaev68) ax_gcc_arch="ev68 ev67" ;;
++  alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
++  alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
++  alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
++
++  powerpc*)
++     cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
++     cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
++     case $cputype in
++       *750*) ax_gcc_arch="750 G3" ;;
++       *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;;
++       *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;;
++       *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;;
++       *970*) ax_gcc_arch="970 G5 power4";;
++       *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
++       *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
++       603ev|8240) ax_gcc_arch="$cputype 603e 603";;
++       *) ax_gcc_arch=$cputype ;;
++     esac
++     ax_gcc_arch="$ax_gcc_arch powerpc"
++     ;;
++esac
++fi # not cross-compiling
++fi # guess arch
++
++if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
++for arch in $ax_gcc_arch; do
++  if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
++    flags="-mtune=$arch"
++    # -mcpu=$arch and m$arch generate nonportable code on every arch except
++    # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
++    case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac
++  else
++    flags="-march=$arch -mcpu=$arch -m$arch"
++  fi
++  for flag in $flags; do
++    as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh`
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
++$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
++if eval \${$as_CACHEVAR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  ax_check_save_flags=$CFLAGS
++  CFLAGS="$CFLAGS  $flag"
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  eval "$as_CACHEVAR=yes"
++else
++  eval "$as_CACHEVAR=no"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  CFLAGS=$ax_check_save_flags
++fi
++eval ac_res=\$$as_CACHEVAR
++	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
++  ax_cv_gcc_archflag=$flag; break
++else
++  :
++fi
++
++  done
++  test "x$ax_cv_gcc_archflag" = xunknown || break
++done
++fi
++
++fi # $GCC=yes
++
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
++$as_echo_n "checking for gcc architecture flag... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5
++$as_echo "$ax_cv_gcc_archflag" >&6; }
++if test "x$ax_cv_gcc_archflag" = xunknown; then
++  :
++else
++  CFLAGS="$CFLAGS $ax_cv_gcc_archflag"
++fi
++
++     ;;
++  esac
++
++  if test -z "$CFLAGS"; then
++	echo ""
++	echo "********************************************************"
++        echo "* WARNING: Don't know the best CFLAGS for this system  *"
++        echo "* Use ./configure CFLAGS=... to specify your own flags *"
++	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
++	echo "********************************************************"
++	echo ""
++        CFLAGS="-O3"
++  fi
++
++  as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$CFLAGS" | $as_tr_sh`
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5
++$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; }
++if eval \${$as_CACHEVAR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  ax_check_save_flags=$CFLAGS
++  CFLAGS="$CFLAGS  $CFLAGS"
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  eval "$as_CACHEVAR=yes"
++else
++  eval "$as_CACHEVAR=no"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  CFLAGS=$ax_check_save_flags
++fi
++eval ac_res=\$$as_CACHEVAR
++	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
++  :
++else
++
++	echo ""
++        echo "********************************************************"
++        echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
++        echo "* your compiler.                                       *"
++        echo "* Use ./configure CFLAGS=... to specify your own flags *"
++        echo "********************************************************"
++        echo ""
++        CFLAGS=""
++
++fi
++
++
++fi
++
++# The AX_CFLAGS_WARN_ALL macro doesn't currently work for sunpro
++# compiler.
++if test "$ax_cv_c_compiler_vendor" != "sun"; then
++  if ${CFLAGS+:} false; then :
++  case " $CFLAGS " in
++    *"  "*)
++      { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains "; } >&5
++  (: CFLAGS already contains ) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }
++      ;;
++    *)
++      { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \""; } >&5
++  (: CFLAGS="$CFLAGS ") 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }
++      CFLAGS="$CFLAGS "
++      ;;
++   esac
++else
++  CFLAGS=""
++fi
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS for maximum warnings" >&5
++$as_echo_n "checking CFLAGS for maximum warnings... " >&6; }
++if ${ac_cv_cflags_warn_all+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_cv_cflags_warn_all="no, unknown"
++ac_save_CFLAGS="$CFLAGS"
++for ac_arg in "-warn all  % -warn all"      "-pedantic  % -Wall"          "-xstrconst % -v"             "-std1      % -verbose -w0 -warnprotos"    "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd"    "-ansi -ansiE % -fullwarn"    "+ESlit     % +w1"            "-Xc        % -pvctl,fullmsg"    "-h conform % -h msglevel 2"    #
++do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++CFLAGS="$ac_save_CFLAGS"
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5
++$as_echo "$ac_cv_cflags_warn_all" >&6; }
++
++case ".$ac_cv_cflags_warn_all" in
++     .ok|.ok,*)  ;;
++   .|.no|.no,*)  ;;
++   *) if ${CFLAGS+:} false; then :
++  case " $CFLAGS " in
++    *" $ac_cv_cflags_warn_all "*)
++      { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$ac_cv_cflags_warn_all"; } >&5
++  (: CFLAGS already contains $ac_cv_cflags_warn_all) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }
++      ;;
++    *)
++      { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \$ac_cv_cflags_warn_all\""; } >&5
++  (: CFLAGS="$CFLAGS $ac_cv_cflags_warn_all") 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }
++      CFLAGS="$CFLAGS $ac_cv_cflags_warn_all"
++      ;;
++   esac
++else
++  CFLAGS="$ac_cv_cflags_warn_all"
++fi
++ ;;
++esac
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++fi
++
++if test "x$GCC" = "xyes"; then
++  CFLAGS="$CFLAGS -fexceptions"
++  touch local.exp
++else
++  cat > local.exp <<EOF
++set CC_FOR_TARGET "$CC"
++EOF
++fi
++
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+     # Check whether --enable-maintainer-mode was given.
+ if test "${enable_maintainer_mode+set}" = set; then :
+   enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+ else
+   USE_MAINTAINER_MODE=no
+@@ -11011,61 +13177,61 @@ fi
+ 
+   MAINT=$MAINTAINER_MODE_TRUE
+ 
+ 
+ 
+ for ac_header in sys/mman.h
+ do :
+   ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+-if test "x$ac_cv_header_sys_mman_h" = x""yes; then :
++if test "x$ac_cv_header_sys_mman_h" = xyes; then :
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_SYS_MMAN_H 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ for ac_func in mmap
+ do :
+   ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+-if test "x$ac_cv_func_mmap" = x""yes; then :
++if test "x$ac_cv_func_mmap" = xyes; then :
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_MMAP 1
+ _ACEOF
+ 
+ fi
+ done
+ 
+ 
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+-if test "x$ac_cv_header_sys_mman_h" = x""yes; then :
++if test "x$ac_cv_header_sys_mman_h" = xyes; then :
+   libffi_header_sys_mman_h=yes
+ else
+   libffi_header_sys_mman_h=no
+ fi
+ 
+ 
+ ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+-if test "x$ac_cv_func_mmap" = x""yes; then :
++if test "x$ac_cv_func_mmap" = xyes; then :
+   libffi_func_mmap=yes
+ else
+   libffi_func_mmap=no
+ fi
+ 
+ if test "$libffi_header_sys_mman_h" != yes \
+  || test "$libffi_func_mmap" != yes; then
+    ac_cv_func_mmap_file=no
+    ac_cv_func_mmap_dev_zero=no
+    ac_cv_func_mmap_anon=no
+ else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5
+ $as_echo_n "checking whether read-only mmap of a plain file works... " >&6; }
+-if test "${ac_cv_func_mmap_file+set}" = set; then :
++if ${ac_cv_func_mmap_file+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   # Add a system to this blacklist if
+    # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
+    # memory area containing the same data that you'd get if you applied
+    # read() to the same fd.  The only system known to have a problem here
+    # is VMS, where text files have record structure.
+    case "$host_os" in
+@@ -11074,17 +13240,17 @@ else
+      *)
+ 	ac_cv_func_mmap_file=yes;;
+    esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5
+ $as_echo "$ac_cv_func_mmap_file" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5
+ $as_echo_n "checking whether mmap from /dev/zero works... " >&6; }
+-if test "${ac_cv_func_mmap_dev_zero+set}" = set; then :
++if ${ac_cv_func_mmap_dev_zero+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   # Add a system to this blacklist if it has mmap() but /dev/zero
+    # does not exist, or if mmapping /dev/zero does not give anonymous
+    # zeroed pages with both the following properties:
+    # 1. If you map N consecutive pages in with one call, and then
+    #    unmap any subset of those pages, the pages that were not
+    #    explicitly unmapped remain accessible.
+@@ -11100,17 +13266,17 @@ else
+    esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5
+ $as_echo "$ac_cv_func_mmap_dev_zero" >&6; }
+ 
+    # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5
+ $as_echo_n "checking for MAP_ANON(YMOUS)... " >&6; }
+-if test "${ac_cv_decl_map_anon+set}" = set; then :
++if ${ac_cv_decl_map_anon+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <sys/types.h>
+ #include <sys/mman.h>
+ #include <unistd.h>
+ 
+@@ -11136,17 +13302,17 @@ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5
+ $as_echo "$ac_cv_decl_map_anon" >&6; }
+ 
+    if test $ac_cv_decl_map_anon = no; then
+      ac_cv_func_mmap_anon=no
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5
+ $as_echo_n "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; }
+-if test "${ac_cv_func_mmap_anon+set}" = set; then :
++if ${ac_cv_func_mmap_anon+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   # Add a system to this blacklist if it has mmap() and MAP_ANON or
+    # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
+    # doesn't give anonymous zeroed pages with the same properties listed
+    # above for use of /dev/zero.
+    # Systems known to be in this category are Windows, VMS, and SCO Unix.
+    case "$host_os" in
+@@ -11183,114 +13349,197 @@ fi
+   TESTSUBDIR_FALSE='#'
+ else
+   TESTSUBDIR_TRUE='#'
+   TESTSUBDIR_FALSE=
+ fi
+ 
+ 
+ TARGETDIR="unknown"
++HAVE_LONG_DOUBLE_VARIANT=0
+ case "$host" in
++  aarch64*-*-*)
++	TARGET=AARCH64; TARGETDIR=aarch64
++	;;
++
+   alpha*-*-*)
+ 	TARGET=ALPHA; TARGETDIR=alpha;
+ 	# Support 128-bit long double, changeable via command-line switch.
+ 	HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)'
+ 	;;
+ 
++  arc*-*-*)
++	TARGET=ARC; TARGETDIR=arc
++	;;
++
+   arm*-*-*)
+ 	TARGET=ARM; TARGETDIR=arm
+ 	;;
+ 
+   amd64-*-freebsd* | amd64-*-openbsd*)
+ 	TARGET=X86_64; TARGETDIR=x86
+   	;;
+ 
+   amd64-*-freebsd*)
+ 	TARGET=X86_64; TARGETDIR=x86
++  	;;
++
++  amd64-*-freebsd*)
++	TARGET=X86_64; TARGETDIR=x86
+ 	;;
+ 
+   avr32*-*-*)
+ 	TARGET=AVR32; TARGETDIR=avr32
+ 	;;
+ 
++  bfin*)
++  	TARGET=BFIN; TARGETDIR=bfin
++  	;;
++
+   cris-*-*)
+ 	TARGET=LIBFFI_CRIS; TARGETDIR=cris
+ 	;;
+ 
+   frv-*-*)
+ 	TARGET=FRV; TARGETDIR=frv
+ 	;;
+ 
+-  hppa*-*-linux* | hppa*-*-openbsd* | parisc*-*-linux*)
++  hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*)
+ 	TARGET=PA_LINUX; TARGETDIR=pa
+ 	;;
+   hppa*64-*-hpux*)
+ 	TARGET=PA64_HPUX; TARGETDIR=pa
+ 	;;
+   hppa*-*-hpux*)
+ 	TARGET=PA_HPUX; TARGETDIR=pa
+ 	;;
+ 
+   i?86-*-freebsd* | i?86-*-openbsd*)
+ 	TARGET=X86_FREEBSD; TARGETDIR=x86
+ 	;;
+-  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
++  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*)
+ 	TARGET=X86_WIN32; TARGETDIR=x86
+-	# All mingw/cygwin/win32 builds require this for sharedlib
+-	AM_LTLDFLAGS="-no-undefined"
++	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
++	# We must also check with_cross_host to decide if this is a native
++	# or cross-build and select where to install dlls appropriately.
++	if test -n "$with_cross_host" &&
++	   test x"$with_cross_host" != x"no"; then
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
++	else
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
++	fi
+ 	;;
+   i?86-*-darwin*)
+ 	TARGET=X86_DARWIN; TARGETDIR=x86
+ 	;;
+   i?86-*-solaris2.1[0-9]*)
+-	TARGET=X86_64; TARGETDIR=x86
+-	;;
+-  i?86-*-*)
+-	TARGET=X86; TARGETDIR=x86
++	TARGETDIR=x86
++	if test $ac_cv_sizeof_size_t = 4; then
++	  TARGET=X86;
++	else
++	  TARGET=X86_64;
++	fi
++	;;
++
++  x86_64-*-darwin*)
++	TARGET=X86_DARWIN; TARGETDIR=x86
++	;;
++
++  x86_64-*-cygwin* | x86_64-*-mingw*)
++	TARGET=X86_WIN64; TARGETDIR=x86
++	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
++	# We must also check with_cross_host to decide if this is a native
++	# or cross-build and select where to install dlls appropriately.
++	if test -n "$with_cross_host" &&
++	   test x"$with_cross_host" != x"no"; then
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
++	else
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
++	fi
++	;;
++
++  i?86-*-* | x86_64-*-*)
++	TARGETDIR=x86
++	if test $ac_cv_sizeof_size_t = 4; then
++	  case "$host" in
++	    *-gnux32)
++	      TARGET=X86_64
++	      ;;
++	    *)
++	      TARGET=X86
++	      ;;
++          esac
++	else
++	  TARGET=X86_64;
++	fi
+ 	;;
+ 
+   ia64*-*-*)
+ 	TARGET=IA64; TARGETDIR=ia64
+ 	;;
+ 
+   m32r*-*-*)
+ 	TARGET=M32R; TARGETDIR=m32r
+ 	;;
+ 
+   m68k-*-*)
+ 	TARGET=M68K; TARGETDIR=m68k
+ 	;;
+ 
+-  mips-sgi-irix5.* | mips-sgi-irix6.*)
++  m88k-*-*)
++	TARGET=M88K; TARGETDIR=m88k
++	;;
++
++  microblaze*-*-*)
++	TARGET=MICROBLAZE; TARGETDIR=microblaze
++	;;
++
++  moxie-*-*)
++	TARGET=MOXIE; TARGETDIR=moxie
++	;;
++
++  metag-*-*)
++	TARGET=METAG; TARGETDIR=metag
++	;;
++
++  mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*)
+ 	TARGET=MIPS; TARGETDIR=mips
+ 	;;
+   mips*-*linux* | mips*-*-openbsd*)
+ 	# Support 128-bit long double for NewABI.
+ 	HAVE_LONG_DOUBLE='defined(__mips64)'
+ 	TARGET=MIPS; TARGETDIR=mips
+ 	;;
+ 
+-  moxie-*-*)
+-        TARGET=MOXIE; TARGETDIR=moxie
++  nios2*-linux*)
++	TARGET=NIOS2; TARGETDIR=nios2
+ 	;;
+ 
+   powerpc*-*-linux* | powerpc-*-sysv*)
+ 	TARGET=POWERPC; TARGETDIR=powerpc
++	HAVE_LONG_DOUBLE_VARIANT=1
++	;;
++  powerpc-*-amigaos*)
++	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+   powerpc-*-beos*)
+ 	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc64-*-darwin*)
+ 	TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
+ 	;;
+   powerpc-*-aix* | rs6000-*-aix*)
+ 	TARGET=POWERPC_AIX; TARGETDIR=powerpc
+ 	;;
+   powerpc-*-freebsd* | powerpc-*-openbsd*)
+ 	TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
++	HAVE_LONG_DOUBLE_VARIANT=1
++	;;
++  powerpc64-*-freebsd*)
++	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+   powerpc*-*-rtems*)
+ 	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+ 
+   s390-*-* | s390x-*-*)
+ 	TARGET=S390; TARGETDIR=s390
+ 	;;
+@@ -11301,44 +13550,53 @@ case "$host" in
+   sh64-*-* | sh5*-*-*)
+ 	TARGET=SH64; TARGETDIR=sh64
+ 	;;
+ 
+   sparc*-*-*)
+ 	TARGET=SPARC; TARGETDIR=sparc
+ 	;;
+ 
+-  x86_64-*-darwin*)
+-	TARGET=X86_DARWIN; TARGETDIR=x86
+-	;;
+-
+-  x86_64-*-cygwin* | x86_64-*-mingw*)
+-	TARGET=X86_WIN64; TARGETDIR=x86
+-	;;
+-
+-  x86_64-*-*)
+-	TARGET=X86_64; TARGETDIR=x86
+-	;;
++  tile*-*)
++        TARGET=TILE; TARGETDIR=tile
++        ;;
++
++  vax-*-*)
++	TARGET=VAX; TARGETDIR=vax
++	;;
++
++  xtensa*-*)
++	TARGET=XTENSA; TARGETDIR=xtensa
++	;;
++
+ esac
+ 
+ 
+ 
+ 
+ if test $TARGETDIR = unknown; then
+-  as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5
++  as_fn_error $? "\"libffi has not been ported to $host.\"" "$LINENO" 5
+ fi
+ 
+  if test x$TARGET = xMIPS; then
+   MIPS_TRUE=
+   MIPS_FALSE='#'
+ else
+   MIPS_TRUE='#'
+   MIPS_FALSE=
+ fi
+ 
++ if test x$TARGET = xBFIN; then
++  BFIN_TRUE=
++  BFIN_FALSE='#'
++else
++  BFIN_TRUE='#'
++  BFIN_FALSE=
++fi
++
+  if test x$TARGET = xSPARC; then
+   SPARC_TRUE=
+   SPARC_FALSE='#'
+ else
+   SPARC_TRUE='#'
+   SPARC_FALSE=
+ fi
+ 
+@@ -11377,16 +13635,32 @@ fi
+  if test x$TARGET = xX86_DARWIN; then
+   X86_DARWIN_TRUE=
+   X86_DARWIN_FALSE='#'
+ else
+   X86_DARWIN_TRUE='#'
+   X86_DARWIN_FALSE=
+ fi
+ 
++ if test x$TARGET = xX86_DARWIN && test $ac_cv_sizeof_size_t = 4; then
++  X86_DARWIN32_TRUE=
++  X86_DARWIN32_FALSE='#'
++else
++  X86_DARWIN32_TRUE='#'
++  X86_DARWIN32_FALSE=
++fi
++
++ if test x$TARGET = xX86_DARWIN && test $ac_cv_sizeof_size_t = 8; then
++  X86_DARWIN64_TRUE=
++  X86_DARWIN64_FALSE='#'
++else
++  X86_DARWIN64_TRUE='#'
++  X86_DARWIN64_FALSE=
++fi
++
+  if test x$TARGET = xALPHA; then
+   ALPHA_TRUE=
+   ALPHA_FALSE='#'
+ else
+   ALPHA_TRUE='#'
+   ALPHA_FALSE=
+ fi
+ 
+@@ -11409,24 +13683,56 @@ fi
+  if test x$TARGET = xM68K; then
+   M68K_TRUE=
+   M68K_FALSE='#'
+ else
+   M68K_TRUE='#'
+   M68K_FALSE=
+ fi
+ 
++ if test x$TARGET = xM88K; then
++  M88K_TRUE=
++  M88K_FALSE='#'
++else
++  M88K_TRUE='#'
++  M88K_FALSE=
++fi
++
++ if test x$TARGET = xMICROBLAZE; then
++  MICROBLAZE_TRUE=
++  MICROBLAZE_FALSE='#'
++else
++  MICROBLAZE_TRUE='#'
++  MICROBLAZE_FALSE=
++fi
++
++ if test x$TARGET = xMETAG; then
++  METAG_TRUE=
++  METAG_FALSE='#'
++else
++  METAG_TRUE='#'
++  METAG_FALSE=
++fi
++
+  if test x$TARGET = xMOXIE; then
+   MOXIE_TRUE=
+   MOXIE_FALSE='#'
+ else
+   MOXIE_TRUE='#'
+   MOXIE_FALSE=
+ fi
+ 
++ if test x$TARGET = xNIOS2; then
++  NIOS2_TRUE=
++  NIOS2_FALSE='#'
++else
++  NIOS2_TRUE='#'
++  NIOS2_FALSE=
++fi
++
+  if test x$TARGET = xPOWERPC; then
+   POWERPC_TRUE=
+   POWERPC_FALSE='#'
+ else
+   POWERPC_TRUE='#'
+   POWERPC_FALSE=
+ fi
+ 
+@@ -11449,16 +13755,32 @@ fi
+  if test x$TARGET = xPOWERPC_FREEBSD; then
+   POWERPC_FREEBSD_TRUE=
+   POWERPC_FREEBSD_FALSE='#'
+ else
+   POWERPC_FREEBSD_TRUE='#'
+   POWERPC_FREEBSD_FALSE=
+ fi
+ 
++ if test x$TARGET = xAARCH64; then
++  AARCH64_TRUE=
++  AARCH64_FALSE='#'
++else
++  AARCH64_TRUE='#'
++  AARCH64_FALSE=
++fi
++
++ if test x$TARGET = xARC; then
++  ARC_TRUE=
++  ARC_FALSE='#'
++else
++  ARC_TRUE='#'
++  ARC_FALSE=
++fi
++
+  if test x$TARGET = xARM; then
+   ARM_TRUE=
+   ARM_FALSE='#'
+ else
+   ARM_TRUE='#'
+   ARM_FALSE=
+ fi
+ 
+@@ -11537,20 +13859,44 @@ fi
+  if test x$TARGET = xPA64_HPUX; then
+   PA64_HPUX_TRUE=
+   PA64_HPUX_FALSE='#'
+ else
+   PA64_HPUX_TRUE='#'
+   PA64_HPUX_FALSE=
+ fi
+ 
++ if test x$TARGET = xTILE; then
++  TILE_TRUE=
++  TILE_FALSE='#'
++else
++  TILE_TRUE='#'
++  TILE_FALSE=
++fi
++
++ if test x$TARGET = xVAX; then
++  VAX_TRUE=
++  VAX_FALSE='#'
++else
++  VAX_TRUE='#'
++  VAX_FALSE=
++fi
++
++ if test x$TARGET = xXTENSA; then
++  XTENSA_TRUE=
++  XTENSA_FALSE='#'
++else
++  XTENSA_TRUE='#'
++  XTENSA_FALSE=
++fi
++
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+ $as_echo_n "checking for ANSI C header files... " >&6; }
+-if test "${ac_cv_header_stdc+set}" = set; then :
++if ${ac_cv_header_stdc+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #include <float.h>
+@@ -11653,29 +13999,40 @@ if test $ac_cv_header_stdc = yes; then
+ 
+ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
+ 
+ fi
+ 
+ for ac_func in memcpy
+ do :
+   ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy"
+-if test "x$ac_cv_func_memcpy" = x""yes; then :
++if test "x$ac_cv_func_memcpy" = xyes; then :
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_MEMCPY 1
+ _ACEOF
+ 
+ fi
+ done
+ 
++ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
++if test "x$ac_cv_type_size_t" = xyes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define size_t unsigned int
++_ACEOF
++
++fi
++
+ # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+ # for constant arguments.  Useless!
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+ $as_echo_n "checking for working alloca.h... " >&6; }
+-if test "${ac_cv_working_alloca_h+set}" = set; then :
++if ${ac_cv_working_alloca_h+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <alloca.h>
+ int
+ main ()
+ {
+@@ -11698,17 +14055,17 @@ fi
+ if test $ac_cv_working_alloca_h = yes; then
+ 
+ $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+ 
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+ $as_echo_n "checking for alloca... " >&6; }
+-if test "${ac_cv_func_alloca_works+set}" = set; then :
++if ${ac_cv_func_alloca_works+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #ifdef __GNUC__
+ # define alloca __builtin_alloca
+ #else
+ # ifdef _MSC_VER
+@@ -11717,17 +14074,17 @@ else
+ # else
+ #  ifdef HAVE_ALLOCA_H
+ #   include <alloca.h>
+ #  else
+ #   ifdef _AIX
+  #pragma alloca
+ #   else
+ #    ifndef alloca /* predefined by HP cc +Olibcalls */
+-char *alloca ();
++void *alloca (size_t);
+ #    endif
+ #   endif
+ #  endif
+ # endif
+ #endif
+ 
+ int
+ main ()
+@@ -11761,17 +14118,17 @@ else
+ 
+ ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+ 
+ $as_echo "#define C_ALLOCA 1" >>confdefs.h
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+ $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+-if test "${ac_cv_os_cray+set}" = set; then :
++if ${ac_cv_os_cray+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #if defined CRAY && ! defined CRAY2
+ webecray
+ #else
+ wenotbecray
+@@ -11788,58 +14145,54 @@ rm -f conftest*
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+ $as_echo "$ac_cv_os_cray" >&6; }
+ if test $ac_cv_os_cray = yes; then
+   for ac_func in _getb67 GETB67 getb67; do
+     as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+-eval as_val=\$$as_ac_var
+-   if test "x$as_val" = x""yes; then :
++if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define CRAY_STACKSEG_END $ac_func
+ _ACEOF
+ 
+     break
+ fi
+ 
+   done
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+ $as_echo_n "checking stack direction for C alloca... " >&6; }
+-if test "${ac_cv_c_stack_direction+set}" = set; then :
++if ${ac_cv_c_stack_direction+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test "$cross_compiling" = yes; then :
+   ac_cv_c_stack_direction=0
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ $ac_includes_default
+ int
+-find_stack_direction ()
+-{
+-  static char *addr = 0;
+-  auto char dummy;
+-  if (addr == 0)
+-    {
+-      addr = &dummy;
+-      return find_stack_direction ();
+-    }
+-  else
+-    return (&dummy > addr) ? 1 : -1;
+-}
+-
+-int
+-main ()
+-{
+-  return find_stack_direction () < 0;
++find_stack_direction (int *addr, int depth)
++{
++  int dir, dummy = 0;
++  if (! addr)
++    addr = &dummy;
++  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
++  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
++  return dir + dummy;
++}
++
++int
++main (int argc, char **argv)
++{
++  return find_stack_direction (0, argc + !argv + 20) < 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   ac_cv_c_stack_direction=1
+ else
+   ac_cv_c_stack_direction=-1
+ fi
+ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+@@ -11858,28 +14211,27 @@ fi
+ 
+ 
+ # The cast to long int works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
+ $as_echo_n "checking size of double... " >&6; }
+-if test "${ac_cv_sizeof_double+set}" = set; then :
++if ${ac_cv_sizeof_double+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"; then :
+ 
+ else
+   if test "$ac_cv_type_double" = yes; then
+      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ as_fn_set_status 77
+-as_fn_error "cannot compute sizeof (double)
+-See \`config.log' for more details." "$LINENO" 5; }; }
++as_fn_error 77 "cannot compute sizeof (double)
++See \`config.log' for more details" "$LINENO" 5; }
+    else
+      ac_cv_sizeof_double=0
+    fi
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
+ $as_echo "$ac_cv_sizeof_double" >&6; }
+@@ -11892,28 +14244,27 @@ cat >>confdefs.h <<_ACEOF
+ 
+ 
+ # The cast to long int works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5
+ $as_echo_n "checking size of long double... " >&6; }
+-if test "${ac_cv_sizeof_long_double+set}" = set; then :
++if ${ac_cv_sizeof_long_double+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double"        "$ac_includes_default"; then :
+ 
+ else
+   if test "$ac_cv_type_long_double" = yes; then
+      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ as_fn_set_status 77
+-as_fn_error "cannot compute sizeof (long double)
+-See \`config.log' for more details." "$LINENO" 5; }; }
++as_fn_error 77 "cannot compute sizeof (long double)
++See \`config.log' for more details" "$LINENO" 5; }
+    else
+      ac_cv_sizeof_long_double=0
+    fi
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5
+ $as_echo "$ac_cv_sizeof_long_double" >&6; }
+@@ -11924,30 +14275,38 @@ cat >>confdefs.h <<_ACEOF
+ #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+ _ACEOF
+ 
+ 
+ 
+ # Also AC_SUBST this variable for ffi.h.
+ if test -z "$HAVE_LONG_DOUBLE"; then
+   HAVE_LONG_DOUBLE=0
+-  if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
+-    if test $ac_cv_sizeof_long_double != 0; then
++  if test $ac_cv_sizeof_long_double != 0; then
++    if test $HAVE_LONG_DOUBLE_VARIANT != 0; then
++
++$as_echo "#define HAVE_LONG_DOUBLE_VARIANT 1" >>confdefs.h
++
+       HAVE_LONG_DOUBLE=1
++    else
++      if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
++        HAVE_LONG_DOUBLE=1
+ 
+ $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+ 
+-    fi
+-  fi
+-fi
++      fi
++    fi
++  fi
++fi
++
+ 
+ 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+ $as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+-if test "${ac_cv_c_bigendian+set}" = set; then :
++if ${ac_cv_c_bigendian+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_cv_c_bigendian=unknown
+     # See if we're dealing with a universal compiler.
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #ifndef __APPLE_CC__
+ 	       not a universal capable compiler
+@@ -12155,59 +14514,60 @@ fi
+    no)
+       ;; #(
+    universal)
+ 
+ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+ 
+      ;; #(
+    *)
+-     as_fn_error "unknown endianness
++     as_fn_error $? "unknown endianness
+  presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+  esac
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .cfi pseudo-op support" >&5
+ $as_echo_n "checking assembler .cfi pseudo-op support... " >&6; }
+-if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-
+-    libffi_cv_as_cfi_pseudo_op=unknown
++if ${gcc_cv_as_cfi_pseudo_op+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++    gcc_cv_as_cfi_pseudo_op=unknown
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ asm (".cfi_startproc\n\t.cfi_endproc");
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+-  libffi_cv_as_cfi_pseudo_op=yes
+-else
+-  libffi_cv_as_cfi_pseudo_op=no
++  gcc_cv_as_cfi_pseudo_op=yes
++else
++  gcc_cv_as_cfi_pseudo_op=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+ fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_cfi_pseudo_op" >&5
+-$as_echo "$libffi_cv_as_cfi_pseudo_op" >&6; }
+-if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_cfi_pseudo_op" >&5
++$as_echo "$gcc_cv_as_cfi_pseudo_op" >&6; }
++ if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then
+ 
+ $as_echo "#define HAVE_AS_CFI_PSEUDO_OP 1" >>confdefs.h
+ 
+-fi
++ fi
++
+ 
+ if test x$TARGET = xSPARC; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker support unaligned pc related relocs" >&5
+ $as_echo_n "checking assembler and linker support unaligned pc related relocs... " >&6; }
+-if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then :
++if ${libffi_cv_as_sparc_ua_pcrel+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+ 	save_CFLAGS="$CFLAGS"
+ 	save_LDFLAGS="$LDFLAGS"
+ 	CFLAGS="$CFLAGS -fpic"
+ 	LDFLAGS="$LDFLAGS -shared"
+ 	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -12236,29 +14596,29 @@ fi
+     if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
+ 
+ $as_echo "#define HAVE_AS_SPARC_UA_PCREL 1" >>confdefs.h
+ 
+     fi
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .register pseudo-op support" >&5
+ $as_echo_n "checking assembler .register pseudo-op support... " >&6; }
+-if test "${libffi_cv_as_register_pseudo_op+set}" = set; then :
++if ${libffi_cv_as_register_pseudo_op+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+        libffi_cv_as_register_pseudo_op=unknown
+        # Check if we have .register
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
++int
++main ()
++{
+ asm (".register %g2, #scratch");
+-int
+-main ()
+-{
+-
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+   libffi_cv_as_register_pseudo_op=yes
+ else
+   libffi_cv_as_register_pseudo_op=no
+@@ -12273,50 +14633,50 @@ fi
+ $as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h
+ 
+     fi
+ fi
+ 
+ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5
+ $as_echo_n "checking assembler supports pc related relocs... " >&6; }
+-if test "${libffi_cv_as_x86_pcrel+set}" = set; then :
++if ${libffi_cv_as_x86_pcrel+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+ 	libffi_cv_as_x86_pcrel=no
+ 	echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
+-	if $CC $CFLAGS -c conftest.s > /dev/null; then
++	if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
+ 	    libffi_cv_as_x86_pcrel=yes
+ 	fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5
+ $as_echo "$libffi_cv_as_x86_pcrel" >&6; }
+     if test "x$libffi_cv_as_x86_pcrel" = xyes; then
+ 
+ $as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h
+ 
+     fi
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .ascii pseudo-op support" >&5
+ $as_echo_n "checking assembler .ascii pseudo-op support... " >&6; }
+-if test "${libffi_cv_as_ascii_pseudo_op+set}" = set; then :
++if ${libffi_cv_as_ascii_pseudo_op+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+        libffi_cv_as_ascii_pseudo_op=unknown
+        # Check if we have .ascii
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-asm (".ascii \"string\"");
+-int
+-main ()
+-{
+-
++
++int
++main ()
++{
++asm (".ascii \\"string\\"");
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+   libffi_cv_as_ascii_pseudo_op=yes
+ else
+   libffi_cv_as_ascii_pseudo_op=no
+@@ -12329,29 +14689,29 @@ fi
+     if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then
+ 
+ $as_echo "#define HAVE_AS_ASCII_PSEUDO_OP 1" >>confdefs.h
+ 
+     fi
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .string pseudo-op support" >&5
+ $as_echo_n "checking assembler .string pseudo-op support... " >&6; }
+-if test "${libffi_cv_as_string_pseudo_op+set}" = set; then :
++if ${libffi_cv_as_string_pseudo_op+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+        libffi_cv_as_string_pseudo_op=unknown
+        # Check if we have .string
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-asm (".string \"string\"");
+-int
+-main ()
+-{
+-
++
++int
++main ()
++{
++asm (".string \\"string\\"");
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+   libffi_cv_as_string_pseudo_op=yes
+ else
+   libffi_cv_as_string_pseudo_op=no
+@@ -12363,20 +14723,30 @@ fi
+ $as_echo "$libffi_cv_as_string_pseudo_op" >&6; }
+     if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
+ 
+ $as_echo "#define HAVE_AS_STRING_PSEUDO_OP 1" >>confdefs.h
+ 
+     fi
+ fi
+ 
+-if test x$TARGET = xX86_WIN64; then
+-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5
++# On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC.
++# Check whether --enable-pax_emutramp was given.
++if test "${enable_pax_emutramp+set}" = set; then :
++  enableval=$enable_pax_emutramp; if test "$enable_pax_emutramp" = "yes"; then
++
++$as_echo "#define FFI_MMAP_EXEC_EMUTRAMP_PAX 1" >>confdefs.h
++
++  fi
++fi
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5
+ $as_echo_n "checking for _ prefix in compiled symbols... " >&6; }
+-if test "${lt_cv_sys_symbol_underscore+set}" = set; then :
++if ${lt_cv_sys_symbol_underscore+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   lt_cv_sys_symbol_underscore=no
+   cat > conftest.$ac_ext <<_LT_EOF
+ void nm_test_func(){}
+ int main(){nm_test_func;return 0;}
+ _LT_EOF
+   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+@@ -12411,36 +14781,50 @@ int main(){nm_test_func;return 0;}
+   rm -rf conftest*
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_symbol_underscore" >&5
+ $as_echo "$lt_cv_sys_symbol_underscore" >&6; }
+   sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+ 
+ 
+-    if test "x$sys_symbol_underscore" = xyes; then
++if test "x$sys_symbol_underscore" = xyes; then
+ 
+ $as_echo "#define SYMBOL_UNDERSCORE 1" >>confdefs.h
+ 
+-    fi
+-fi
+-
++fi
++
++FFI_EXEC_TRAMPOLINE_TABLE=0
+ case "$target" in
+-     # Darwin 10 (OSX 10.6) and beyond allocate non-executable pages
+-     *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
++     *arm*-apple-darwin*)
++       FFI_EXEC_TRAMPOLINE_TABLE=1
++
++$as_echo "#define FFI_EXEC_TRAMPOLINE_TABLE 1" >>confdefs.h
++
++     ;;
++     *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*)
+ 
+ $as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h
+ 
+      ;;
+ esac
++ if test x$FFI_EXEC_TRAMPOLINE_TABLE = x1; then
++  FFI_EXEC_TRAMPOLINE_TABLE_TRUE=
++  FFI_EXEC_TRAMPOLINE_TABLE_FALSE='#'
++else
++  FFI_EXEC_TRAMPOLINE_TABLE_TRUE='#'
++  FFI_EXEC_TRAMPOLINE_TABLE_FALSE=
++fi
++
++
+ 
+ if test x$TARGET = xX86_64; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking toolchain supports unwind section type" >&5
+ $as_echo_n "checking toolchain supports unwind section type... " >&6; }
+-if test "${libffi_cv_as_x86_64_unwind_section_type+set}" = set; then :
++if ${libffi_cv_as_x86_64_unwind_section_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+         cat  > conftest1.s << EOF
+ .text
+ .globl foo
+ foo:
+ jmp bar
+@@ -12466,77 +14850,80 @@ fi
+ $as_echo "$libffi_cv_as_x86_64_unwind_section_type" >&6; }
+     if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then
+ 
+ $as_echo "#define HAVE_AS_X86_64_UNWIND_SECTION_TYPE 1" >>confdefs.h
+ 
+     fi
+ fi
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5
++if test "x$GCC" = "xyes"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5
+ $as_echo_n "checking whether .eh_frame section should be read-only... " >&6; }
+-if test "${libffi_cv_ro_eh_frame+set}" = set; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-
+-	libffi_cv_ro_eh_frame=no
+-	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
+-	if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
+-	    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
+-		libffi_cv_ro_eh_frame=yes
+-	    elif grep '.section.*eh_frame.*#alloc' conftest.c \
+-		 | grep -v '#write' > /dev/null; then
+-		libffi_cv_ro_eh_frame=yes
+-	    fi
+-	fi
+-	rm -f conftest.*
++if ${libffi_cv_ro_eh_frame+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  	libffi_cv_ro_eh_frame=no
++  	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
++  	if $CC $CFLAGS -c -fpic -fexceptions -o conftest.o conftest.c > /dev/null 2>&1; then
++	    objdump -h conftest.o > conftest.dump 2>&1
++	    libffi_eh_frame_line=`grep -n eh_frame conftest.dump | cut -d: -f 1`
++	    libffi_test_line=`expr $libffi_eh_frame_line + 1`p
++	    sed -n $libffi_test_line conftest.dump > conftest.line
++  	    if grep READONLY conftest.line > /dev/null; then
++  		libffi_cv_ro_eh_frame=yes
++  	    fi
++  	fi
++  	rm -f conftest.*
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5
+ $as_echo "$libffi_cv_ro_eh_frame" >&6; }
+-if test "x$libffi_cv_ro_eh_frame" = xyes; then
++  if test "x$libffi_cv_ro_eh_frame" = xyes; then
+ 
+ $as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h
+ 
+ 
+ $as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h
+ 
+-else
++  else
+ 
+ $as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h
+ 
+-fi
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5
++  fi
++
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5
+ $as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; }
+-if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-
+-	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
+-	libffi_cv_hidden_visibility_attribute=no
+-	if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
++if ${libffi_cv_hidden_visibility_attribute+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++  	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1  ; }' > conftest.c
++  	libffi_cv_hidden_visibility_attribute=no
++  	if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
+   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; }; then
+-	    if grep '\.hidden.*foo' conftest.s >/dev/null; then
+-		libffi_cv_hidden_visibility_attribute=yes
+-	    fi
+-	fi
+-	rm -f conftest.*
++  	    if grep '\.hidden.*foo' conftest.s >/dev/null; then
++  		libffi_cv_hidden_visibility_attribute=yes
++  	    fi
++  	fi
++  	rm -f conftest.*
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5
+ $as_echo "$libffi_cv_hidden_visibility_attribute" >&6; }
+-if test $libffi_cv_hidden_visibility_attribute = yes; then
++  if test $libffi_cv_hidden_visibility_attribute = yes; then
+ 
+ $as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h
+ 
++  fi
+ fi
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+@@ -12563,16 +14950,24 @@ fi
+ if test "${enable_structs+set}" = set; then :
+   enableval=$enable_structs; if test "$enable_structs" = "no"; then
+ 
+ $as_echo "#define FFI_NO_STRUCTS 1" >>confdefs.h
+ 
+   fi
+ fi
+ 
++ if test "$enable_debug" = "yes"; then
++  FFI_DEBUG_TRUE=
++  FFI_DEBUG_FALSE='#'
++else
++  FFI_DEBUG_TRUE='#'
++  FFI_DEBUG_FALSE=
++fi
++
+ 
+ # Check whether --enable-raw-api was given.
+ if test "${enable_raw_api+set}" = set; then :
+   enableval=$enable_raw_api; if test "$enable_raw_api" = "no"; then
+ 
+ $as_echo "#define FFI_NO_RAW_API 1" >>confdefs.h
+ 
+   fi
+@@ -12584,37 +14979,37 @@ if test "${enable_purify_safety+set}" = 
+   enableval=$enable_purify_safety; if test "$enable_purify_safety" = "yes"; then
+ 
+ $as_echo "#define USING_PURIFY 1" >>confdefs.h
+ 
+   fi
+ fi
+ 
+ 
+-if test -n "$with_cross_host" &&
+-   test x"$with_cross_host" != x"no"; then
+-  toolexecdir='$(exec_prefix)/$(target_alias)'
+-  toolexeclibdir='$(toolexecdir)/lib'
+-else
+-  toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
++# These variables are only ever used when we cross-build to X86_WIN32.
++# And we only support this with GCC, so...
++if test "x$GCC" = "xyes"; then
++  if test -n "$with_cross_host" &&
++     test x"$with_cross_host" != x"no"; then
++    toolexecdir='$(exec_prefix)/$(target_alias)'
++    toolexeclibdir='$(toolexecdir)/lib'
++  else
++    toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
++    toolexeclibdir='$(libdir)'
++  fi
++  multi_os_directory=`$CC -print-multi-os-directory`
++  case $multi_os_directory in
++    .) ;; # Avoid trailing /.
++    ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
++  esac
++
++else
+   toolexeclibdir='$(libdir)'
+ fi
+-multi_os_directory=`$CC -print-multi-os-directory`
+-case $multi_os_directory in
+-  .) ;; # Avoid trailing /.
+-  *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+-esac
+-
+-
+-
+-if test "${multilib}" = "yes"; then
+-  multilib_arg="--enable-multilib"
+-else
+-  multilib_arg=
+-fi
++
+ 
+ ac_config_commands="$ac_config_commands include"
+ 
+ ac_config_commands="$ac_config_commands src"
+ 
+ 
+ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h"
+ 
+@@ -12681,192 +15076,268 @@ cat >confcache <<\_ACEOF
+      t clear
+      :clear
+      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+      t end
+      s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+      :end' >>confcache
+ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+   if test -w "$cache_file"; then
+-    test "x$cache_file" != "x/dev/null" &&
++    if test "x$cache_file" != "x/dev/null"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+ $as_echo "$as_me: updating cache $cache_file" >&6;}
+-    cat confcache >$cache_file
++      if test ! -f "$cache_file" || test -h "$cache_file"; then
++	cat confcache >"$cache_file"
++      else
++        case $cache_file in #(
++        */* | ?:*)
++	  mv -f confcache "$cache_file"$$ &&
++	  mv -f "$cache_file"$$ "$cache_file" ;; #(
++        *)
++	  mv -f confcache "$cache_file" ;;
++	esac
++      fi
++    fi
+   else
+     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+ $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+   fi
+ fi
+ rm -f confcache
+ 
+ test "x$prefix" = xNONE && prefix=$ac_default_prefix
+ # Let make expand exec_prefix.
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+ 
+ DEFS=-DHAVE_CONFIG_H
+ 
+ ac_libobjs=
+ ac_ltlibobjs=
++U=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+   # 1. Remove the extension, and $U if already installed.
+   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+   ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+   #    will be set to the directory where LIBOBJS objects are built.
+   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+   as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+ done
+ LIBOBJS=$ac_libobjs
+ 
+ LTLIBOBJS=$ac_ltlibobjs
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
++$as_echo_n "checking that generated files are newer than configure... " >&6; }
++   if test -n "$am_sleep_pid"; then
++     # Hide warnings about reused PIDs.
++     wait $am_sleep_pid 2>/dev/null
++   fi
++   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
++$as_echo "done" >&6; }
+  if test -n "$EXEEXT"; then
+   am__EXEEXT_TRUE=
+   am__EXEEXT_FALSE='#'
+ else
+   am__EXEEXT_TRUE='#'
+   am__EXEEXT_FALSE=
+ fi
+ 
+ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+-  as_fn_error "conditional \"AMDEP\" was never defined.
++  as_fn_error $? "conditional \"AMDEP\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
++  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+-  as_fn_error "conditional \"am__fastdepCCAS\" was never defined.
++  as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+-  as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
++  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then
+-  as_fn_error "conditional \"TESTSUBDIR\" was never defined.
++  as_fn_error $? "conditional \"TESTSUBDIR\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${MIPS_TRUE}" && test -z "${MIPS_FALSE}"; then
+-  as_fn_error "conditional \"MIPS\" was never defined.
++  as_fn_error $? "conditional \"MIPS\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
++if test -z "${BFIN_TRUE}" && test -z "${BFIN_FALSE}"; then
++  as_fn_error $? "conditional \"BFIN\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then
+-  as_fn_error "conditional \"SPARC\" was never defined.
++  as_fn_error $? "conditional \"SPARC\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then
+-  as_fn_error "conditional \"X86\" was never defined.
++  as_fn_error $? "conditional \"X86\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${X86_FREEBSD_TRUE}" && test -z "${X86_FREEBSD_FALSE}"; then
+-  as_fn_error "conditional \"X86_FREEBSD\" was never defined.
++  as_fn_error $? "conditional \"X86_FREEBSD\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then
+-  as_fn_error "conditional \"X86_WIN32\" was never defined.
++  as_fn_error $? "conditional \"X86_WIN32\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${X86_WIN64_TRUE}" && test -z "${X86_WIN64_FALSE}"; then
+-  as_fn_error "conditional \"X86_WIN64\" was never defined.
++  as_fn_error $? "conditional \"X86_WIN64\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${X86_DARWIN_TRUE}" && test -z "${X86_DARWIN_FALSE}"; then
+-  as_fn_error "conditional \"X86_DARWIN\" was never defined.
++  as_fn_error $? "conditional \"X86_DARWIN\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
++if test -z "${X86_DARWIN32_TRUE}" && test -z "${X86_DARWIN32_FALSE}"; then
++  as_fn_error $? "conditional \"X86_DARWIN32\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${X86_DARWIN64_TRUE}" && test -z "${X86_DARWIN64_FALSE}"; then
++  as_fn_error $? "conditional \"X86_DARWIN64\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then
+-  as_fn_error "conditional \"ALPHA\" was never defined.
++  as_fn_error $? "conditional \"ALPHA\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then
+-  as_fn_error "conditional \"IA64\" was never defined.
++  as_fn_error $? "conditional \"IA64\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then
+-  as_fn_error "conditional \"M32R\" was never defined.
++  as_fn_error $? "conditional \"M32R\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then
+-  as_fn_error "conditional \"M68K\" was never defined.
++  as_fn_error $? "conditional \"M68K\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
++if test -z "${M88K_TRUE}" && test -z "${M88K_FALSE}"; then
++  as_fn_error $? "conditional \"M88K\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${MICROBLAZE_TRUE}" && test -z "${MICROBLAZE_FALSE}"; then
++  as_fn_error $? "conditional \"MICROBLAZE\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${METAG_TRUE}" && test -z "${METAG_FALSE}"; then
++  as_fn_error $? "conditional \"METAG\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${MOXIE_TRUE}" && test -z "${MOXIE_FALSE}"; then
+-  as_fn_error "conditional \"MOXIE\" was never defined.
++  as_fn_error $? "conditional \"MOXIE\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
++if test -z "${NIOS2_TRUE}" && test -z "${NIOS2_FALSE}"; then
++  as_fn_error $? "conditional \"NIOS2\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then
+-  as_fn_error "conditional \"POWERPC\" was never defined.
++  as_fn_error $? "conditional \"POWERPC\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then
+-  as_fn_error "conditional \"POWERPC_AIX\" was never defined.
++  as_fn_error $? "conditional \"POWERPC_AIX\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then
+-  as_fn_error "conditional \"POWERPC_DARWIN\" was never defined.
++  as_fn_error $? "conditional \"POWERPC_DARWIN\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then
+-  as_fn_error "conditional \"POWERPC_FREEBSD\" was never defined.
++  as_fn_error $? "conditional \"POWERPC_FREEBSD\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
++if test -z "${AARCH64_TRUE}" && test -z "${AARCH64_FALSE}"; then
++  as_fn_error $? "conditional \"AARCH64\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${ARC_TRUE}" && test -z "${ARC_FALSE}"; then
++  as_fn_error $? "conditional \"ARC\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then
+-  as_fn_error "conditional \"ARM\" was never defined.
++  as_fn_error $? "conditional \"ARM\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${AVR32_TRUE}" && test -z "${AVR32_FALSE}"; then
+-  as_fn_error "conditional \"AVR32\" was never defined.
++  as_fn_error $? "conditional \"AVR32\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then
+-  as_fn_error "conditional \"LIBFFI_CRIS\" was never defined.
++  as_fn_error $? "conditional \"LIBFFI_CRIS\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then
+-  as_fn_error "conditional \"FRV\" was never defined.
++  as_fn_error $? "conditional \"FRV\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then
+-  as_fn_error "conditional \"S390\" was never defined.
++  as_fn_error $? "conditional \"S390\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then
+-  as_fn_error "conditional \"X86_64\" was never defined.
++  as_fn_error $? "conditional \"X86_64\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then
+-  as_fn_error "conditional \"SH\" was never defined.
++  as_fn_error $? "conditional \"SH\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then
+-  as_fn_error "conditional \"SH64\" was never defined.
++  as_fn_error $? "conditional \"SH64\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${PA_LINUX_TRUE}" && test -z "${PA_LINUX_FALSE}"; then
+-  as_fn_error "conditional \"PA_LINUX\" was never defined.
++  as_fn_error $? "conditional \"PA_LINUX\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${PA_HPUX_TRUE}" && test -z "${PA_HPUX_FALSE}"; then
+-  as_fn_error "conditional \"PA_HPUX\" was never defined.
++  as_fn_error $? "conditional \"PA_HPUX\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${PA64_HPUX_TRUE}" && test -z "${PA64_HPUX_FALSE}"; then
+-  as_fn_error "conditional \"PA64_HPUX\" was never defined.
++  as_fn_error $? "conditional \"PA64_HPUX\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+-
++if test -z "${TILE_TRUE}" && test -z "${TILE_FALSE}"; then
++  as_fn_error $? "conditional \"TILE\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${VAX_TRUE}" && test -z "${VAX_FALSE}"; then
++  as_fn_error $? "conditional \"VAX\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${XTENSA_TRUE}" && test -z "${XTENSA_FALSE}"; then
++  as_fn_error $? "conditional \"XTENSA\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++
++if test -z "${FFI_EXEC_TRAMPOLINE_TABLE_TRUE}" && test -z "${FFI_EXEC_TRAMPOLINE_TABLE_FALSE}"; then
++  as_fn_error $? "conditional \"FFI_EXEC_TRAMPOLINE_TABLE\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
+ if test -z "${FFI_DEBUG_TRUE}" && test -z "${FFI_DEBUG_FALSE}"; then
+-  as_fn_error "conditional \"FFI_DEBUG\" was never defined.
++  as_fn_error $? "conditional \"FFI_DEBUG\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+-
+-: ${CONFIG_STATUS=./config.status}
++if test -z "${FFI_DEBUG_TRUE}" && test -z "${FFI_DEBUG_FALSE}"; then
++  as_fn_error $? "conditional \"FFI_DEBUG\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++
++: "${CONFIG_STATUS=./config.status}"
+ ac_write_fail=0
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+ $as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+ as_write_fail=0
+ cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+ #! $SHELL
+@@ -12957,16 +15428,17 @@ fi
+ # IFS
+ # We need space, tab and new line, in precisely that order.  Quoting is
+ # there to prevent editors from complaining about space-tab.
+ # (If _AS_PATH_WALK were called with IFS unset, it would disable word
+ # splitting by setting IFS to empty value.)
+ IFS=" ""	$as_nl"
+ 
+ # Find who we are.  Look in the path if we contain no directory separator.
++as_myself=
+ case $0 in #((
+   *[\\/]* ) as_myself=$0 ;;
+   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+@@ -13002,29 +15474,29 @@ LC_ALL=C
+ export LC_ALL
+ LANGUAGE=C
+ export LANGUAGE
+ 
+ # CDPATH.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+ 
+ 
+-# as_fn_error ERROR [LINENO LOG_FD]
+-# ---------------------------------
++# as_fn_error STATUS ERROR [LINENO LOG_FD]
++# ----------------------------------------
+ # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+ # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+-# script with status $?, using 1 if that was 0.
++# script with STATUS, using 1 if that was 0.
+ as_fn_error ()
+ {
+-  as_status=$?; test $as_status -eq 0 && as_status=1
+-  if test "$3"; then
+-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+-  fi
+-  $as_echo "$as_me: error: $1" >&2
++  as_status=$1; test $as_status -eq 0 && as_status=1
++  if test "$4"; then
++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
++  fi
++  $as_echo "$as_me: error: $2" >&2
+   as_fn_exit $as_status
+ } # as_fn_error
+ 
+ 
+ # as_fn_set_status STATUS
+ # -----------------------
+ # Set $? to STATUS, without forking.
+ as_fn_set_status ()
+@@ -13152,26 +15624,26 @@ else
+   mkdir conf$$.dir 2>/dev/null
+ fi
+ if (echo >conf$$.file) 2>/dev/null; then
+   if ln -s conf$$.file conf$$ 2>/dev/null; then
+     as_ln_s='ln -s'
+     # ... but there are two gotchas:
+     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+-    # In both cases, we have to default to `cp -p'.
++    # In both cases, we have to default to `cp -pR'.
+     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+-      as_ln_s='cp -p'
++      as_ln_s='cp -pR'
+   elif ln conf$$.file conf$$ 2>/dev/null; then
+     as_ln_s=ln
+   else
+-    as_ln_s='cp -p'
+-  fi
+-else
+-  as_ln_s='cp -p'
++    as_ln_s='cp -pR'
++  fi
++else
++  as_ln_s='cp -pR'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+ rmdir conf$$.dir 2>/dev/null
+ 
+ 
+ # as_fn_mkdir_p
+ # -------------
+ # Create "$as_dir" as a directory, including parents if necessary.
+@@ -13210,49 +15682,37 @@ as_fn_mkdir_p ()
+ 	  /^X\(\/\).*/{
+ 	    s//\1/
+ 	    q
+ 	  }
+ 	  s/.*/./; q'`
+       test -d "$as_dir" && break
+     done
+     test -z "$as_dirs" || eval "mkdir $as_dirs"
+-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+ 
+ 
+ } # as_fn_mkdir_p
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p='mkdir -p "$as_dir"'
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+ fi
+ 
+-if test -x / >/dev/null 2>&1; then
+-  as_test_x='test -x'
+-else
+-  if ls -dL / >/dev/null 2>&1; then
+-    as_ls_L_option=L
+-  else
+-    as_ls_L_option=
+-  fi
+-  as_test_x='
+-    eval sh -c '\''
+-      if test -d "$1"; then
+-	test -d "$1/.";
+-      else
+-	case $1 in #(
+-	-*)set "./$1";;
+-	esac;
+-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+-	???[sx]*):;;*)false;;esac;fi
+-    '\'' sh
+-  '
+-fi
+-as_executable_p=$as_test_x
++
++# as_fn_executable_p FILE
++# -----------------------
++# Test if FILE is an executable regular file.
++as_fn_executable_p ()
++{
++  test -f "$1" && test -x "$1"
++} # as_fn_executable_p
++as_test_x='test -x'
++as_executable_p=as_fn_executable_p
+ 
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ 
+@@ -13263,18 +15723,18 @@ exec 6>&1
+ _ASEOF
+ test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ # Save the log message, to keep $0 and so on meaningful, and to
+ # report actual input values of CONFIG_FILES etc. instead of their
+ # values after options handling.
+ ac_log="
+-This file was extended by libffi $as_me 3.0.10rc0, which was
+-generated by GNU Autoconf 2.65.  Invocation command line was
++This file was extended by libffi $as_me 3.1-rc1, which was
++generated by GNU Autoconf 2.69.  Invocation command line was
+ 
+   CONFIG_FILES    = $CONFIG_FILES
+   CONFIG_HEADERS  = $CONFIG_HEADERS
+   CONFIG_LINKS    = $CONFIG_LINKS
+   CONFIG_COMMANDS = $CONFIG_COMMANDS
+   $ $0 $@
+ 
+ on `(hostname || uname -n) 2>/dev/null | sed 1q`
+@@ -13327,27 +15787,27 @@ Configuration headers:
+ $config_headers
+ 
+ Configuration links:
+ $config_links
+ 
+ Configuration commands:
+ $config_commands
+ 
+-Report bugs to <http://gcc.gnu.org/bugs.html>."
++Report bugs to <http://github.com/atgreen/libffi/issues>."
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ ac_cs_version="\\
+-libffi config.status 3.0.10rc0
+-configured by $0, generated by GNU Autoconf 2.65,
++libffi config.status 3.1-rc1
++configured by $0, generated by GNU Autoconf 2.69,
+   with options \\"\$ac_cs_config\\"
+ 
+-Copyright (C) 2009 Free Software Foundation, Inc.
++Copyright (C) 2012 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+ 
+ ac_pwd='$ac_pwd'
+ srcdir='$srcdir'
+ INSTALL='$INSTALL'
+ MKDIR_P='$MKDIR_P'
+ AWK='$AWK'
+@@ -13355,21 +15815,26 @@ test -n "\$AWK" || AWK=awk
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ # The default lists apply if the user does not specify any file.
+ ac_need_defaults=:
+ while test $# != 0
+ do
+   case $1 in
+-  --*=*)
++  --*=?*)
+     ac_option=`expr "X$1" : 'X\([^=]*\)='`
+     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+     ac_shift=:
+     ;;
++  --*=)
++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
++    ac_optarg=
++    ac_shift=:
++    ;;
+   *)
+     ac_option=$1
+     ac_optarg=$2
+     ac_shift=shift
+     ;;
+   esac
+ 
+   case $ac_option in
+@@ -13381,38 +15846,39 @@ do
+   --config | --confi | --conf | --con | --co | --c )
+     $as_echo "$ac_cs_config"; exit ;;
+   --debug | --debu | --deb | --de | --d | -d )
+     debug=: ;;
+   --file | --fil | --fi | --f )
+     $ac_shift
+     case $ac_optarg in
+     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
++    '') as_fn_error $? "missing file argument" ;;
+     esac
+     as_fn_append CONFIG_FILES " '$ac_optarg'"
+     ac_need_defaults=false;;
+   --header | --heade | --head | --hea )
+     $ac_shift
+     case $ac_optarg in
+     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+     esac
+     as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+     ac_need_defaults=false;;
+   --he | --h)
+     # Conflict between --help and --header
+-    as_fn_error "ambiguous option: \`$1'
++    as_fn_error $? "ambiguous option: \`$1'
+ Try \`$0 --help' for more information.";;
+   --help | --hel | -h )
+     $as_echo "$ac_cs_usage"; exit ;;
+   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+   | -silent | --silent | --silen | --sile | --sil | --si | --s)
+     ac_cs_silent=: ;;
+ 
+   # This is an error.
+-  -*) as_fn_error "unrecognized option: \`$1'
++  -*) as_fn_error $? "unrecognized option: \`$1'
+ Try \`$0 --help' for more information." ;;
+ 
+   *) as_fn_append ac_config_targets " $1"
+      ac_need_defaults=false ;;
+ 
+   esac
+   shift
+ done
+@@ -13422,17 +15888,17 @@ ac_configure_extra_args=
+ if $ac_cs_silent; then
+   exec 6>/dev/null
+   ac_configure_extra_args="$ac_configure_extra_args --silent"
+ fi
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ if \$ac_cs_recheck; then
+-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+   shift
+   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+   CONFIG_SHELL='$SHELL'
+   export CONFIG_SHELL
+   exec "\$@"
+ fi
+ 
+ _ACEOF
+@@ -13446,211 +15912,246 @@ exec 5>>config.log
+   $as_echo "$ac_log"
+ } >&5
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ #
+ # INIT-COMMANDS
+ #
++ax_enable_builddir_srcdir="$srcdir"                    # $srcdir
++ax_enable_builddir_host="$HOST"                        # $HOST / $host
++ax_enable_builddir_version="$VERSION"                  # $VERSION
++ax_enable_builddir_package="$PACKAGE"                  # $PACKAGE
++ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX
++ax_enable_builddir_sed="$ax_enable_builddir_sed"       # $SED
++ax_enable_builddir="$ax_enable_builddir"               # $SUB
++
+ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+ 
+ 
+ # The HP-UX ksh and POSIX shell print the target directory to stdout
+ # if CDPATH is set.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+ 
+ sed_quote_subst='$sed_quote_subst'
+ double_quote_subst='$double_quote_subst'
+ delay_variable_subst='$delay_variable_subst'
+-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
++macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
++macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
++enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
++enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
++pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
++enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
++SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
++ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
++PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
++host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
++host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
++host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
++build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
++build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
++build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
++SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
++Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
++GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
++EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
++FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
++LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
++NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
++LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
++max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
++ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
++exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
++lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
++lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
++lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
++lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
++reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
++reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
++OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
++deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
++file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
++file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
++want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
++DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
++sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
++AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
++AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
++archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
++STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
++RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
++old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
++old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
++old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
++lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
++CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
++CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
++compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
++GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
++lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
++objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
++MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
++lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
++lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
++need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
++MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
++DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
++NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
++LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
++OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
++OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
++libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
++shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
++extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
++archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
++enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
++export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
++whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
++compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
++old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
++old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
++archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
++archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
++module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
++module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
++with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
++allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
++no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
++hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
++hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
++hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
++hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
++hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
++hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
++hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
++inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
++link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
++always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
++export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
++exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
++include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
++prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
++postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
++file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
++variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
++need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
++need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
++version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
++runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
++shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
++shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
++libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
++library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
++soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
++install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
++postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
++postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
++finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
++finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
++hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
++sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
++sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
++hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
++enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
++enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
++enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
++old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
++striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+ 
+ LTCC='$LTCC'
+ LTCFLAGS='$LTCFLAGS'
+ compiler='$compiler_DEFAULT'
+ 
++# A function that is used when there is no print builtin or printf.
++func_fallback_echo ()
++{
++  eval 'cat <<_LTECHO_EOF
++\$1
++_LTECHO_EOF'
++}
++
+ # Quote evaled strings.
+-for var in SED \
++for var in SHELL \
++ECHO \
++PATH_SEPARATOR \
++SED \
+ GREP \
+ EGREP \
+ FGREP \
+ LD \
+ NM \
+ LN_S \
+ lt_SP2NL \
+ lt_NL2SP \
+ reload_flag \
+ OBJDUMP \
+ deplibs_check_method \
+ file_magic_cmd \
++file_magic_glob \
++want_nocaseglob \
++DLLTOOL \
++sharedlib_from_linklib_cmd \
+ AR \
+ AR_FLAGS \
++archiver_list_spec \
+ STRIP \
+ RANLIB \
+ CC \
+ CFLAGS \
+ compiler \
+ lt_cv_sys_global_symbol_pipe \
+ lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+-SHELL \
+-ECHO \
++nm_file_list_spec \
+ lt_prog_compiler_no_builtin_flag \
++lt_prog_compiler_pic \
+ lt_prog_compiler_wl \
+-lt_prog_compiler_pic \
+ lt_prog_compiler_static \
+ lt_cv_prog_compiler_c_o \
+ need_locks \
++MANIFEST_TOOL \
+ DSYMUTIL \
+ NMEDIT \
+ LIPO \
+ OTOOL \
+ OTOOL64 \
+ shrext_cmds \
+ export_dynamic_flag_spec \
+ whole_archive_flag_spec \
+ compiler_needs_object \
+ with_gnu_ld \
+ allow_undefined_flag \
+ no_undefined_flag \
+ hardcode_libdir_flag_spec \
+-hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+-fix_srcfile_path \
+ exclude_expsyms \
+ include_expsyms \
+ file_list_spec \
+ variables_saved_for_relink \
+ libname_spec \
+ library_names_spec \
+ soname_spec \
++install_override_mode \
+ finish_eval \
+ old_striplib \
+ striplib; do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+     *[\\\\\\\`\\"\\\$]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
++      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+       ;;
+     *)
+       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+       ;;
+     esac
+ done
+ 
+ # Double-quote double-evaled strings.
+@@ -13662,37 +16163,32 @@ extract_expsyms_cmds \
+ old_archive_from_new_cmds \
+ old_archive_from_expsyms_cmds \
+ archive_cmds \
+ archive_expsym_cmds \
+ module_cmds \
+ module_expsym_cmds \
+ export_symbols_cmds \
+ prelink_cmds \
++postlink_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ finish_cmds \
+ sys_lib_search_path_spec \
+ sys_lib_dlsearch_path_spec; do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+     *[\\\\\\\`\\"\\\$]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
++      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+       ;;
+     *)
+       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+       ;;
+     esac
+ done
+ 
+-# Fix-up fallback echo if it was mangled by the above quoting rules.
+-case \$lt_ECHO in
+-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+-  ;;
+-esac
+-
+ ac_aux_dir='$ac_aux_dir'
+ xsi_shell='$xsi_shell'
+ lt_shell_append='$lt_shell_append'
+ 
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes INIT.
+ if test -n "\${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+@@ -13713,29 +16209,30 @@ TARGETDIR="$TARGETDIR"
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ 
+ # Handling of arguments.
+ for ac_config_target in $ac_config_targets
+ do
+   case $ac_config_target in
+     "fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;;
++    "buildir") CONFIG_COMMANDS="$CONFIG_COMMANDS buildir" ;;
+     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+     "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;;
+     "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;;
+     "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;;
+     "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+     "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;;
+     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+     "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
+     "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
+     "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;;
+ 
+-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
++  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+   esac
+ done
+ 
+ 
+ # If the user did not use the arguments to specify the items to instantiate,
+ # then the envvar interface is used.  Set only those that are not.
+ # We use the long form for the default assignment because of an extremely
+ # bizarre bug on SunOS 4.1.3.
+@@ -13749,82 +16246,84 @@ fi
+ # Have a temporary directory for convenience.  Make it in the build tree
+ # simply because there is no reason against having it here, and in addition,
+ # creating and moving files from /tmp can sometimes cause problems.
+ # Hook for its removal unless debugging.
+ # Note that there is a small window in which the directory will not be cleaned:
+ # after its creation but before its name has been assigned to `$tmp'.
+ $debug ||
+ {
+-  tmp=
++  tmp= ac_tmp=
+   trap 'exit_status=$?
+-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
++  : "${ac_tmp:=$tmp}"
++  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+ ' 0
+   trap 'as_fn_exit 1' 1 2 13 15
+ }
+ # Create a (secure) tmp directory for tmp files.
+ 
+ {
+   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+-  test -n "$tmp" && test -d "$tmp"
++  test -d "$tmp"
+ }  ||
+ {
+   tmp=./conf$$-$RANDOM
+   (umask 077 && mkdir "$tmp")
+-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
++} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
++ac_tmp=$tmp
+ 
+ # Set up the scripts for CONFIG_FILES section.
+ # No need to generate them if there are no CONFIG_FILES.
+ # This happens for instance with `./config.status config.h'.
+ if test -n "$CONFIG_FILES"; then
+ 
+ 
+ ac_cr=`echo X | tr X '\015'`
+ # On cygwin, bash can eat \r inside `` if the user requested igncr.
+ # But we know of no other shell where ac_cr would be empty at this
+ # point, so we can use a bashism as a fallback.
+ if test "x$ac_cr" = x; then
+   eval ac_cr=\$\'\\r\'
+ fi
+ ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+ if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+-  ac_cs_awk_cr='\r'
++  ac_cs_awk_cr='\\r'
+ else
+   ac_cs_awk_cr=$ac_cr
+ fi
+ 
+-echo 'BEGIN {' >"$tmp/subs1.awk" &&
++echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+ _ACEOF
+ 
+ 
+ {
+   echo "cat >conf$$subs.awk <<_ACEOF" &&
+   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+   echo "_ACEOF"
+ } >conf$$subs.sh ||
+-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
++  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ ac_delim='%!_!# '
+ for ac_last_try in false false false false false :; do
+   . ./conf$$subs.sh ||
+-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ 
+   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+   if test $ac_delim_n = $ac_delim_num; then
+     break
+   elif $ac_last_try; then
+-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+   else
+     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+   fi
+ done
+ rm -f conf$$subs.sh
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
++cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+ _ACEOF
+ sed -n '
+ h
+ s/^/S["/; s/!.*/"]=/
+ p
+ g
+ s/^[^!]*!//
+ :repl
+@@ -13862,17 +16361,17 @@ t delim
+ /^[^""]/{
+   N
+   s/\n//
+ }
+ ' >>$CONFIG_STATUS || ac_write_fail=1
+ rm -f conf$$subs.awk
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ _ACAWK
+-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
++cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+   for (key in S) S_is_set[key] = 1
+   FS = ""
+ 
+ }
+ {
+   line = $ 0
+   nfields = split(line, field, "@")
+   substed = 0
+@@ -13894,59 +16393,67 @@ cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ 
+ _ACAWK
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+ else
+   cat
+-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+-_ACEOF
+-
+-# VPATH may cause trouble with some makes, so we remove $(srcdir),
+-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
++fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
++  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
++_ACEOF
++
++# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
++# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+ # trailing colons and then remove the whole line if VPATH becomes empty
+ # (actually we leave an empty line to preserve line numbers).
+ if test "x$srcdir" = x.; then
+-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+-s/:*\$(srcdir):*/:/
+-s/:*\${srcdir}:*/:/
+-s/:*@srcdir@:*/:/
+-s/^\([^=]*=[	 ]*\):*/\1/
++  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
++h
++s///
++s/^/:/
++s/[	 ]*$/:/
++s/:\$(srcdir):/:/g
++s/:\${srcdir}:/:/g
++s/:@srcdir@:/:/g
++s/^:*//
+ s/:*$//
++x
++s/\(=[	 ]*\).*/\1/
++G
++s/\n//
+ s/^[^=]*=[	 ]*$//
+ }'
+ fi
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ fi # test -n "$CONFIG_FILES"
+ 
+ # Set up the scripts for CONFIG_HEADERS section.
+ # No need to generate them if there are no CONFIG_HEADERS.
+ # This happens for instance with `./config.status Makefile'.
+ if test -n "$CONFIG_HEADERS"; then
+-cat >"$tmp/defines.awk" <<\_ACAWK ||
++cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+ BEGIN {
+ _ACEOF
+ 
+ # Transform confdefs.h into an awk script `defines.awk', embedded as
+ # here-document in config.status, that substitutes the proper values into
+ # config.h.in to produce config.h.
+ 
+ # Create a delimiter string that does not exist in confdefs.h, to ease
+ # handling of long lines.
+ ac_delim='%!_!# '
+ for ac_last_try in false false :; do
+-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+-  if test -z "$ac_t"; then
++  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
++  if test -z "$ac_tt"; then
+     break
+   elif $ac_last_try; then
+-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
++    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+   else
+     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+   fi
+ done
+ 
+ # For the awk script, D is an array of macro values keyed by name,
+ # likewise P contains macro parameters if any.  Preserve backslash
+ # newline sequences.
+@@ -14021,30 +16528,30 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
+       next
+     }
+   }
+ }
+ { print }
+ _ACAWK
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
++  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+ fi # test -n "$CONFIG_HEADERS"
+ 
+ 
+ eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS  :L $CONFIG_LINKS  :C $CONFIG_COMMANDS"
+ shift
+ for ac_tag
+ do
+   case $ac_tag in
+   :[FHLC]) ac_mode=$ac_tag; continue;;
+   esac
+   case $ac_mode$ac_tag in
+   :[FHL]*:*);;
+-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
++  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+   :[FH]-) ac_tag=-:-;;
+   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+   esac
+   ac_save_IFS=$IFS
+   IFS=:
+   set x $ac_tag
+   IFS=$ac_save_IFS
+   shift
+@@ -14053,26 +16560,26 @@ do
+ 
+   case $ac_mode in
+   :L) ac_source=$1;;
+   :[FH])
+     ac_file_inputs=
+     for ac_f
+     do
+       case $ac_f in
+-      -) ac_f="$tmp/stdin";;
++      -) ac_f="$ac_tmp/stdin";;
+       *) # Look for the file first in the build tree, then in the source tree
+ 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+ 	 # because $ac_f cannot contain `:'.
+ 	 test -f "$ac_f" ||
+ 	   case $ac_f in
+ 	   [\\/$]*) false;;
+ 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ 	   esac ||
+-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
++	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+       esac
+       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+       as_fn_append ac_file_inputs " '$ac_f'"
+     done
+ 
+     # Let's still pretend it is `configure' which instantiates (i.e., don't
+     # use $as_me), people would be surprised to read:
+     #    /* config.h.  Generated by config.status.  */
+@@ -14088,18 +16595,18 @@ do
+     case $configure_input in #(
+     *\&* | *\|* | *\\* )
+        ac_sed_conf_input=`$as_echo "$configure_input" |
+        sed 's/[\\\\&|]/\\\\&/g'`;; #(
+     *) ac_sed_conf_input=$configure_input;;
+     esac
+ 
+     case $ac_tag in
+-    *:-:* | *:-) cat >"$tmp/stdin" \
+-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
++    *:-:* | *:-) cat >"$ac_tmp/stdin" \
++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+     esac
+     ;;
+   esac
+ 
+   ac_dir=`$as_dirname -- "$ac_file" ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+@@ -14225,56 +16732,57 @@ s&@top_srcdir@&$ac_top_srcdir&;t t
+ s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+ s&@builddir@&$ac_builddir&;t t
+ s&@abs_builddir@&$ac_abs_builddir&;t t
+ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+ s&@INSTALL@&$ac_INSTALL&;t t
+ s&@MKDIR_P@&$ac_MKDIR_P&;t t
+ $ac_datarootdir_hack
+ "
+-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+-  || as_fn_error "could not create $ac_file" "$LINENO" 5
++eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
++  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ 
+ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
++  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
++  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
++      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+-which seems to be undefined.  Please make sure it is defined." >&5
++which seems to be undefined.  Please make sure it is defined" >&5
+ $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+-which seems to be undefined.  Please make sure it is defined." >&2;}
+-
+-  rm -f "$tmp/stdin"
++which seems to be undefined.  Please make sure it is defined" >&2;}
++
++  rm -f "$ac_tmp/stdin"
+   case $ac_file in
+-  -) cat "$tmp/out" && rm -f "$tmp/out";;
+-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
++  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
++  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+   esac \
+-  || as_fn_error "could not create $ac_file" "$LINENO" 5
++  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+  ;;
+   :H)
+   #
+   # CONFIG_HEADER
+   #
+   if test x"$ac_file" != x-; then
+     {
+       $as_echo "/* $configure_input  */" \
+-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+-    } >"$tmp/config.h" \
+-      || as_fn_error "could not create $ac_file" "$LINENO" 5
+-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
++      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
++    } >"$ac_tmp/config.h" \
++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
++    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+ $as_echo "$as_me: $ac_file is unchanged" >&6;}
+     else
+       rm -f "$ac_file"
+-      mv "$tmp/config.h" "$ac_file" \
+-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
++      mv "$ac_tmp/config.h" "$ac_file" \
++	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+     fi
+   else
+     $as_echo "/* $configure_input  */" \
+-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+-      || as_fn_error "could not create -" "$LINENO" 5
++      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
++      || as_fn_error $? "could not create -" "$LINENO" 5
+   fi
+ # Compute "$ac_file"'s index in $config_headers.
+ _am_arg="$ac_file"
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+   case $_am_header in
+     $_am_arg | $_am_arg:* )
+       break ;;
+@@ -14318,53 +16826,197 @@ echo "timestamp for $_am_arg" >`$as_dirn
+     if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+       ac_source=$srcdir/$ac_source
+     fi
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+ $as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
+ 
+     if test ! -r "$ac_source"; then
+-      as_fn_error "$ac_source: file not found" "$LINENO" 5
++      as_fn_error $? "$ac_source: file not found" "$LINENO" 5
+     fi
+     rm -f "$ac_file"
+ 
+     # Try a relative symlink, then a hard link, then a copy.
+-    case $srcdir in
++    case $ac_source in
+     [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+ 	*) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+     esac
+     ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+       ln "$ac_source" "$ac_file" 2>/dev/null ||
+       cp -p "$ac_source" "$ac_file" ||
+-      as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
++      as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+   fi
+  ;;
+   :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+ $as_echo "$as_me: executing $ac_file commands" >&6;}
+  ;;
+   esac
+ 
+ 
+   case $ac_file$ac_mode in
++    "buildir":C)   ac_top_srcdir="$ax_enable_builddir_srcdir"
++  if test ".$ax_enable_builddir" = ".." ; then
++    if test -f "$top_srcdir/Makefile" ; then
++      { $as_echo "$as_me:${as_lineno-$LINENO}: skipping top_srcdir/Makefile - left untouched" >&5
++$as_echo "$as_me: skipping top_srcdir/Makefile - left untouched" >&6;}
++    else
++      { $as_echo "$as_me:${as_lineno-$LINENO}: skipping top_srcdir/Makefile - not created" >&5
++$as_echo "$as_me: skipping top_srcdir/Makefile - not created" >&6;}
++    fi
++  else
++    if test -f "$ac_top_srcdir/Makefile" ; then
++      a=`grep "^VERSION " "$ac_top_srcdir/Makefile"` ; b=`grep "^VERSION " Makefile`
++      test "$a" != "$b" && rm "$ac_top_srcdir/Makefile"
++    fi
++    if test -f "$ac_top_srcdir/Makefile" ; then
++	echo "$ac_top_srcdir/Makefile : $ac_top_srcdir/Makefile.in" > $tmp/conftemp.mk
++	echo "	@ echo 'REMOVED,,,' >\$@" >> $tmp/conftemp.mk
++      eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null"
++      if grep '^REMOVED,,,' "$ac_top_srcdir/Makefile" >/dev/null
++      then rm $ac_top_srcdir/Makefile ; fi
++      cp $tmp/conftemp.mk $ac_top_srcdir/makefiles.mk~      ## DEBUGGING
++    fi
++    if test ! -f "$ac_top_srcdir/Makefile" ; then
++      { $as_echo "$as_me:${as_lineno-$LINENO}: create top_srcdir/Makefile guessed from local Makefile" >&5
++$as_echo "$as_me: create top_srcdir/Makefile guessed from local Makefile" >&6;}
++      x='`' ; cat >$tmp/conftemp.sed <<_EOF
++/^\$/n
++x
++/^\$/bS
++x
++/\\\\\$/{H;d;}
++{H;s/.*//;x;}
++bM
++:S
++x
++/\\\\\$/{h;d;}
++{h;s/.*//;x;}
++:M
++s/\\(\\n\\)	/\\1 /g
++/^	/d
++/^[	 ]*[\\#]/d
++/^VPATH *=/d
++s/^srcdir *=.*/srcdir = ./
++s/^top_srcdir *=.*/top_srcdir = ./
++/[:=]/!d
++/^\\./d
++/ = /b
++/ .= /b
++/:/!b
++s/:.*/:/
++s/ /  /g
++s/ \\([a-z][a-z-]*[a-zA-Z0-9]\\)\\([ :]\\)/ \\1 \\1-all\\2/g
++s/^\\([a-z][a-z-]*[a-zA-Z0-9]\\)\\([ :]\\)/\\1 \\1-all\\2/
++s/  / /g
++/^all all-all[ :]/i\\
++all-configured : all-all
++s/ [a-zA-Z0-9-]*-all [a-zA-Z0-9-]*-all-all//g
++/-all-all/d
++a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\
++	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
++	; use=$x basename "\$\@" -all $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" -eq "0" ; then : \\\\\\
++	; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\
++	; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
++	; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\
++	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done
++/dist-all *:/a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\
++	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
++	; found=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\
++	; if test "\$\$found" -eq "0" ; then : \\\\\\
++	; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
++	; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\
++	; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
++/dist-[a-zA-Z0-9]*-all *:/a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\
++	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
++	; found=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\
++	; if test "\$\$found" -eq "0" ; then : \\\\\\
++	; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
++	; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\
++	; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
++/distclean-all *:/a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\
++	; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\
++	; use=$x basename "\$\@" -all $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\
++	; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
++	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\
++	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\
++	; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\
++	; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile
++_EOF
++      cp "$tmp/conftemp.sed" "$ac_top_srcdir/makefile.sed~"            ## DEBUGGING
++      $ax_enable_builddir_sed -f $tmp/conftemp.sed Makefile >$ac_top_srcdir/Makefile
++      if test -f "$ac_top_srcdir/Makefile.mk" ; then
++        { $as_echo "$as_me:${as_lineno-$LINENO}: extend top_srcdir/Makefile with top_srcdir/Makefile.mk" >&5
++$as_echo "$as_me: extend top_srcdir/Makefile with top_srcdir/Makefile.mk" >&6;}
++        cat $ac_top_srcdir/Makefile.mk >>$ac_top_srcdir/Makefile
++      fi ; xxxx="####"
++      echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$ac_top_srcdir/Makefile
++      # sanity check
++      if grep '^; echo "MAKE ' $ac_top_srcdir/Makefile >/dev/null ; then
++        { $as_echo "$as_me:${as_lineno-$LINENO}: buggy sed found - it deletes tab in \"a\" text parts" >&5
++$as_echo "$as_me: buggy sed found - it deletes tab in \"a\" text parts" >&6;}
++        $ax_enable_builddir_sed -e '/^@ HOST=/s/^/	/' -e '/^; /s/^/	/' $ac_top_srcdir/Makefile \
++          >$ac_top_srcdir/Makefile~
++        (test -s $ac_top_srcdir/Makefile~ && mv $ac_top_srcdir/Makefile~ $ac_top_srcdir/Makefile) 2>/dev/null
++      fi
++    else
++      xxxx="\\#\\#\\#\\#"
++      # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed
++      echo "s!^$xxxx [^|]* | *$ax_enable_builddir *\$!$xxxx ...... $ax_enable_builddir!" >$tmp/conftemp.sed
++      $ax_enable_builddir_sed -f "$tmp/conftemp.sed" "$ac_top_srcdir/Makefile" >$tmp/mkfile.tmp
++        cp "$tmp/conftemp.sed" "$ac_top_srcdir/makefiles.sed~"         ## DEBUGGING
++        cp "$tmp/mkfile.tmp"   "$ac_top_srcdir/makefiles.out~"         ## DEBUGGING
++      if cmp -s "$ac_top_srcdir/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then
++        { $as_echo "$as_me:${as_lineno-$LINENO}: keeping top_srcdir/Makefile from earlier configure" >&5
++$as_echo "$as_me: keeping top_srcdir/Makefile from earlier configure" >&6;}
++        rm "$tmp/mkfile.tmp"
++      else
++        { $as_echo "$as_me:${as_lineno-$LINENO}: reusing top_srcdir/Makefile from earlier configure" >&5
++$as_echo "$as_me: reusing top_srcdir/Makefile from earlier configure" >&6;}
++        mv "$tmp/mkfile.tmp" "$ac_top_srcdir/Makefile"
++      fi
++    fi
++    { $as_echo "$as_me:${as_lineno-$LINENO}: build in $ax_enable_builddir (HOST=$ax_enable_builddir_host)" >&5
++$as_echo "$as_me: build in $ax_enable_builddir (HOST=$ax_enable_builddir_host)" >&6;}
++    xxxx="####"
++    echo "$xxxx" "$ax_enable_builddir_host" "|$ax_enable_builddir" >>$ac_top_srcdir/Makefile
++  fi
++ ;;
+     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
++  # Older Autoconf quotes --file arguments for eval, but not when files
+   # are listed without --file.  Let's play safe and only enable the eval
+   # if we detect the quoting.
+   case $CONFIG_FILES in
+   *\'*) eval set x "$CONFIG_FILES" ;;
+   *)   set x $CONFIG_FILES ;;
+   esac
+   shift
+   for mf
+   do
+     # Strip MF so we end up with the name of the file.
+     mf=`echo "$mf" | sed -e 's/:.*$//'`
+     # Check whether this is an Automake generated Makefile or not.
+-    # We used to match only the files named `Makefile.in', but
++    # We used to match only the files named 'Makefile.in', but
+     # some people rename them; so instead we look at the file content.
+     # Grep'ing the first line is not enough: some people post-process
+     # each Makefile.in and add a new line on top of each file to say so.
+     # Grep'ing the whole file is not good either: AIX grep has a line
+     # limit of 2048, but all sed's we know have understand at least 4000.
+     if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+       dirpart=`$as_dirname -- "$mf" ||
+ $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+@@ -14388,31 +17040,29 @@ echo "timestamp for $_am_arg" >`$as_dirn
+ 	    s//\1/
+ 	    q
+ 	  }
+ 	  s/.*/./; q'`
+     else
+       continue
+     fi
+     # Extract the definition of DEPDIR, am__include, and am__quote
+-    # from the Makefile without running `make'.
++    # from the Makefile without running 'make'.
+     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+     test -z "$DEPDIR" && continue
+     am__include=`sed -n 's/^am__include = //p' < "$mf"`
+-    test -z "am__include" && continue
++    test -z "$am__include" && continue
+     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+-    # When using ansi2knr, U may be empty or an underscore; expand it
+-    U=`sed -n 's/^U = //p' < "$mf"`
+     # Find all dependency output files, they are included files with
+     # $(DEPDIR) in their names.  We invoke sed twice because it is the
+     # simplest approach to changing $(DEPDIR) to its actual value in the
+     # expansion.
+     for file in `sed -n "
+       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
++	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+       # Make sure the directory exists.
+       test -f "$dirpart/$file" && continue
+       fdir=`$as_dirname -- "$file" ||
+ $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$file" : 'X\(//\)[^/]' \| \
+ 	 X"$file" : 'X\(//\)$' \| \
+ 	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+ $as_echo X"$file" |
+@@ -14456,17 +17106,18 @@ echo "timestamp for $_am_arg" >`$as_dirn
+ #! $SHELL
+ 
+ # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+ # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+ # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+ # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+ #
+ #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
++#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
++#                 Foundation, Inc.
+ #   Written by Gordon Matzigkeit, 1996
+ #
+ #   This file is part of GNU Libtool.
+ #
+ # GNU Libtool is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License as
+ # published by the Free Software Foundation; either version 2 of
+ # the License, or (at your option) any later version.
+@@ -14504,16 +17155,25 @@ build_libtool_libs=$enable_shared
+ build_old_libs=$enable_static
+ 
+ # What type of objects to build.
+ pic_mode=$pic_mode
+ 
+ # Whether or not to optimize for fast installation.
+ fast_install=$enable_fast_install
+ 
++# Shell to use when invoking shell scripts.
++SHELL=$lt_SHELL
++
++# An echo program that protects backslashes.
++ECHO=$lt_ECHO
++
++# The PATH separator for the build system.
++PATH_SEPARATOR=$lt_PATH_SEPARATOR
++
+ # The host system.
+ host_alias=$host_alias
+ host=$host
+ host_os=$host_os
+ 
+ # The build system.
+ build_alias=$build_alias
+ build=$build
+@@ -14553,41 +17213,63 @@ exeext=$exeext
+ lt_unset=$lt_unset
+ 
+ # turn spaces into newlines.
+ SP2NL=$lt_lt_SP2NL
+ 
+ # turn newlines into spaces.
+ NL2SP=$lt_lt_NL2SP
+ 
+-# How to create reloadable object files.
+-reload_flag=$lt_reload_flag
+-reload_cmds=$lt_reload_cmds
++# convert \$build file names to \$host format.
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++
++# convert \$build files to toolchain format.
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+ 
+ # An object symbol dumper.
+ OBJDUMP=$lt_OBJDUMP
+ 
+ # Method to check whether dependent libraries are shared objects.
+ deplibs_check_method=$lt_deplibs_check_method
+ 
+-# Command to use when deplibs_check_method == "file_magic".
++# Command to use when deplibs_check_method = "file_magic".
+ file_magic_cmd=$lt_file_magic_cmd
+ 
++# How to find potential files when deplibs_check_method = "file_magic".
++file_magic_glob=$lt_file_magic_glob
++
++# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
++want_nocaseglob=$lt_want_nocaseglob
++
++# DLL creation program.
++DLLTOOL=$lt_DLLTOOL
++
++# Command to associate shared and link libraries.
++sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
++
+ # The archiver.
+ AR=$lt_AR
++
++# Flags to create an archive.
+ AR_FLAGS=$lt_AR_FLAGS
+ 
++# How to feed a file listing to the archiver.
++archiver_list_spec=$lt_archiver_list_spec
++
+ # A symbol stripping program.
+ STRIP=$lt_STRIP
+ 
+ # Commands used to install an old-style archive.
+ RANLIB=$lt_RANLIB
+ old_postinstall_cmds=$lt_old_postinstall_cmds
+ old_postuninstall_cmds=$lt_old_postuninstall_cmds
+ 
++# Whether to use a lock for old archive extraction.
++lock_old_archive_extraction=$lock_old_archive_extraction
++
+ # A C compiler.
+ LTCC=$lt_CC
+ 
+ # LTCC compiler flags.
+ LTCFLAGS=$lt_CFLAGS
+ 
+ # Take the output of nm and produce a listing of raw symbols and C names.
+ global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+@@ -14596,31 +17278,34 @@ global_symbol_pipe=$lt_lt_cv_sys_global_
+ global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+ 
+ # Transform the output of nm in a C name address pair.
+ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+ 
+ # Transform the output of nm in a C name address pair when lib prefix is needed.
+ global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+ 
++# Specify filename containing input files for \$NM.
++nm_file_list_spec=$lt_nm_file_list_spec
++
++# The root where to search for dependent libraries,and in which our libraries should be installed.
++lt_sysroot=$lt_sysroot
++
+ # The name of the directory that contains temporary libtool files.
+ objdir=$objdir
+ 
+-# Shell to use when invoking shell scripts.
+-SHELL=$lt_SHELL
+-
+-# An echo program that does not interpret backslashes.
+-ECHO=$lt_ECHO
+-
+ # Used to examine libraries when file_magic_cmd begins with "file".
+ MAGIC_CMD=$MAGIC_CMD
+ 
+ # Must we lock files when doing compilation?
+ need_locks=$lt_need_locks
+ 
++# Manifest tool.
++MANIFEST_TOOL=$lt_MANIFEST_TOOL
++
+ # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+ DSYMUTIL=$lt_DSYMUTIL
+ 
+ # Tool to change global to local symbols on Mac OS X.
+ NMEDIT=$lt_NMEDIT
+ 
+ # Tool to manipulate fat objects and archives on Mac OS X.
+ LIPO=$lt_LIPO
+@@ -14667,16 +17352,19 @@ libname_spec=$lt_libname_spec
+ 
+ # List of archive names.  First name is the real one, the rest are links.
+ # The last name is the one that the linker finds with -lNAME
+ library_names_spec=$lt_library_names_spec
+ 
+ # The coded name of the library, if different from the real name.
+ soname_spec=$lt_soname_spec
+ 
++# Permission mode override for installation of shared libraries.
++install_override_mode=$lt_install_override_mode
++
+ # Command to use after installation of a shared archive.
+ postinstall_cmds=$lt_postinstall_cmds
+ 
+ # Command to use after uninstallation of a shared archive.
+ postuninstall_cmds=$lt_postuninstall_cmds
+ 
+ # Commands used to finish a libtool library installation in a directory.
+ finish_cmds=$lt_finish_cmds
+@@ -14706,34 +17394,38 @@ dlopen_self_static=$enable_dlopen_self_s
+ # Commands to strip libraries.
+ old_striplib=$lt_old_striplib
+ striplib=$lt_striplib
+ 
+ 
+ # The linker used to build libraries.
+ LD=$lt_LD
+ 
++# How to create reloadable object files.
++reload_flag=$lt_reload_flag
++reload_cmds=$lt_reload_cmds
++
+ # Commands used to build an old-style archive.
+ old_archive_cmds=$lt_old_archive_cmds
+ 
+ # A language specific compiler.
+ CC=$lt_compiler
+ 
+ # Is the compiler the GNU compiler?
+ with_gcc=$GCC
+ 
+ # Compiler flag to turn off builtin functions.
+ no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+ 
++# Additional compiler flags for building library objects.
++pic_flag=$lt_lt_prog_compiler_pic
++
+ # How to pass a linker flag through the compiler.
+ wl=$lt_lt_prog_compiler_wl
+ 
+-# Additional compiler flags for building library objects.
+-pic_flag=$lt_lt_prog_compiler_pic
+-
+ # Compiler flag to prevent dynamic linking.
+ link_static_flag=$lt_lt_prog_compiler_static
+ 
+ # Does compiler simultaneously support -c and -o options?
+ compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+ 
+ # Whether or not to add -lc for building shared libraries.
+ build_libtool_need_lc=$archive_cmds_need_lc
+@@ -14773,20 +17465,16 @@ allow_undefined_flag=$lt_allow_undefined
+ 
+ # Flag that enforces no undefined symbols.
+ no_undefined_flag=$lt_no_undefined_flag
+ 
+ # Flag to hardcode \$libdir into a binary during linking.
+ # This must work even if \$libdir does not exist
+ hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+ 
+-# If ld is used when linking, flag to hardcode \$libdir into a binary
+-# during linking.  This must work even if \$libdir does not exist.
+-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+-
+ # Whether we need a single "-rpath" flag with a separated argument.
+ hardcode_libdir_separator=$lt_hardcode_libdir_separator
+ 
+ # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+ # DIR into the resulting binary.
+ hardcode_direct=$hardcode_direct
+ 
+ # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+@@ -14810,34 +17498,34 @@ hardcode_automatic=$hardcode_automatic
+ 
+ # Set to yes if linker adds runtime paths of dependent libraries
+ # to runtime path list.
+ inherit_rpath=$inherit_rpath
+ 
+ # Whether libtool must link a program against all its dependency libraries.
+ link_all_deplibs=$link_all_deplibs
+ 
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path=$lt_fix_srcfile_path
+-
+ # Set to "yes" if exported symbols are required.
+ always_export_symbols=$always_export_symbols
+ 
+ # The commands to list exported symbols.
+ export_symbols_cmds=$lt_export_symbols_cmds
+ 
+ # Symbols that should not be listed in the preloaded symbols.
+ exclude_expsyms=$lt_exclude_expsyms
+ 
+ # Symbols that must always be exported.
+ include_expsyms=$lt_include_expsyms
+ 
+ # Commands necessary for linking programs (against libraries) with templates.
+ prelink_cmds=$lt_prelink_cmds
+ 
++# Commands necessary for finishing linking programs.
++postlink_cmds=$lt_postlink_cmds
++
+ # Specify filename containing input files.
+ file_list_spec=$lt_file_list_spec
+ 
+ # How to hardcode a shared library path into an executable.
+ hardcode_action=$hardcode_action
+ 
+ # ### END LIBTOOL CONFIG
+ 
+@@ -14860,222 +17548,179 @@ fi
+ 
+ ltmain="$ac_aux_dir/ltmain.sh"
+ 
+ 
+   # We use sed instead of cat because bash on DJGPP gets confused if
+   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+   # text mode, it properly converts lines to CR/LF.  This bash problem
+   # is reportedly fixed, but why not run on old versions too?
+-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  case $xsi_shell in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-#   dirname:  Compute the dirname of FILE.  If nonempty,
+-#             add APPEND to the result, otherwise set result
+-#             to NONDIR_REPLACEMENT.
+-#             value returned in "$func_dirname_result"
+-#   basename: Compute filename of FILE.
+-#             value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+-  # positional parameters, so assign one to ordinary parameter first.
+-  func_stripname_result=${3}
+-  func_stripname_result=${func_stripname_result#"${1}"}
+-  func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=${1%%=*}
+-  func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  case ${1} in
+-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+-    *)    func_lo2o_result=${1} ;;
+-  esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=$(( $* ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=${#1}
+-}
+-
+-_LT_EOF
+-    ;;
+-  *) # Bourne compatible functions.
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  # Extract subdirectory from the argument.
+-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+-  if test "X$func_dirname_result" = "X${1}"; then
+-    func_dirname_result="${3}"
+-  else
+-    func_dirname_result="$func_dirname_result${2}"
+-  fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+-}
+-
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+-  case ${2} in
+-    .*) func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+-    *)  func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+-  esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[^=]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=`expr "$@"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$1+=\$2"
+-}
+-_LT_EOF
+-    ;;
+-  *)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$1=\$$1\$2"
+-}
+-
+-_LT_EOF
+-    ;;
+-  esac
+-
+-
+-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  mv -f "$cfgfile" "$ofile" ||
++  sed '$q' "$ltmain" >> "$cfgfile" \
++     || (rm -f "$cfgfile"; exit 1)
++
++  if test x"$xsi_shell" = xyes; then
++  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
++func_dirname ()\
++{\
++\    case ${1} in\
++\      */*) func_dirname_result="${1%/*}${2}" ;;\
++\      *  ) func_dirname_result="${3}" ;;\
++\    esac\
++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_basename ()$/,/^} # func_basename /c\
++func_basename ()\
++{\
++\    func_basename_result="${1##*/}"\
++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
++func_dirname_and_basename ()\
++{\
++\    case ${1} in\
++\      */*) func_dirname_result="${1%/*}${2}" ;;\
++\      *  ) func_dirname_result="${3}" ;;\
++\    esac\
++\    func_basename_result="${1##*/}"\
++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
++func_stripname ()\
++{\
++\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
++\    # positional parameters, so assign one to ordinary parameter first.\
++\    func_stripname_result=${3}\
++\    func_stripname_result=${func_stripname_result#"${1}"}\
++\    func_stripname_result=${func_stripname_result%"${2}"}\
++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
++func_split_long_opt ()\
++{\
++\    func_split_long_opt_name=${1%%=*}\
++\    func_split_long_opt_arg=${1#*=}\
++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
++func_split_short_opt ()\
++{\
++\    func_split_short_opt_arg=${1#??}\
++\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
++func_lo2o ()\
++{\
++\    case ${1} in\
++\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
++\      *)    func_lo2o_result=${1} ;;\
++\    esac\
++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_xform ()$/,/^} # func_xform /c\
++func_xform ()\
++{\
++    func_xform_result=${1%.*}.lo\
++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_arith ()$/,/^} # func_arith /c\
++func_arith ()\
++{\
++    func_arith_result=$(( $* ))\
++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_len ()$/,/^} # func_len /c\
++func_len ()\
++{\
++    func_len_result=${#1}\
++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++fi
++
++if test x"$lt_shell_append" = xyes; then
++  sed -e '/^func_append ()$/,/^} # func_append /c\
++func_append ()\
++{\
++    eval "${1}+=\\${2}"\
++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
++func_append_quoted ()\
++{\
++\    func_quote_for_eval "${2}"\
++\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++
++
++  # Save a `func_append' function call where possible by direct use of '+='
++  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++    && mv -f "$cfgfile.tmp" "$cfgfile" \
++      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++  test 0 -eq $? || _lt_function_replace_fail=:
++else
++  # Save a `func_append' function call even when '+=' is not available
++  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++    && mv -f "$cfgfile.tmp" "$cfgfile" \
++      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++  test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
++fi
++
++
++   mv -f "$cfgfile" "$ofile" ||
+     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+   chmod +x "$ofile"
+ 
+  ;;
+     "include":C) test -d include || mkdir include ;;
+     "src":C)
+ test -d src || mkdir src
+ test -d src/$TARGETDIR || mkdir src/$TARGETDIR
+@@ -15085,17 +17730,17 @@ test -d src/$TARGETDIR || mkdir src/$TAR
+ done # for ac_tag
+ 
+ 
+ as_fn_exit 0
+ _ACEOF
+ ac_clean_files=$ac_clean_files_save
+ 
+ test $ac_write_fail = 0 ||
+-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
++  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+ 
+ 
+ # configure is writing to config.log, and then calls config.status.
+ # config.status does its own redirection, appending to config.log.
+ # Unfortunately, on DOS this fails, as config.log is still kept open
+ # by configure, so config.status won't be able to write to it; its
+ # output is simply discarded.  So we exec the FD to /dev/null,
+ # effectively closing config.log, so it can be properly (re)opened and
+@@ -15106,15 +17751,15 @@ if test "$no_create" != yes; then
+   ac_config_status_args=
+   test "$silent" = yes &&
+     ac_config_status_args="$ac_config_status_args --quiet"
+   exec 5>/dev/null
+   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+   exec 5>>config.log
+   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+   # would make configure fail if this is the last instruction.
+-  $ac_cs_success || as_fn_exit $?
++  $ac_cs_success || as_fn_exit 1
+ fi
+ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+ 
+diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+--- a/js/src/ctypes/libffi/configure.ac
++++ b/js/src/ctypes/libffi/configure.ac
+@@ -1,152 +1,261 @@
+ dnl Process this with autoconf to create configure
+ 
+-AC_PREREQ(2.63)
++AC_PREREQ(2.68)
+ 
+-AC_INIT([libffi], [3.0.10rc0], [http://gcc.gnu.org/bugs.html])
++AC_INIT([libffi], [3.1-rc1], [http://github.com/atgreen/libffi/issues])
+ AC_CONFIG_HEADERS([fficonfig.h])
+ 
+ AC_CANONICAL_SYSTEM
+ target_alias=${target_alias-$host_alias}
+ 
+-. ${srcdir}/configure.host
++case "${host}" in
++  frv*-elf)
++    LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
++    ;;
++esac
++
++AX_ENABLE_BUILDDIR
+ 
+ AM_INIT_AUTOMAKE
+ 
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
+ # We must force CC to /not/ be precious variables; otherwise
+ # the wrong, non-multilib-adjusted value will be used in multilibs.
+ # As a side effect, we have to subst CFLAGS ourselves.
+ # Also save and restore CFLAGS, since AC_PROG_CC will come up with
+ # defaults of its own if none are provided.
+ 
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ save_CFLAGS=$CFLAGS
+ AC_PROG_CC
+ CFLAGS=$save_CFLAGS
+ m4_undefine([_AC_ARG_VAR_PRECIOUS])
+-m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
++m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ 
+ AC_SUBST(CFLAGS)
+ 
+ AM_PROG_AS
+ AM_PROG_CC_C_O
+ AC_PROG_LIBTOOL
+ AC_CONFIG_MACRO_DIR([m4])
+ 
++# Test for 64-bit build.
++AC_CHECK_SIZEOF([size_t])
++
++AX_COMPILER_VENDOR
++AX_CC_MAXOPT
++# The AX_CFLAGS_WARN_ALL macro doesn't currently work for sunpro
++# compiler.
++if test "$ax_cv_c_compiler_vendor" != "sun"; then
++  AX_CFLAGS_WARN_ALL
++fi
++
++if test "x$GCC" = "xyes"; then
++  CFLAGS="$CFLAGS -fexceptions"
++  touch local.exp
++else
++  cat > local.exp <<EOF
++set CC_FOR_TARGET "$CC"
++EOF
++fi
++
+ AM_MAINTAINER_MODE
+ 
+ AC_CHECK_HEADERS(sys/mman.h)
+ AC_CHECK_FUNCS(mmap)
+ AC_FUNC_MMAP_BLACKLIST
+ 
+ dnl The -no-testsuite modules omit the test subdir.
+ AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
+ 
+ TARGETDIR="unknown"
++HAVE_LONG_DOUBLE_VARIANT=0
+ case "$host" in
++  aarch64*-*-*)
++	TARGET=AARCH64; TARGETDIR=aarch64
++	;;
++
+   alpha*-*-*)
+ 	TARGET=ALPHA; TARGETDIR=alpha;
+ 	# Support 128-bit long double, changeable via command-line switch.
+ 	HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)'
+ 	;;
+ 
++  arc*-*-*)
++	TARGET=ARC; TARGETDIR=arc
++	;;
++
+   arm*-*-*)
+ 	TARGET=ARM; TARGETDIR=arm
+ 	;;
+ 
+   amd64-*-freebsd* | amd64-*-openbsd*)
+ 	TARGET=X86_64; TARGETDIR=x86
+   	;;
+ 
+   amd64-*-freebsd*)
+ 	TARGET=X86_64; TARGETDIR=x86
++  	;;
++
++  amd64-*-freebsd*)
++	TARGET=X86_64; TARGETDIR=x86
+ 	;;
+ 
+   avr32*-*-*)
+ 	TARGET=AVR32; TARGETDIR=avr32
+ 	;;
+ 
++  bfin*)
++  	TARGET=BFIN; TARGETDIR=bfin
++  	;;
++
+   cris-*-*)
+ 	TARGET=LIBFFI_CRIS; TARGETDIR=cris
+ 	;;
+ 
+   frv-*-*)
+ 	TARGET=FRV; TARGETDIR=frv
+ 	;;
+ 
+-  hppa*-*-linux* | hppa*-*-openbsd* | parisc*-*-linux*)
++  hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*)
+ 	TARGET=PA_LINUX; TARGETDIR=pa
+ 	;;
+   hppa*64-*-hpux*)
+ 	TARGET=PA64_HPUX; TARGETDIR=pa
+ 	;;
+   hppa*-*-hpux*)
+ 	TARGET=PA_HPUX; TARGETDIR=pa
+ 	;;
+ 
+   i?86-*-freebsd* | i?86-*-openbsd*)
+ 	TARGET=X86_FREEBSD; TARGETDIR=x86
+ 	;;
+-  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
++  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*)
+ 	TARGET=X86_WIN32; TARGETDIR=x86
+-	# All mingw/cygwin/win32 builds require this for sharedlib
+-	AM_LTLDFLAGS="-no-undefined"
++	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
++	# We must also check with_cross_host to decide if this is a native
++	# or cross-build and select where to install dlls appropriately.
++	if test -n "$with_cross_host" &&
++	   test x"$with_cross_host" != x"no"; then
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
++	else
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
++	fi
+ 	;;
+   i?86-*-darwin*)
+ 	TARGET=X86_DARWIN; TARGETDIR=x86
+ 	;;
+   i?86-*-solaris2.1[[0-9]]*)
+-	TARGET=X86_64; TARGETDIR=x86
++	TARGETDIR=x86
++	if test $ac_cv_sizeof_size_t = 4; then
++	  TARGET=X86; 
++	else
++	  TARGET=X86_64; 
++	fi	  
+ 	;;
+-  i?86-*-*)
+-	TARGET=X86; TARGETDIR=x86
++
++  x86_64-*-darwin*)
++	TARGET=X86_DARWIN; TARGETDIR=x86
++	;;
++
++  x86_64-*-cygwin* | x86_64-*-mingw*)
++	TARGET=X86_WIN64; TARGETDIR=x86
++	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
++	# We must also check with_cross_host to decide if this is a native
++	# or cross-build and select where to install dlls appropriately.
++	if test -n "$with_cross_host" &&
++	   test x"$with_cross_host" != x"no"; then
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
++	else
++	  AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
++	fi
++	;;
++
++  i?86-*-* | x86_64-*-*)
++	TARGETDIR=x86
++	if test $ac_cv_sizeof_size_t = 4; then
++	  case "$host" in
++	    *-gnux32)
++	      TARGET=X86_64
++	      ;;
++	    *)
++	      TARGET=X86
++	      ;;
++          esac	
++	else
++	  TARGET=X86_64; 
++	fi	  
+ 	;;
+ 
+   ia64*-*-*)
+ 	TARGET=IA64; TARGETDIR=ia64
+ 	;;
+ 
+   m32r*-*-*)
+ 	TARGET=M32R; TARGETDIR=m32r
+ 	;;
+ 
+   m68k-*-*)
+ 	TARGET=M68K; TARGETDIR=m68k
+ 	;;
+ 
+-  mips-sgi-irix5.* | mips-sgi-irix6.*)
++  m88k-*-*)
++	TARGET=M88K; TARGETDIR=m88k
++	;;
++
++  microblaze*-*-*)
++	TARGET=MICROBLAZE; TARGETDIR=microblaze
++	;;
++
++  moxie-*-*)
++	TARGET=MOXIE; TARGETDIR=moxie
++	;;
++
++  metag-*-*)
++	TARGET=METAG; TARGETDIR=metag
++	;;
++
++  mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*)
+ 	TARGET=MIPS; TARGETDIR=mips
+ 	;;
+   mips*-*linux* | mips*-*-openbsd*)
+ 	# Support 128-bit long double for NewABI.
+ 	HAVE_LONG_DOUBLE='defined(__mips64)'
+ 	TARGET=MIPS; TARGETDIR=mips
+ 	;;
+ 
+-  moxie-*-*)
+-        TARGET=MOXIE; TARGETDIR=moxie
++  nios2*-linux*)
++	TARGET=NIOS2; TARGETDIR=nios2
+ 	;;
+ 
+   powerpc*-*-linux* | powerpc-*-sysv*)
+ 	TARGET=POWERPC; TARGETDIR=powerpc
++	HAVE_LONG_DOUBLE_VARIANT=1
++	;;
++  powerpc-*-amigaos*)
++	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+   powerpc-*-beos*)
+ 	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc64-*-darwin*)
+ 	TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
+ 	;;
+   powerpc-*-aix* | rs6000-*-aix*)
+ 	TARGET=POWERPC_AIX; TARGETDIR=powerpc
+ 	;;
+   powerpc-*-freebsd* | powerpc-*-openbsd*)
+ 	TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
++	HAVE_LONG_DOUBLE_VARIANT=1
++	;;
++  powerpc64-*-freebsd*)
++	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+   powerpc*-*-rtems*)
+ 	TARGET=POWERPC; TARGETDIR=powerpc
+ 	;;
+ 
+   s390-*-* | s390x-*-*)
+ 	TARGET=S390; TARGETDIR=s390
+ 	;;
+@@ -157,96 +266,105 @@ case "$host" in
+   sh64-*-* | sh5*-*-*)
+ 	TARGET=SH64; TARGETDIR=sh64
+ 	;;
+ 
+   sparc*-*-*)
+ 	TARGET=SPARC; TARGETDIR=sparc
+ 	;;
+ 
+-  x86_64-*-darwin*)
+-	TARGET=X86_DARWIN; TARGETDIR=x86
++  tile*-*)
++        TARGET=TILE; TARGETDIR=tile
++        ;;
++
++  vax-*-*)
++	TARGET=VAX; TARGETDIR=vax
+ 	;;
+ 
+-  x86_64-*-cygwin* | x86_64-*-mingw*)
+-	TARGET=X86_WIN64; TARGETDIR=x86
++  xtensa*-*)
++	TARGET=XTENSA; TARGETDIR=xtensa
+ 	;;
+ 
+-  x86_64-*-*)
+-	TARGET=X86_64; TARGETDIR=x86
+-	;;
+ esac
+ 
+ AC_SUBST(AM_RUNTESTFLAGS)
+ AC_SUBST(AM_LTLDFLAGS)
+ 
+ if test $TARGETDIR = unknown; then
+   AC_MSG_ERROR(["libffi has not been ported to $host."])
+ fi
+ 
+ AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
++AM_CONDITIONAL(BFIN, test x$TARGET = xBFIN)
+ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
+ AM_CONDITIONAL(X86, test x$TARGET = xX86)
+ AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD)
+ AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32)
+ AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64)
+ AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN)
++AM_CONDITIONAL(X86_DARWIN32, test x$TARGET = xX86_DARWIN && test $ac_cv_sizeof_size_t = 4)
++AM_CONDITIONAL(X86_DARWIN64, test x$TARGET = xX86_DARWIN && test $ac_cv_sizeof_size_t = 8)
+ AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
+ AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
+ AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
+ AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
++AM_CONDITIONAL(M88K, test x$TARGET = xM88K)
++AM_CONDITIONAL(MICROBLAZE, test x$TARGET = xMICROBLAZE)
++AM_CONDITIONAL(METAG, test x$TARGET = xMETAG)
+ AM_CONDITIONAL(MOXIE, test x$TARGET = xMOXIE)
++AM_CONDITIONAL(NIOS2, test x$TARGET = xNIOS2)
+ AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
+ AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX)
+ AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN)
+ AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD)
++AM_CONDITIONAL(AARCH64, test x$TARGET = xAARCH64)
++AM_CONDITIONAL(ARC, test x$TARGET = xARC)
+ AM_CONDITIONAL(ARM, test x$TARGET = xARM)
+ AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32)
+ AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS)
+ AM_CONDITIONAL(FRV, test x$TARGET = xFRV)
+ AM_CONDITIONAL(S390, test x$TARGET = xS390)
+ AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
+ AM_CONDITIONAL(SH, test x$TARGET = xSH)
+ AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
+ AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX)
+ AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX)
+ AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX)
++AM_CONDITIONAL(TILE, test x$TARGET = xTILE)
++AM_CONDITIONAL(VAX, test x$TARGET = xVAX)
++AM_CONDITIONAL(XTENSA, test x$TARGET = xXTENSA)
+ 
+ AC_HEADER_STDC
+ AC_CHECK_FUNCS(memcpy)
+ AC_FUNC_ALLOCA
+ 
+ AC_CHECK_SIZEOF(double)
+ AC_CHECK_SIZEOF(long double)
+ 
+ # Also AC_SUBST this variable for ffi.h.
+ if test -z "$HAVE_LONG_DOUBLE"; then
+   HAVE_LONG_DOUBLE=0
+-  if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
+-    if test $ac_cv_sizeof_long_double != 0; then
++  if test $ac_cv_sizeof_long_double != 0; then
++    if test $HAVE_LONG_DOUBLE_VARIANT != 0; then
++      AC_DEFINE(HAVE_LONG_DOUBLE_VARIANT, 1, [Define if you support more than one size of the long double type])
+       HAVE_LONG_DOUBLE=1
+-      AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
++    else
++      if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
++        HAVE_LONG_DOUBLE=1
++        AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
++      fi
+     fi
+   fi
+ fi
+ AC_SUBST(HAVE_LONG_DOUBLE)
++AC_SUBST(HAVE_LONG_DOUBLE_VARIANT)
+ 
+ AC_C_BIGENDIAN
+ 
+-AC_CACHE_CHECK([assembler .cfi pseudo-op support],
+-    libffi_cv_as_cfi_pseudo_op, [
+-    libffi_cv_as_cfi_pseudo_op=unknown
+-    AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
+-		   [libffi_cv_as_cfi_pseudo_op=yes],
+-		   [libffi_cv_as_cfi_pseudo_op=no])
+-])
+-if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then
+-    AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
+-	      [Define if your assembler supports .cfi_* directives.])
+-fi
++GCC_AS_CFI_PSEUDO_OP
+ 
+ if test x$TARGET = xSPARC; then
+     AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs],
+ 	libffi_cv_as_sparc_ua_pcrel, [
+ 	save_CFLAGS="$CFLAGS"
+ 	save_LDFLAGS="$LDFLAGS"
+ 	CFLAGS="$CFLAGS -fpic"
+ 	LDFLAGS="$LDFLAGS -shared"
+@@ -259,82 +377,96 @@ if test x$TARGET = xSPARC; then
+ 	AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
+ 		  [Define if your assembler and linker support unaligned PC relative relocs.])
+     fi
+ 
+     AC_CACHE_CHECK([assembler .register pseudo-op support],
+        libffi_cv_as_register_pseudo_op, [
+        libffi_cv_as_register_pseudo_op=unknown
+        # Check if we have .register
+-       AC_TRY_COMPILE([asm (".register %g2, #scratch");],,
++       AC_TRY_COMPILE(,[asm (".register %g2, #scratch");],
+ 		       [libffi_cv_as_register_pseudo_op=yes],
+ 		       [libffi_cv_as_register_pseudo_op=no])
+     ])
+     if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
+        AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
+ 	       [Define if your assembler supports .register.])
+     fi
+ 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=no
+ 	echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
+-	if $CC $CFLAGS -c conftest.s > /dev/null; then
++	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
+ 	AC_DEFINE(HAVE_AS_X86_PCREL, 1,
+ 		  [Define if your assembler supports PC relative relocs.])
+     fi
+ 
+     AC_CACHE_CHECK([assembler .ascii pseudo-op support],
+        libffi_cv_as_ascii_pseudo_op, [
+        libffi_cv_as_ascii_pseudo_op=unknown
+        # Check if we have .ascii
+-       AC_TRY_COMPILE([asm (".ascii \"string\"");],,
++       AC_TRY_COMPILE(,[asm (".ascii \\"string\\"");],
+ 		       [libffi_cv_as_ascii_pseudo_op=yes],
+ 		       [libffi_cv_as_ascii_pseudo_op=no])
+     ])
+     if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then
+        AC_DEFINE(HAVE_AS_ASCII_PSEUDO_OP, 1,
+ 	       [Define if your assembler supports .ascii.])
+     fi
+ 
+     AC_CACHE_CHECK([assembler .string pseudo-op support],
+        libffi_cv_as_string_pseudo_op, [
+        libffi_cv_as_string_pseudo_op=unknown
+        # Check if we have .string
+-       AC_TRY_COMPILE([asm (".string \"string\"");],,
++       AC_TRY_COMPILE(,[asm (".string \\"string\\"");],
+ 		       [libffi_cv_as_string_pseudo_op=yes],
+ 		       [libffi_cv_as_string_pseudo_op=no])
+     ])
+     if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
+        AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1,
+ 	       [Define if your assembler supports .string.])
+     fi
+ fi
+ 
+-if test x$TARGET = xX86_WIN64; then
+-    LT_SYS_SYMBOL_USCORE
+-    if test "x$sys_symbol_underscore" = xyes; then
+-        AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.])
+-    fi
++# On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC.
++AC_ARG_ENABLE(pax_emutramp,
++  [  --enable-pax_emutramp       enable pax emulated trampolines, for we can't use PROT_EXEC],
++  if test "$enable_pax_emutramp" = "yes"; then
++    AC_DEFINE(FFI_MMAP_EXEC_EMUTRAMP_PAX, 1,
++      [Define this if you want to enable pax emulated trampolines])
++  fi)
++
++LT_SYS_SYMBOL_USCORE
++if test "x$sys_symbol_underscore" = xyes; then
++    AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.])
+ fi
+ 
++FFI_EXEC_TRAMPOLINE_TABLE=0
+ case "$target" in
+-     # Darwin 10 (OSX 10.6) and beyond allocate non-executable pages
+-     *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
++     *arm*-apple-darwin*)
++       FFI_EXEC_TRAMPOLINE_TABLE=1
++       AC_DEFINE(FFI_EXEC_TRAMPOLINE_TABLE, 1,
++                 [Cannot use PROT_EXEC on this target, so, we revert to
++                   alternative means])
++     ;;
++     *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*)
+        AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
+                  [Cannot use malloc on this target, so, we revert to
+                    alternative means])
+      ;;
+ esac
++AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1)
++AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE)
+ 
+ if test x$TARGET = xX86_64; then
+     AC_CACHE_CHECK([toolchain supports unwind section type],
+ 	libffi_cv_as_x86_64_unwind_section_type, [
+         cat  > conftest1.s << EOF
+ .text
+ .globl foo
+ foo:
+@@ -357,54 +489,57 @@ EOF
+ 	fi
+ 	])
+     if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then
+ 	AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
+ 		  [Define if your assembler supports unwind section type.])
+     fi
+ fi
+ 
+-AC_CACHE_CHECK([whether .eh_frame section should be read-only],
+-    libffi_cv_ro_eh_frame, [
+-	libffi_cv_ro_eh_frame=no
+-	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
+-	if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
+-	    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
+-		libffi_cv_ro_eh_frame=yes
+-	    elif grep '.section.*eh_frame.*#alloc' conftest.c \
+-		 | grep -v '#write' > /dev/null; then
+-		libffi_cv_ro_eh_frame=yes
+-	    fi
+-	fi
+-	rm -f conftest.*
+-    ])
+-if test "x$libffi_cv_ro_eh_frame" = xyes; then
+-    AC_DEFINE(HAVE_RO_EH_FRAME, 1,
+-	      [Define if .eh_frame sections should be read-only.])
+-    AC_DEFINE(EH_FRAME_FLAGS, "a",
+-	      [Define to the flags needed for the .section .eh_frame directive.])
+-else
+-    AC_DEFINE(EH_FRAME_FLAGS, "aw",
+-	      [Define to the flags needed for the .section .eh_frame directive.])
+-fi
++if test "x$GCC" = "xyes"; then
++  AC_CACHE_CHECK([whether .eh_frame section should be read-only],
++      libffi_cv_ro_eh_frame, [
++  	libffi_cv_ro_eh_frame=no
++  	echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
++  	if $CC $CFLAGS -c -fpic -fexceptions -o conftest.o conftest.c > /dev/null 2>&1; then
++	    objdump -h conftest.o > conftest.dump 2>&1
++	    libffi_eh_frame_line=`grep -n eh_frame conftest.dump | cut -d: -f 1`
++	    libffi_test_line=`expr $libffi_eh_frame_line + 1`p
++	    sed -n $libffi_test_line conftest.dump > conftest.line
++  	    if grep READONLY conftest.line > /dev/null; then
++  		libffi_cv_ro_eh_frame=yes
++  	    fi
++  	fi
++  	rm -f conftest.*
++      ])
++  if test "x$libffi_cv_ro_eh_frame" = xyes; then
++      AC_DEFINE(HAVE_RO_EH_FRAME, 1,
++  	      [Define if .eh_frame sections should be read-only.])
++      AC_DEFINE(EH_FRAME_FLAGS, "a",
++  	      [Define to the flags needed for the .section .eh_frame directive.  ])
++  else
++      AC_DEFINE(EH_FRAME_FLAGS, "aw",
++  	      [Define to the flags needed for the .section .eh_frame directive.  ])
++  fi
+ 
+-AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
+-    libffi_cv_hidden_visibility_attribute, [
+-	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
+-	libffi_cv_hidden_visibility_attribute=no
+-	if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
+-	    if grep '\.hidden.*foo' conftest.s >/dev/null; then
+-		libffi_cv_hidden_visibility_attribute=yes
+-	    fi
+-	fi
+-	rm -f conftest.*
+-    ])
+-if test $libffi_cv_hidden_visibility_attribute = yes; then
+-    AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
+-	      [Define if __attribute__((visibility("hidden"))) is supported.])
++  AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
++      libffi_cv_hidden_visibility_attribute, [
++  	echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1  ; }' > conftest.c
++  	libffi_cv_hidden_visibility_attribute=no
++  	if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
++  	    if grep '\.hidden.*foo' conftest.s >/dev/null; then
++  		libffi_cv_hidden_visibility_attribute=yes
++  	    fi
++  	fi
++  	rm -f conftest.*
++      ])
++  if test $libffi_cv_hidden_visibility_attribute = yes; then
++      AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
++  	      [Define if __attribute__((visibility("hidden"))) is supported.])
++  fi
+ fi
+ 
+ AH_BOTTOM([
+ #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
+ #ifdef LIBFFI_ASM
+ #define FFI_HIDDEN(name) .hidden name
+ #else
+ #define FFI_HIDDEN __attribute__ ((visibility ("hidden")))
+@@ -428,53 +563,54 @@ AC_ARG_ENABLE(debug,
+   if test "$enable_debug" = "yes"; then
+     AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
+   fi)
+ AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes")
+ 
+ AC_ARG_ENABLE(structs,
+ [  --disable-structs       omit code for struct support],
+   if test "$enable_structs" = "no"; then
+-    AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.])
++    AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this if you do not want support for aggregate types.])
+   fi)
++AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes")
+ 
+ AC_ARG_ENABLE(raw-api,
+ [  --disable-raw-api       make the raw api unavailable],
+   if test "$enable_raw_api" = "no"; then
+-    AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.])
++    AC_DEFINE(FFI_NO_RAW_API, 1, [Define this if you do not want support for the raw API.])
+   fi)
+ 
+ AC_ARG_ENABLE(purify-safety,
+ [  --enable-purify-safety  purify-safe mode],
+   if test "$enable_purify_safety" = "yes"; then
+     AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.])
+   fi)
+ 
+-if test -n "$with_cross_host" &&
+-   test x"$with_cross_host" != x"no"; then
+-  toolexecdir='$(exec_prefix)/$(target_alias)'
+-  toolexeclibdir='$(toolexecdir)/lib'
++# These variables are only ever used when we cross-build to X86_WIN32.
++# And we only support this with GCC, so...
++if test "x$GCC" = "xyes"; then
++  if test -n "$with_cross_host" &&
++     test x"$with_cross_host" != x"no"; then
++    toolexecdir='$(exec_prefix)/$(target_alias)'
++    toolexeclibdir='$(toolexecdir)/lib'
++  else
++    toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
++    toolexeclibdir='$(libdir)'
++  fi
++  multi_os_directory=`$CC -print-multi-os-directory`
++  case $multi_os_directory in
++    .) ;; # Avoid trailing /.
++    ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
++  esac
++  AC_SUBST(toolexecdir)
+ else
+-  toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
+   toolexeclibdir='$(libdir)'
+ fi
+-multi_os_directory=`$CC -print-multi-os-directory`
+-case $multi_os_directory in
+-  .) ;; # Avoid trailing /.
+-  *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+-esac
+-AC_SUBST(toolexecdir)
+ AC_SUBST(toolexeclibdir)
+ 
+-if test "${multilib}" = "yes"; then
+-  multilib_arg="--enable-multilib"
+-else
+-  multilib_arg=
+-fi
+-
+ AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
+ AC_CONFIG_COMMANDS(src, [
+ test -d src || mkdir src
+ test -d src/$TARGETDIR || mkdir src/$TARGETDIR
+ ], [TARGETDIR="$TARGETDIR"])
+ 
+ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
+ 
+diff --git a/js/src/ctypes/libffi/configure.host b/js/src/ctypes/libffi/configure.host
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/configure.host
++++ /dev/null
+@@ -1,11 +0,0 @@
+-# configure.host
+-#
+-# This shell script handles all host based configuration for libffi.
+-# 
+-
+-# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+-case "${host}" in
+-  frv*-elf)
+-    LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
+-    ;;
+-esac
+diff --git a/js/src/ctypes/libffi/depcomp b/js/src/ctypes/libffi/depcomp
+--- a/js/src/ctypes/libffi/depcomp
++++ b/js/src/ctypes/libffi/depcomp
+@@ -1,95 +1,178 @@
+ #! /bin/sh
+ # depcomp - compile a program generating dependencies as side-effects
+ 
+-scriptversion=2006-10-15.18
++scriptversion=2013-05-30.07; # UTC
+ 
+-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
+-# Foundation, Inc.
++# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+ 
+ case $1 in
+   '')
+-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+-     exit 1;
+-     ;;
++    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
++    exit 1;
++    ;;
+   -h | --h*)
+     cat <<\EOF
+ Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+ 
+ Run PROGRAMS ARGS to compile a file, generating dependencies
+ as side-effects.
+ 
+ Environment variables:
+   depmode     Dependency tracking mode.
+-  source      Source file read by `PROGRAMS ARGS'.
+-  object      Object file output by `PROGRAMS ARGS'.
++  source      Source file read by 'PROGRAMS ARGS'.
++  object      Object file output by 'PROGRAMS ARGS'.
+   DEPDIR      directory where to store dependencies.
+   depfile     Dependency file to output.
+-  tmpdepfile  Temporary file to use when outputing dependencies.
++  tmpdepfile  Temporary file to use when outputting dependencies.
+   libtool     Whether libtool is used (yes/no).
+ 
+ Report bugs to <bug-automake@gnu.org>.
+ EOF
+     exit $?
+     ;;
+   -v | --v*)
+     echo "depcomp $scriptversion"
+     exit $?
+     ;;
+ esac
+ 
++# Get the directory component of the given path, and save it in the
++# global variables '$dir'.  Note that this directory component will
++# be either empty or ending with a '/' character.  This is deliberate.
++set_dir_from ()
++{
++  case $1 in
++    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
++      *) dir=;;
++  esac
++}
++
++# Get the suffix-stripped basename of the given path, and save it the
++# global variable '$base'.
++set_base_from ()
++{
++  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
++}
++
++# If no dependency file was actually created by the compiler invocation,
++# we still have to create a dummy depfile, to avoid errors with the
++# Makefile "include basename.Plo" scheme.
++make_dummy_depfile ()
++{
++  echo "#dummy" > "$depfile"
++}
++
++# Factor out some common post-processing of the generated depfile.
++# Requires the auxiliary global variable '$tmpdepfile' to be set.
++aix_post_process_depfile ()
++{
++  # If the compiler actually managed to produce a dependency file,
++  # post-process it.
++  if test -f "$tmpdepfile"; then
++    # Each line is of the form 'foo.o: dependency.h'.
++    # Do two passes, one to just change these to
++    #   $object: dependency.h
++    # and one to simply output
++    #   dependency.h:
++    # which is needed to avoid the deleted-header problem.
++    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
++      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
++    } > "$depfile"
++    rm -f "$tmpdepfile"
++  else
++    make_dummy_depfile
++  fi
++}
++
++# A tabulation character.
++tab='	'
++# A newline character.
++nl='
++'
++# Character ranges might be problematic outside the C locale.
++# These definitions help.
++upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
++lower=abcdefghijklmnopqrstuvwxyz
++digits=0123456789
++alpha=${upper}${lower}
++
+ if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+   echo "depcomp: Variables source, object and depmode must be set" 1>&2
+   exit 1
+ fi
+ 
+ # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+ depfile=${depfile-`echo "$object" |
+   sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+ 
+ rm -f "$tmpdepfile"
+ 
++# Avoid interferences from the environment.
++gccflag= dashmflag=
++
+ # Some modes work just like other modes, but use different flags.  We
+ # parameterize here, but still list the modes in the big case below,
+ # to make depend.m4 easier to write.  Note that we *cannot* use a case
+ # here, because this file can only contain one case statement.
+ if test "$depmode" = hp; then
+   # HP compiler uses -M and no extra arg.
+   gccflag=-M
+   depmode=gcc
+ fi
+ 
+ if test "$depmode" = dashXmstdout; then
+-   # This is just like dashmstdout with a different argument.
+-   dashmflag=-xM
+-   depmode=dashmstdout
++  # This is just like dashmstdout with a different argument.
++  dashmflag=-xM
++  depmode=dashmstdout
++fi
++
++cygpath_u="cygpath -u -f -"
++if test "$depmode" = msvcmsys; then
++  # This is just like msvisualcpp but w/o cygpath translation.
++  # Just convert the backslash-escaped backslashes to single forward
++  # slashes to satisfy depend.m4
++  cygpath_u='sed s,\\\\,/,g'
++  depmode=msvisualcpp
++fi
++
++if test "$depmode" = msvc7msys; then
++  # This is just like msvc7 but w/o cygpath translation.
++  # Just convert the backslash-escaped backslashes to single forward
++  # slashes to satisfy depend.m4
++  cygpath_u='sed s,\\\\,/,g'
++  depmode=msvc7
++fi
++
++if test "$depmode" = xlc; then
++  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
++  gccflag=-qmakedep=gcc,-MF
++  depmode=gcc
+ fi
+ 
+ case "$depmode" in
+ gcc3)
+ ## gcc 3 implements dependency tracking that does exactly what
+ ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+ ## it if -MD -MP comes after the -MF stuff.  Hmm.
+ ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+@@ -102,64 +185,67 @@ gcc3)
+     -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+     *)  set fnord "$@" "$arg" ;;
+     esac
+     shift # fnord
+     shift # $arg
+   done
+   "$@"
+   stat=$?
+-  if test $stat -eq 0; then :
+-  else
++  if test $stat -ne 0; then
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   mv "$tmpdepfile" "$depfile"
+   ;;
+ 
+ gcc)
++## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
++## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
++## (see the conditional assignment to $gccflag above).
+ ## There are various ways to get dependency output from gcc.  Here's
+ ## why we pick this rather obscure method:
+ ## - Don't want to use -MD because we'd like the dependencies to end
+ ##   up in a subdir.  Having to rename by hand is ugly.
+ ##   (We might end up doing this anyway to support other compilers.)
+ ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+-##   -MM, not -M (despite what the docs say).
++##   -MM, not -M (despite what the docs say).  Also, it might not be
++##   supported by the other compilers which use the 'gcc' depmode.
+ ## - Using -M directly means running the compiler twice (even worse
+ ##   than renaming).
+   if test -z "$gccflag"; then
+     gccflag=-MD,
+   fi
+   "$@" -Wp,"$gccflag$tmpdepfile"
+   stat=$?
+-  if test $stat -eq 0; then :
+-  else
++  if test $stat -ne 0; then
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+-## The second -e expression handles DOS-style file names with drive letters.
++  # The second -e expression handles DOS-style file names with drive
++  # letters.
+   sed -e 's/^[^:]*: / /' \
+       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+-## This next piece of magic avoids the `deleted header file' problem.
++## This next piece of magic avoids the "deleted header file" problem.
+ ## The problem is that when a header file which appears in a .P file
+ ## is deleted, the dependency causes make to die (because there is
+ ## typically no way to rebuild the header).  We avoid this by adding
+ ## dummy dependencies for each header file.  Too bad gcc doesn't do
+ ## this for us directly.
+-  tr ' ' '
+-' < "$tmpdepfile" |
+-## Some versions of gcc put a space before the `:'.  On the theory
++## Some versions of gcc put a space before the ':'.  On the theory
+ ## that the space means something, we add a space to the output as
+-## well.
++## well.  hp depmode also adds that space, but also prefixes the VPATH
++## to the object.  Take care to not repeat it in the output.
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
+ ## correctly.  Breaking it into two sed invocations is a workaround.
+-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++  tr ' ' "$nl" < "$tmpdepfile" \
++    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
++    | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ hp)
+   # This case exists only to let depend.m4 do its work.  It works by
+   # looking at the text of this script.  This case will never be run,
+   # since it is checked for above.
+   exit 1
+@@ -167,250 +253,339 @@ hp)
+ 
+ sgi)
+   if test "$libtool" = yes; then
+     "$@" "-Wp,-MDupdate,$tmpdepfile"
+   else
+     "$@" -MDupdate "$tmpdepfile"
+   fi
+   stat=$?
+-  if test $stat -eq 0; then :
+-  else
++  if test $stat -ne 0; then
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+ 
+   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+     echo "$object : \\" > "$depfile"
+-
+     # Clip off the initial element (the dependent).  Don't try to be
+     # clever and replace this with sed code, as IRIX sed won't handle
+     # lines with more than a fixed number of characters (4096 in
+     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+-    # the IRIX cc adds comments like `#:fec' to the end of the
++    # the IRIX cc adds comments like '#:fec' to the end of the
+     # dependency line.
+-    tr ' ' '
+-' < "$tmpdepfile" \
+-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+-    tr '
+-' ' ' >> $depfile
+-    echo >> $depfile
+-
++    tr ' ' "$nl" < "$tmpdepfile" \
++      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
++      | tr "$nl" ' ' >> "$depfile"
++    echo >> "$depfile"
+     # The second pass generates a dummy entry for each header file.
+-    tr ' ' '
+-' < "$tmpdepfile" \
+-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+-   >> $depfile
++    tr ' ' "$nl" < "$tmpdepfile" \
++      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
++      >> "$depfile"
+   else
+-    # The sourcefile does not contain any dependencies, so just
+-    # store a dummy comment line, to avoid errors with the Makefile
+-    # "include basename.Plo" scheme.
+-    echo "#dummy" > "$depfile"
++    make_dummy_depfile
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+ 
++xlc)
++  # This case exists only to let depend.m4 do its work.  It works by
++  # looking at the text of this script.  This case will never be run,
++  # since it is checked for above.
++  exit 1
++  ;;
++
+ aix)
+   # The C for AIX Compiler uses -M and outputs the dependencies
+   # in a .u file.  In older versions, this file always lives in the
+-  # current directory.  Also, the AIX compiler puts `$object:' at the
++  # current directory.  Also, the AIX compiler puts '$object:' at the
+   # start of each line; $object doesn't have directory information.
+   # Version 6 uses the directory in both cases.
+-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+-  tmpdepfile="$stripped.u"
++  set_dir_from "$object"
++  set_base_from "$object"
+   if test "$libtool" = yes; then
++    tmpdepfile1=$dir$base.u
++    tmpdepfile2=$base.u
++    tmpdepfile3=$dir.libs/$base.u
+     "$@" -Wc,-M
+   else
++    tmpdepfile1=$dir$base.u
++    tmpdepfile2=$dir$base.u
++    tmpdepfile3=$dir$base.u
+     "$@" -M
+   fi
+   stat=$?
+-
+-  if test -f "$tmpdepfile"; then :
+-  else
+-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+-    tmpdepfile="$stripped.u"
++  if test $stat -ne 0; then
++    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++    exit $stat
+   fi
+ 
+-  if test $stat -eq 0; then :
+-  else
++  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++  do
++    test -f "$tmpdepfile" && break
++  done
++  aix_post_process_depfile
++  ;;
++
++tcc)
++  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
++  # FIXME: That version still under development at the moment of writing.
++  #        Make that this statement remains true also for stable, released
++  #        versions.
++  # It will wrap lines (doesn't matter whether long or short) with a
++  # trailing '\', as in:
++  #
++  #   foo.o : \
++  #    foo.c \
++  #    foo.h \
++  #
++  # It will put a trailing '\' even on the last line, and will use leading
++  # spaces rather than leading tabs (at least since its commit 0394caf7
++  # "Emit spaces for -MD").
++  "$@" -MD -MF "$tmpdepfile"
++  stat=$?
++  if test $stat -ne 0; then
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+-
+-  if test -f "$tmpdepfile"; then
+-    outname="$stripped.o"
+-    # Each line is of the form `foo.o: dependent.h'.
+-    # Do two passes, one to just change these to
+-    # `$object: dependent.h' and one to simply `dependent.h:'.
+-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+-  else
+-    # The sourcefile does not contain any dependencies, so just
+-    # store a dummy comment line, to avoid errors with the Makefile
+-    # "include basename.Plo" scheme.
+-    echo "#dummy" > "$depfile"
+-  fi
++  rm -f "$depfile"
++  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
++  # We have to change lines of the first kind to '$object: \'.
++  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
++  # And for each line of the second kind, we have to emit a 'dep.h:'
++  # dummy dependency, to avoid the deleted-header problem.
++  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+-icc)
+-  # Intel's C compiler understands `-MD -MF file'.  However on
+-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+-  # ICC 7.0 will fill foo.d with something like
+-  #    foo.o: sub/foo.c
+-  #    foo.o: sub/foo.h
+-  # which is wrong.  We want:
+-  #    sub/foo.o: sub/foo.c
+-  #    sub/foo.o: sub/foo.h
+-  #    sub/foo.c:
+-  #    sub/foo.h:
+-  # ICC 7.1 will output
++## The order of this option in the case statement is important, since the
++## shell code in configure will try each of these formats in the order
++## listed in this file.  A plain '-MD' option would be understood by many
++## compilers, so we must ensure this comes after the gcc and icc options.
++pgcc)
++  # Portland's C compiler understands '-MD'.
++  # Will always output deps to 'file.d' where file is the root name of the
++  # source file under compilation, even if file resides in a subdirectory.
++  # The object file name does not affect the name of the '.d' file.
++  # pgcc 10.2 will output
+   #    foo.o: sub/foo.c sub/foo.h
+-  # and will wrap long lines using \ :
++  # and will wrap long lines using '\' :
+   #    foo.o: sub/foo.c ... \
+   #     sub/foo.h ... \
+   #     ...
++  set_dir_from "$object"
++  # Use the source, not the object, to determine the base name, since
++  # that's sadly what pgcc will do too.
++  set_base_from "$source"
++  tmpdepfile=$base.d
+ 
+-  "$@" -MD -MF "$tmpdepfile"
+-  stat=$?
+-  if test $stat -eq 0; then :
+-  else
++  # For projects that build the same source file twice into different object
++  # files, the pgcc approach of using the *source* file root name can cause
++  # problems in parallel builds.  Use a locking strategy to avoid stomping on
++  # the same $tmpdepfile.
++  lockdir=$base.d-lock
++  trap "
++    echo '$0: caught signal, cleaning up...' >&2
++    rmdir '$lockdir'
++    exit 1
++  " 1 2 13 15
++  numtries=100
++  i=$numtries
++  while test $i -gt 0; do
++    # mkdir is a portable test-and-set.
++    if mkdir "$lockdir" 2>/dev/null; then
++      # This process acquired the lock.
++      "$@" -MD
++      stat=$?
++      # Release the lock.
++      rmdir "$lockdir"
++      break
++    else
++      # If the lock is being held by a different process, wait
++      # until the winning process is done or we timeout.
++      while test -d "$lockdir" && test $i -gt 0; do
++        sleep 1
++        i=`expr $i - 1`
++      done
++    fi
++    i=`expr $i - 1`
++  done
++  trap - 1 2 13 15
++  if test $i -le 0; then
++    echo "$0: failed to acquire lock after $numtries attempts" >&2
++    echo "$0: check lockdir '$lockdir'" >&2
++    exit 1
++  fi
++
++  if test $stat -ne 0; then
+     rm -f "$tmpdepfile"
+     exit $stat
+   fi
+   rm -f "$depfile"
+   # Each line is of the form `foo.o: dependent.h',
+   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+   # Do two passes, one to just change these to
+   # `$object: dependent.h' and one to simply `dependent.h:'.
+   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+   # Some versions of the HPUX 10.20 sed can't process this invocation
+   # correctly.  Breaking it into two sed invocations is a workaround.
+-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+-    sed -e 's/$/ :/' >> "$depfile"
++  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
++    | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ hp2)
+   # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+   # compilers, which have integrated preprocessors.  The correct option
+   # to use with these is +Maked; it writes dependencies to a file named
+   # 'foo.d', which lands next to the object file, wherever that
+   # happens to be.
+   # Much of this is similar to the tru64 case; see comments there.
+-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+-  test "x$dir" = "x$object" && dir=
+-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++  set_dir_from  "$object"
++  set_base_from "$object"
+   if test "$libtool" = yes; then
+     tmpdepfile1=$dir$base.d
+     tmpdepfile2=$dir.libs/$base.d
+     "$@" -Wc,+Maked
+   else
+     tmpdepfile1=$dir$base.d
+     tmpdepfile2=$dir$base.d
+     "$@" +Maked
+   fi
+   stat=$?
+-  if test $stat -eq 0; then :
+-  else
++  if test $stat -ne 0; then
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+ 
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+-    # Add `dependent.h:' lines.
+-    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
++    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
++    # Add 'dependent.h:' lines.
++    sed -ne '2,${
++               s/^ *//
++               s/ \\*$//
++               s/$/:/
++               p
++             }' "$tmpdepfile" >> "$depfile"
+   else
+-    echo "#dummy" > "$depfile"
++    make_dummy_depfile
+   fi
+   rm -f "$tmpdepfile" "$tmpdepfile2"
+   ;;
+ 
+ tru64)
+-   # The Tru64 compiler uses -MD to generate dependencies as a side
+-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+-   # dependencies in `foo.d' instead, so we check for that too.
+-   # Subdirectories are respected.
+-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+-   test "x$dir" = "x$object" && dir=
+-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++  # The Tru64 compiler uses -MD to generate dependencies as a side
++  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
++  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
++  # dependencies in 'foo.d' instead, so we check for that too.
++  # Subdirectories are respected.
++  set_dir_from  "$object"
++  set_base_from "$object"
+ 
+-   if test "$libtool" = yes; then
+-      # With Tru64 cc, shared objects can also be used to make a
+-      # static library.  This mechanism is used in libtool 1.4 series to
+-      # handle both shared and static libraries in a single compilation.
+-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+-      #
+-      # With libtool 1.5 this exception was removed, and libtool now
+-      # generates 2 separate objects for the 2 libraries.  These two
+-      # compilations output dependencies in $dir.libs/$base.o.d and
+-      # in $dir$base.o.d.  We have to check for both files, because
+-      # one of the two compilations can be disabled.  We should prefer
+-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+-      # automatically cleaned when .libs/ is deleted, while ignoring
+-      # the former would cause a distcleancheck panic.
+-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+-      "$@" -Wc,-MD
+-   else
+-      tmpdepfile1=$dir$base.o.d
+-      tmpdepfile2=$dir$base.d
+-      tmpdepfile3=$dir$base.d
+-      tmpdepfile4=$dir$base.d
+-      "$@" -MD
+-   fi
++  if test "$libtool" = yes; then
++    # Libtool generates 2 separate objects for the 2 libraries.  These
++    # two compilations output dependencies in $dir.libs/$base.o.d and
++    # in $dir$base.o.d.  We have to check for both files, because
++    # one of the two compilations can be disabled.  We should prefer
++    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
++    # automatically cleaned when .libs/ is deleted, while ignoring
++    # the former would cause a distcleancheck panic.
++    tmpdepfile1=$dir$base.o.d          # libtool 1.5
++    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
++    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
++    "$@" -Wc,-MD
++  else
++    tmpdepfile1=$dir$base.d
++    tmpdepfile2=$dir$base.d
++    tmpdepfile3=$dir$base.d
++    "$@" -MD
++  fi
+ 
+-   stat=$?
+-   if test $stat -eq 0; then :
+-   else
+-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+-      exit $stat
+-   fi
++  stat=$?
++  if test $stat -ne 0; then
++    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++    exit $stat
++  fi
+ 
+-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+-   do
+-     test -f "$tmpdepfile" && break
+-   done
+-   if test -f "$tmpdepfile"; then
+-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+-      # That's a tab and a space in the [].
+-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+-   else
+-      echo "#dummy" > "$depfile"
+-   fi
+-   rm -f "$tmpdepfile"
+-   ;;
++  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++  do
++    test -f "$tmpdepfile" && break
++  done
++  # Same post-processing that is required for AIX mode.
++  aix_post_process_depfile
++  ;;
++
++msvc7)
++  if test "$libtool" = yes; then
++    showIncludes=-Wc,-showIncludes
++  else
++    showIncludes=-showIncludes
++  fi
++  "$@" $showIncludes > "$tmpdepfile"
++  stat=$?
++  grep -v '^Note: including file: ' "$tmpdepfile"
++  if test $stat -ne 0; then
++    rm -f "$tmpdepfile"
++    exit $stat
++  fi
++  rm -f "$depfile"
++  echo "$object : \\" > "$depfile"
++  # The first sed program below extracts the file names and escapes
++  # backslashes for cygpath.  The second sed program outputs the file
++  # name when reading, but also accumulates all include files in the
++  # hold buffer in order to output them again at the end.  This only
++  # works with sed implementations that can handle large buffers.
++  sed < "$tmpdepfile" -n '
++/^Note: including file:  *\(.*\)/ {
++  s//\1/
++  s/\\/\\\\/g
++  p
++}' | $cygpath_u | sort -u | sed -n '
++s/ /\\ /g
++s/\(.*\)/'"$tab"'\1 \\/p
++s/.\(.*\) \\/\1:/
++H
++$ {
++  s/.*/'"$tab"'/
++  G
++  p
++}' >> "$depfile"
++  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
++  rm -f "$tmpdepfile"
++  ;;
++
++msvc7msys)
++  # This case exists only to let depend.m4 do its work.  It works by
++  # looking at the text of this script.  This case will never be run,
++  # since it is checked for above.
++  exit 1
++  ;;
+ 
+ #nosideeffect)
+   # This comment above is used by automake to tell side-effect
+   # dependency tracking mechanisms from slower ones.
+ 
+ dashmstdout)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the preprocessed file to stdout, regardless of -o.
+   "$@" || exit $?
+ 
+   # Remove the call to Libtool.
+   if test "$libtool" = yes; then
+-    while test $1 != '--mode=compile'; do
++    while test "X$1" != 'X--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+ 
+-  # Remove `-o $object'.
++  # Remove '-o $object'.
+   IFS=" "
+   for arg
+   do
+     case $arg in
+     -o)
+       shift
+       ;;
+     $object)
+@@ -420,93 +595,103 @@ dashmstdout)
+       set fnord "$@" "$arg"
+       shift # fnord
+       shift # $arg
+       ;;
+     esac
+   done
+ 
+   test -z "$dashmflag" && dashmflag=-M
+-  # Require at least two characters before searching for `:'
++  # Require at least two characters before searching for ':'
+   # in the target name.  This is to cope with DOS-style filenames:
+-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
++  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+   "$@" $dashmflag |
+-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
++    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+   rm -f "$depfile"
+   cat < "$tmpdepfile" > "$depfile"
+-  tr ' ' '
+-' < "$tmpdepfile" | \
+-## Some versions of the HPUX 10.20 sed can't process this invocation
+-## correctly.  Breaking it into two sed invocations is a workaround.
+-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++  # Some versions of the HPUX 10.20 sed can't process this sed invocation
++  # correctly.  Breaking it into two sed invocations is a workaround.
++  tr ' ' "$nl" < "$tmpdepfile" \
++    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
++    | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ dashXmstdout)
+   # This case only exists to satisfy depend.m4.  It is never actually
+   # run, as this mode is specially recognized in the preamble.
+   exit 1
+   ;;
+ 
+ makedepend)
+   "$@" || exit $?
+   # Remove any Libtool call
+   if test "$libtool" = yes; then
+-    while test $1 != '--mode=compile'; do
++    while test "X$1" != 'X--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+   # X makedepend
+   shift
+-  cleared=no
+-  for arg in "$@"; do
++  cleared=no eat=no
++  for arg
++  do
+     case $cleared in
+     no)
+       set ""; shift
+       cleared=yes ;;
+     esac
++    if test $eat = yes; then
++      eat=no
++      continue
++    fi
+     case "$arg" in
+     -D*|-I*)
+       set fnord "$@" "$arg"; shift ;;
+     # Strip any option that makedepend may not understand.  Remove
+     # the object too, otherwise makedepend will parse it as a source file.
++    -arch)
++      eat=yes ;;
+     -*|$object)
+       ;;
+     *)
+       set fnord "$@" "$arg"; shift ;;
+     esac
+   done
+-  obj_suffix="`echo $object | sed 's/^.*\././'`"
++  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+   touch "$tmpdepfile"
+   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+   rm -f "$depfile"
+-  cat < "$tmpdepfile" > "$depfile"
+-  sed '1,2d' "$tmpdepfile" | tr ' ' '
+-' | \
+-## Some versions of the HPUX 10.20 sed can't process this invocation
+-## correctly.  Breaking it into two sed invocations is a workaround.
+-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++  # makedepend may prepend the VPATH from the source file name to the object.
++  # No need to regex-escape $object, excess matching of '.' is harmless.
++  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
++  # Some versions of the HPUX 10.20 sed can't process the last invocation
++  # correctly.  Breaking it into two sed invocations is a workaround.
++  sed '1,2d' "$tmpdepfile" \
++    | tr ' ' "$nl" \
++    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
++    | sed -e 's/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile" "$tmpdepfile".bak
+   ;;
+ 
+ cpp)
+   # Important note: in order to support this mode, a compiler *must*
+   # always write the preprocessed file to stdout.
+   "$@" || exit $?
+ 
+   # Remove the call to Libtool.
+   if test "$libtool" = yes; then
+-    while test $1 != '--mode=compile'; do
++    while test "X$1" != 'X--mode=compile'; do
+       shift
+     done
+     shift
+   fi
+ 
+-  # Remove `-o $object'.
++  # Remove '-o $object'.
+   IFS=" "
+   for arg
+   do
+     case $arg in
+     -o)
+       shift
+       ;;
+     $object)
+@@ -515,58 +700,79 @@ cpp)
+     *)
+       set fnord "$@" "$arg"
+       shift # fnord
+       shift # $arg
+       ;;
+     esac
+   done
+ 
+-  "$@" -E |
+-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+-    sed '$ s: \\$::' > "$tmpdepfile"
++  "$@" -E \
++    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
++             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
++    | sed '$ s: \\$::' > "$tmpdepfile"
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+   cat < "$tmpdepfile" >> "$depfile"
+   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
+ msvisualcpp)
+   # Important note: in order to support this mode, a compiler *must*
+-  # always write the preprocessed file to stdout, regardless of -o,
+-  # because we must use -o when running libtool.
++  # always write the preprocessed file to stdout.
+   "$@" || exit $?
++
++  # Remove the call to Libtool.
++  if test "$libtool" = yes; then
++    while test "X$1" != 'X--mode=compile'; do
++      shift
++    done
++    shift
++  fi
++
+   IFS=" "
+   for arg
+   do
+     case "$arg" in
++    -o)
++      shift
++      ;;
++    $object)
++      shift
++      ;;
+     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+-	set fnord "$@"
+-	shift
+-	shift
+-	;;
++        set fnord "$@"
++        shift
++        shift
++        ;;
+     *)
+-	set fnord "$@" "$arg"
+-	shift
+-	shift
+-	;;
++        set fnord "$@" "$arg"
++        shift
++        shift
++        ;;
+     esac
+   done
+-  "$@" -E |
+-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
++  "$@" -E 2>/dev/null |
++  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+   rm -f "$depfile"
+   echo "$object : \\" > "$depfile"
+-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+-  echo "	" >> "$depfile"
+-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
++  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
++  echo "$tab" >> "$depfile"
++  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+   rm -f "$tmpdepfile"
+   ;;
+ 
++msvcmsys)
++  # This case exists only to let depend.m4 do its work.  It works by
++  # looking at the text of this script.  This case will never be run,
++  # since it is checked for above.
++  exit 1
++  ;;
++
+ none)
+   exec "$@"
+   ;;
+ 
+ *)
+   echo "Unknown depmode $depmode" 1>&2
+   exit 1
+   ;;
+@@ -575,10 +781,11 @@ esac
+ exit 0
+ 
+ # Local Variables:
+ # mode: shell-script
+ # sh-indentation: 2
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff --git a/js/src/ctypes/libffi/doc/stamp-vti b/js/src/ctypes/libffi/doc/stamp-vti
+--- a/js/src/ctypes/libffi/doc/stamp-vti
++++ b/js/src/ctypes/libffi/doc/stamp-vti
+@@ -1,4 +1,4 @@
+-@set UPDATED 14 February 2008
+-@set UPDATED-MONTH February 2008
+-@set EDITION 3.0.8
+-@set VERSION 3.0.8
++@set UPDATED 25 March 2014
++@set UPDATED-MONTH March 2014
++@set EDITION 3.1-rc1
++@set VERSION 3.1-rc1
+--- a/js/src/ctypes/libffi/fficonfig.h.in
++++ b/js/src/ctypes/libffi/fficonfig.h.in
+@@ -12,23 +12,29 @@
+ #undef C_ALLOCA
+ 
+ /* Define to the flags needed for the .section .eh_frame directive. */
+ #undef EH_FRAME_FLAGS
+ 
+ /* Define this if you want extra debugging. */
+ #undef FFI_DEBUG
+ 
++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */
++#undef FFI_EXEC_TRAMPOLINE_TABLE
++
++/* Define this if you want to enable pax emulated trampolines */
++#undef FFI_MMAP_EXEC_EMUTRAMP_PAX
++
+ /* Cannot use malloc on this target, so, we revert to alternative means */
+ #undef FFI_MMAP_EXEC_WRIT
+ 
+-/* Define this is you do not want support for the raw API. */
++/* Define this if you do not want support for the raw API. */
+ #undef FFI_NO_RAW_API
+ 
+-/* Define this is you do not want support for aggregate types. */
++/* Define this if you do not want support for aggregate types. */
+ #undef FFI_NO_STRUCTS
+ 
+ /* Define to 1 if you have `alloca', as a function or macro. */
+ #undef HAVE_ALLOCA
+ 
+ /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+    */
+ #undef HAVE_ALLOCA_H
+@@ -62,16 +68,19 @@
+ #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
+ 
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+ 
+ /* Define if you have the long double type and it is bigger than a double */
+ #undef HAVE_LONG_DOUBLE
+ 
++/* Define if you support more than one size of the long double type */
++#undef HAVE_LONG_DOUBLE_VARIANT
++
+ /* Define to 1 if you have the `memcpy' function. */
+ #undef HAVE_MEMCPY
+ 
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+ 
+ /* Define to 1 if you have the `mmap' function. */
+ #undef HAVE_MMAP
+@@ -141,27 +150,33 @@
+ #undef PACKAGE_VERSION
+ 
+ /* The size of `double', as computed by sizeof. */
+ #undef SIZEOF_DOUBLE
+ 
+ /* The size of `long double', as computed by sizeof. */
+ #undef SIZEOF_LONG_DOUBLE
+ 
++/* The size of `size_t', as computed by sizeof. */
++#undef SIZEOF_SIZE_T
++
+ /* If using the C implementation of alloca, define if you know the
+    direction of stack growth for your system; otherwise it will be
+    automatically deduced at runtime.
+ 	STACK_DIRECTION > 0 => grows toward higher addresses
+ 	STACK_DIRECTION < 0 => grows toward lower addresses
+ 	STACK_DIRECTION = 0 => direction of growth unknown */
+ #undef STACK_DIRECTION
+ 
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+ 
++/* Define if symbols are underscored. */
++#undef SYMBOL_UNDERSCORE
++
+ /* Define this if you are using Purify and want to suppress spurious messages.
+    */
+ #undef USING_PURIFY
+ 
+ /* Version number of package */
+ #undef VERSION
+ 
+ /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+@@ -171,16 +186,19 @@
+ #  define WORDS_BIGENDIAN 1
+ # endif
+ #else
+ # ifndef WORDS_BIGENDIAN
+ #  undef WORDS_BIGENDIAN
+ # endif
+ #endif
+ 
++/* Define to `unsigned int' if <sys/types.h> does not define. */
++#undef size_t
++
+ 
+ #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
+ #ifdef LIBFFI_ASM
+ #define FFI_HIDDEN(name) .hidden name
+ #else
+ #define FFI_HIDDEN __attribute__ ((visibility ("hidden")))
+ #endif
+ #else
+diff --git a/js/src/ctypes/libffi/generate-darwin-source-and-headers.py b/js/src/ctypes/libffi/generate-darwin-source-and-headers.py
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/generate-darwin-source-and-headers.py
+@@ -0,0 +1,209 @@
++#!/usr/bin/env python
++import subprocess
++import os
++import errno
++import collections
++import glob
++import argparse
++
++class Platform(object):
++    pass
++
++class simulator_platform(Platform):
++    directory = 'darwin_ios'
++    sdk = 'iphonesimulator'
++    arch = 'i386'
++    triple = 'i386-apple-darwin11'
++    version_min = '-miphoneos-version-min=5.1.1'
++
++    prefix = "#ifdef __i386__\n\n"
++    suffix = "\n\n#endif"
++    src_dir = 'x86'
++    src_files = ['darwin.S', 'win32.S', 'ffi.c']
++
++
++class simulator64_platform(Platform):
++    directory = 'darwin_ios'
++    sdk = 'iphonesimulator'
++    arch = 'x86_64'
++    triple = 'x86_64-apple-darwin13'
++    version_min = '-miphoneos-version-min=7.0'
++
++    prefix = "#ifdef __x86_64__\n\n"
++    suffix = "\n\n#endif"
++    src_dir = 'x86'
++    src_files = ['darwin64.S', 'ffi64.c']
++
++
++class device_platform(Platform):
++    directory = 'darwin_ios'
++    sdk = 'iphoneos'
++    arch = 'armv7'
++    triple = 'arm-apple-darwin11'
++    version_min = '-miphoneos-version-min=5.1.1'
++
++    prefix = "#ifdef __arm__\n\n"
++    suffix = "\n\n#endif"
++    src_dir = 'arm'
++    src_files = ['sysv.S', 'trampoline.S', 'ffi.c']
++
++
++class device64_platform(Platform):
++    directory = 'darwin_ios'
++    sdk = 'iphoneos'
++    arch = 'arm64'
++    triple = 'aarch64-apple-darwin13'
++    version_min = '-miphoneos-version-min=7.0'
++
++    prefix = "#ifdef __arm64__\n\n"
++    suffix = "\n\n#endif"
++    src_dir = 'aarch64'
++    src_files = ['sysv.S', 'ffi.c']
++
++
++class desktop32_platform(Platform):
++    directory = 'darwin_osx'
++    sdk = 'macosx'
++    arch = 'i386'
++    triple = 'i386-apple-darwin10'
++    version_min = '-mmacosx-version-min=10.6'
++    src_dir = 'x86'
++    src_files = ['darwin.S', 'win32.S', 'ffi.c']
++
++    prefix = "#ifdef __i386__\n\n"
++    suffix = "\n\n#endif"
++
++
++class desktop64_platform(Platform):
++    directory = 'darwin_osx'
++    sdk = 'macosx'
++    arch = 'x86_64'
++    triple = 'x86_64-apple-darwin10'
++    version_min = '-mmacosx-version-min=10.6'
++
++    prefix = "#ifdef __x86_64__\n\n"
++    suffix = "\n\n#endif"
++    src_dir = 'x86'
++    src_files = ['darwin64.S', 'ffi64.c']
++
++
++def mkdir_p(path):
++    try:
++        os.makedirs(path)
++    except OSError as exc:  # Python >2.5
++        if exc.errno == errno.EEXIST:
++            pass
++        else:
++            raise
++
++
++def move_file(src_dir, dst_dir, filename, file_suffix=None, prefix='', suffix=''):
++    mkdir_p(dst_dir)
++    out_filename = filename
++
++    if file_suffix:
++        split_name = os.path.splitext(filename)
++        out_filename = "%s_%s%s" % (split_name[0], file_suffix, split_name[1])
++
++    with open(os.path.join(src_dir, filename)) as in_file:
++        with open(os.path.join(dst_dir, out_filename), 'w') as out_file:
++            if prefix:
++                out_file.write(prefix)
++
++            out_file.write(in_file.read())
++
++            if suffix:
++                out_file.write(suffix)
++
++
++def list_files(src_dir, pattern=None, filelist=None):
++    if pattern: filelist = glob.iglob(os.path.join(src_dir, pattern))
++    for file in filelist:
++        yield os.path.basename(file)
++
++
++def copy_files(src_dir, dst_dir, pattern=None, filelist=None, file_suffix=None, prefix=None, suffix=None):
++    for filename in list_files(src_dir, pattern=pattern, filelist=filelist):
++        move_file(src_dir, dst_dir, filename, file_suffix=file_suffix, prefix=prefix, suffix=suffix)
++
++
++def copy_src_platform_files(platform):
++    src_dir = os.path.join('src', platform.src_dir)
++    dst_dir = os.path.join(platform.directory, 'src', platform.src_dir)
++    copy_files(src_dir, dst_dir, filelist=platform.src_files, file_suffix=platform.arch, prefix=platform.prefix, suffix=platform.suffix)
++
++
++def build_target(platform, platform_headers):
++    def xcrun_cmd(cmd):
++        return 'xcrun -sdk %s %s -arch %s' % (platform.sdk, cmd, platform.arch)
++
++    tag='%s-%s' % (platform.sdk, platform.arch)
++    build_dir = 'build_%s' % tag
++    mkdir_p(build_dir)
++    env = dict(CC=xcrun_cmd('clang'),
++               LD=xcrun_cmd('ld'),
++               CFLAGS='%s' % (platform.version_min))
++    working_dir = os.getcwd()
++    try:
++        os.chdir(build_dir)
++        subprocess.check_call(['../configure', '-host', platform.triple], env=env)
++    finally:
++        os.chdir(working_dir)
++
++    for src_dir in [build_dir, os.path.join(build_dir, 'include')]:
++        copy_files(src_dir,
++                   os.path.join(platform.directory, 'include'),
++                   pattern='*.h',
++                   file_suffix=platform.arch,
++                   prefix=platform.prefix,
++                   suffix=platform.suffix)
++
++        for filename in list_files(src_dir, pattern='*.h'):
++            platform_headers[filename].add((platform.prefix, platform.arch, platform.suffix))
++
++
++def make_tramp():
++    with open('src/arm/trampoline.S', 'w') as tramp_out:
++        p = subprocess.Popen(['bash', 'src/arm/gentramp.sh'], stdout=tramp_out)
++        p.wait()
++
++
++def generate_source_and_headers(generate_osx=True, generate_ios=True):
++    copy_files('src', 'darwin_common/src', pattern='*.c')
++    copy_files('include', 'darwin_common/include', pattern='*.h')
++
++    if generate_ios:
++        make_tramp()
++        copy_src_platform_files(simulator_platform)
++        copy_src_platform_files(simulator64_platform)
++        copy_src_platform_files(device_platform)
++        copy_src_platform_files(device64_platform)
++    if generate_osx:
++        copy_src_platform_files(desktop32_platform)
++        copy_src_platform_files(desktop64_platform)
++
++    platform_headers = collections.defaultdict(set)
++
++    if generate_ios:
++        build_target(simulator_platform, platform_headers)
++        build_target(simulator64_platform, platform_headers)
++        build_target(device_platform, platform_headers)
++        build_target(device64_platform, platform_headers)
++    if generate_osx:
++        build_target(desktop32_platform, platform_headers)
++        build_target(desktop64_platform, platform_headers)
++
++    mkdir_p('darwin_common/include')
++    for header_name, tag_tuples in platform_headers.iteritems():
++        basename, suffix = os.path.splitext(header_name)
++        with open(os.path.join('darwin_common/include', header_name), 'w') as header:
++            for tag_tuple in tag_tuples:
++                header.write('%s#include <%s_%s%s>\n%s\n' % (tag_tuple[0], basename, tag_tuple[1], suffix, tag_tuple[2]))
++
++if __name__ == '__main__':
++    parser = argparse.ArgumentParser()
++    parser.add_argument('--only-ios', action='store_true', default=False)
++    parser.add_argument('--only-osx', action='store_true', default=False)
++    args = parser.parse_args()
++
++    generate_source_and_headers(generate_osx=not args.only_ios, generate_ios=not args.only_osx)
+diff --git a/js/src/ctypes/libffi/include/Makefile.in b/js/src/ctypes/libffi/include/Makefile.in
+--- a/js/src/ctypes/libffi/include/Makefile.in
++++ b/js/src/ctypes/libffi/include/Makefile.in
+@@ -1,26 +1,70 @@
+-# Makefile.in generated by automake 1.11.1 from Makefile.am.
++# Makefile.in generated by automake 1.13.4 from Makefile.am.
+ # @configure_input@
+ 
+-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+-# Inc.
++# Copyright (C) 1994-2013 Free Software Foundation, Inc.
++
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ 
+ VPATH = @srcdir@
++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
++am__make_running_with_option = \
++  case $${target_option-} in \
++      ?) ;; \
++      *) echo "am__make_running_with_option: internal error: invalid" \
++              "target option '$${target_option-}' specified" >&2; \
++         exit 1;; \
++  esac; \
++  has_opt=no; \
++  sane_makeflags=$$MAKEFLAGS; \
++  if $(am__is_gnu_make); then \
++    sane_makeflags=$$MFLAGS; \
++  else \
++    case $$MAKEFLAGS in \
++      *\\[\ \	]*) \
++        bs=\\; \
++        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
++          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
++    esac; \
++  fi; \
++  skip_next=no; \
++  strip_trailopt () \
++  { \
++    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
++  }; \
++  for flg in $$sane_makeflags; do \
++    test $$skip_next = yes && { skip_next=no; continue; }; \
++    case $$flg in \
++      *=*|--*) continue;; \
++        -*I) strip_trailopt 'I'; skip_next=yes;; \
++      -*I?*) strip_trailopt 'I';; \
++        -*O) strip_trailopt 'O'; skip_next=yes;; \
++      -*O?*) strip_trailopt 'O';; \
++        -*l) strip_trailopt 'l'; skip_next=yes;; \
++      -*l?*) strip_trailopt 'l';; \
++      -[dEDm]) skip_next=yes;; \
++      -[JT]) skip_next=yes;; \
++    esac; \
++    case $$flg in \
++      *$$target_option*) has_opt=yes; break;; \
++    esac; \
++  done; \
++  test $$has_opt = yes
++am__make_dryrun = (target_option=n; $(am__make_running_with_option))
++am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -31,29 +75,58 @@ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = include
+-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ 	$(srcdir)/ffi.h.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
++am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \
++	$(top_srcdir)/m4/ax_append_flag.m4 \
++	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
++	$(top_srcdir)/m4/ax_cflags_warn_all.m4 \
++	$(top_srcdir)/m4/ax_check_compile_flag.m4 \
++	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
++	$(top_srcdir)/m4/ax_configure_args.m4 \
++	$(top_srcdir)/m4/ax_enable_builddir.m4 \
++	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
++	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
++	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
++	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
++	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/fficonfig.h
+ CONFIG_CLEAN_FILES = ffi.h ffitarget.h
+ CONFIG_CLEAN_VPATH_FILES =
++AM_V_P = $(am__v_P_@AM_V@)
++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
++am__v_P_0 = false
++am__v_P_1 = :
++AM_V_GEN = $(am__v_GEN_@AM_V@)
++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
++am__v_GEN_0 = @echo "  GEN     " $@;
++am__v_GEN_1 = 
++AM_V_at = $(am__v_at_@AM_V@)
++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
++am__v_at_0 = @
++am__v_at_1 = 
+ SOURCES =
+ DIST_SOURCES =
++am__can_run_installinfo = \
++  case $$AM_UPDATE_INFO_DIR in \
++    n|no|NO) false;; \
++    *) (install-info --version) >/dev/null 2>&1;; \
++  esac
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+     *) f=$$p;; \
+   esac;
+ am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+ am__install_max = 40
+ am__nobase_strip_setup = \
+@@ -65,24 +138,48 @@ am__nobase_list = $(am__nobase_strip_set
+   sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+   $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+     if (++n[$$2] == $(am__install_max)) \
+       { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+     END { for (dir in files) print dir, files[dir] }'
+ am__base_list = \
+   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__uninstall_files_from_dir = { \
++  test -z "$$files" \
++    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
++    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
++         $(am__cd) "$$dir" && rm -f $$files; }; \
++  }
+ am__installdirs = "$(DESTDIR)$(includesdir)"
+ HEADERS = $(nodist_includes_HEADERS)
++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
++# Read a list of newline-separated strings from the standard input,
++# and print each of them once, without duplicates.  Input order is
++# *not* preserved.
++am__uniquify_input = $(AWK) '\
++  BEGIN { nonempty = 0; } \
++  { items[$$0] = 1; nonempty = 1; } \
++  END { if (nonempty) { for (i in items) print i; }; } \
++'
++# Make sure the list of sources is unique.  This is necessary because,
++# e.g., the same source file might be shared among _SOURCES variables
++# for different programs/libraries.
++am__define_uniq_tagged_files = \
++  list='$(am__tagged_files)'; \
++  unique=`for i in $$list; do \
++    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++  done | $(am__uniquify_input)`
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMTAR = @AMTAR@
++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+ AM_LTLDFLAGS = @AM_LTLDFLAGS@
+ AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
+ AR = @AR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ CC = @CC@
+@@ -91,75 +188,82 @@ CCASDEPMODE = @CCASDEPMODE@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXEEXT = @EXEEXT@
++FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
+ FGREP = @FGREP@
+ GREP = @GREP@
+ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
++HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LD = @LD@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIPO = @LIPO@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+ OBJDUMP = @OBJDUMP@
+ OBJEXT = @OBJEXT@
+ OTOOL = @OTOOL@
+ OTOOL64 = @OTOOL64@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
++PRTDIAG = @PRTDIAG@
+ RANLIB = @RANLIB@
+ SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ TARGET = @TARGET@
+ TARGETDIR = @TARGETDIR@
+ VERSION = @VERSION@
+ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
++ax_enable_builddir_sed = @ax_enable_builddir_sed@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ builddir = @builddir@
+ datadir = @datadir@
+@@ -175,27 +279,27 @@ host_vendor = @host_vendor@
+ htmldir = @htmldir@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localedir = @localedir@
+ localstatedir = @localstatedir@
+-lt_ECHO = @lt_ECHO@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ oldincludedir = @oldincludedir@
+ pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ srcdir = @srcdir@
++sys_symbol_underscore = @sys_symbol_underscore@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
+@@ -245,83 +349,84 @@ ffi.h: $(top_builddir)/config.status $(s
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ install-nodist_includesHEADERS: $(nodist_includes_HEADERS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
+ 	@list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \
++	if test -n "$$list"; then \
++	  echo " $(MKDIR_P) '$(DESTDIR)$(includesdir)'"; \
++	  $(MKDIR_P) "$(DESTDIR)$(includesdir)" || exit 1; \
++	fi; \
+ 	for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  echo "$$d$$p"; \
+ 	done | $(am__base_list) | \
+ 	while read files; do \
+ 	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
+ 	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
+ 	done
+ 
+ uninstall-nodist_includesHEADERS:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \
+ 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(includesdir)" && rm -f $$files
++	dir='$(DESTDIR)$(includesdir)'; $(am__uninstall_files_from_dir)
+ 
+-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+-	unique=`for i in $$list; do \
+-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+-	  done | \
+-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+-	mkid -fID $$unique
+-tags: TAGS
++ID: $(am__tagged_files)
++	$(am__define_uniq_tagged_files); mkid -fID $$unique
++tags: tags-am
++TAGS: tags
+ 
+-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+-		$(TAGS_FILES) $(LISP)
++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ 	set x; \
+ 	here=`pwd`; \
+-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+-	unique=`for i in $$list; do \
+-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+-	  done | \
+-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	$(am__define_uniq_tagged_files); \
+ 	shift; \
+ 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ 	  test -n "$$unique" || unique=$$empty_fix; \
+ 	  if test $$# -gt 0; then \
+ 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	      "$$@" $$unique; \
+ 	  else \
+ 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ 	      $$unique; \
+ 	  fi; \
+ 	fi
+-ctags: CTAGS
+-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+-		$(TAGS_FILES) $(LISP)
+-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+-	unique=`for i in $$list; do \
+-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+-	  done | \
+-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++ctags: ctags-am
++
++CTAGS: ctags
++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
++	$(am__define_uniq_tagged_files); \
+ 	test -z "$(CTAGS_ARGS)$$unique" \
+ 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ 	     $$unique
+ 
+ GTAGS:
+ 	here=`$(am__cd) $(top_builddir) && pwd` \
+ 	  && $(am__cd) $(top_srcdir) \
+ 	  && gtags -i $(GTAGS_ARGS) "$$here"
++cscopelist: cscopelist-am
++
++cscopelist-am: $(am__tagged_files)
++	list='$(am__tagged_files)'; \
++	case "$(srcdir)" in \
++	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
++	  *) sdir=$(subdir)/$(srcdir) ;; \
++	esac; \
++	for i in $$list; do \
++	  if test -f "$$i"; then \
++	    echo "$(subdir)/$$i"; \
++	  else \
++	    echo "$$sdir/$$i"; \
++	  fi; \
++	done >> $(top_builddir)/cscope.files
+ 
+ distclean-tags:
+ 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ 
+ distdir: $(DISTFILES)
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	list='$(DISTFILES)'; \
+@@ -363,20 +468,25 @@ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ 	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+@@ -447,25 +557,26 @@ pdf-am:
+ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am: uninstall-nodist_includesHEADERS
+ 
+ .MAKE: install-am install-strip
+ 
+-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+-	clean-libtool ctags distclean distclean-generic \
+-	distclean-libtool distclean-tags distdir dvi dvi-am html \
+-	html-am info info-am install install-am install-data \
+-	install-data-am install-dvi install-dvi-am install-exec \
+-	install-exec-am install-html install-html-am install-info \
+-	install-info-am install-man install-nodist_includesHEADERS \
+-	install-pdf install-pdf-am install-ps install-ps-am \
+-	install-strip installcheck installcheck-am installdirs \
+-	maintainer-clean maintainer-clean-generic mostlyclean \
+-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+-	tags uninstall uninstall-am uninstall-nodist_includesHEADERS
++.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
++	clean-libtool cscopelist-am ctags ctags-am distclean \
++	distclean-generic distclean-libtool distclean-tags distdir dvi \
++	dvi-am html html-am info info-am install install-am \
++	install-data install-data-am install-dvi install-dvi-am \
++	install-exec install-exec-am install-html install-html-am \
++	install-info install-info-am install-man \
++	install-nodist_includesHEADERS install-pdf install-pdf-am \
++	install-ps install-ps-am install-strip installcheck \
++	installcheck-am installdirs maintainer-clean \
++	maintainer-clean-generic mostlyclean mostlyclean-generic \
++	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
++	uninstall-am uninstall-nodist_includesHEADERS
+ 
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff --git a/js/src/ctypes/libffi/include/ffi.h.in b/js/src/ctypes/libffi/include/ffi.h.in
+--- a/js/src/ctypes/libffi/include/ffi.h.in
++++ b/js/src/ctypes/libffi/include/ffi.h.in
+@@ -1,21 +1,22 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   libffi @VERSION@ - Copyright (c) 1996-2003, 2007, 2008  Red Hat, Inc.
++   libffi @VERSION@ - Copyright (c) 2011 Anthony Green
++                    - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
+ 
+-   Permission is hereby granted, free of charge, to any person obtaining
+-   a copy of this software and associated documentation files (the
+-   ``Software''), to deal in the Software without restriction, including
+-   without limitation the rights to use, copy, modify, merge, publish,
+-   distribute, sublicense, and/or sell copies of the Software, and to
+-   permit persons to whom the Software is furnished to do so, subject to
+-   the following conditions:
++   Permission is hereby granted, free of charge, to any person
++   obtaining a copy of this software and associated documentation
++   files (the ``Software''), to deal in the Software without
++   restriction, including without limitation the rights to use, copy,
++   modify, merge, publish, distribute, sublicense, and/or sell copies
++   of the Software, and to permit persons to whom the Software is
++   furnished to do so, subject to the following conditions:
+ 
+-   The above copyright notice and this permission notice shall be included
+-   in all copies or substantial portions of the Software.
++   The above copyright notice and this permission notice shall be
++   included in all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+@@ -80,21 +81,25 @@ extern "C" {
+ 
+ #define FFI_64_BIT_MAX 9223372036854775807
+ 
+ #ifdef LONG_LONG_MAX
+ # define FFI_LONG_LONG_MAX LONG_LONG_MAX
+ #else
+ # ifdef LLONG_MAX
+ #  define FFI_LONG_LONG_MAX LLONG_MAX
++#  ifdef _AIX52 /* or newer has C99 LLONG_MAX */
++#   undef FFI_64_BIT_MAX
++#   define FFI_64_BIT_MAX 9223372036854775807LL
++#  endif /* _AIX52 or newer */
+ # else
+ #  ifdef __GNUC__
+ #   define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
+ #  endif
+-#  ifdef _AIX
++#  ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */
+ #   ifndef __PPC64__
+ #    if defined (__IBMC__) || defined (__IBMCPP__)
+ #     define FFI_LONG_LONG_MAX LONGLONG_MAX
+ #    endif
+ #   endif /* __PPC64__ */
+ #   undef  FFI_64_BIT_MAX
+ #   define FFI_64_BIT_MAX 9223372036854775807LL
+ #  endif
+@@ -156,32 +161,46 @@ typedef struct _ffi_type
+ # define ffi_type_slong        ffi_type_sint32
+ #elif LONG_MAX == FFI_64_BIT_MAX
+ # define ffi_type_ulong        ffi_type_uint64
+ # define ffi_type_slong        ffi_type_sint64
+ #else
+  #error "long size not supported"
+ #endif
+ 
++/* Need minimal decorations for DLLs to works on Windows. */
++/* GCC has autoimport and autoexport.  Rely on Libtool to */
++/* help MSVC export from a DLL, but always declare data   */
++/* to be imported for MSVC clients.  This costs an extra  */
++/* indirection for MSVC clients using the static version  */
++/* of the library, but don't worry about that.  Besides,  */
++/* as a workaround, they can define FFI_BUILDING if they  */
++/* *know* they are going to link with the static library. */
++#if defined _MSC_VER && !defined FFI_BUILDING
++#define FFI_EXTERN extern __declspec(dllimport)
++#else
++#define FFI_EXTERN extern
++#endif
++
+ /* These are defined in types.c */
+-extern ffi_type ffi_type_void;
+-extern ffi_type ffi_type_uint8;
+-extern ffi_type ffi_type_sint8;
+-extern ffi_type ffi_type_uint16;
+-extern ffi_type ffi_type_sint16;
+-extern ffi_type ffi_type_uint32;
+-extern ffi_type ffi_type_sint32;
+-extern ffi_type ffi_type_uint64;
+-extern ffi_type ffi_type_sint64;
+-extern ffi_type ffi_type_float;
+-extern ffi_type ffi_type_double;
+-extern ffi_type ffi_type_pointer;
++FFI_EXTERN ffi_type ffi_type_void;
++FFI_EXTERN ffi_type ffi_type_uint8;
++FFI_EXTERN ffi_type ffi_type_sint8;
++FFI_EXTERN ffi_type ffi_type_uint16;
++FFI_EXTERN ffi_type ffi_type_sint16;
++FFI_EXTERN ffi_type ffi_type_uint32;
++FFI_EXTERN ffi_type ffi_type_sint32;
++FFI_EXTERN ffi_type ffi_type_uint64;
++FFI_EXTERN ffi_type ffi_type_sint64;
++FFI_EXTERN ffi_type ffi_type_float;
++FFI_EXTERN ffi_type ffi_type_double;
++FFI_EXTERN ffi_type ffi_type_pointer;
+ 
+ #if @HAVE_LONG_DOUBLE@
+-extern ffi_type ffi_type_longdouble;
++FFI_EXTERN ffi_type ffi_type_longdouble;
+ #else
+ #define ffi_type_longdouble ffi_type_double
+ #endif
+ #endif /* LIBFFI_HIDE_BASIC_TYPES */
+ 
+ typedef enum {
+   FFI_OK = 0,
+   FFI_BAD_TYPEDEF,
+@@ -197,16 +216,30 @@ typedef struct {
+   ffi_type *rtype;
+   unsigned bytes;
+   unsigned flags;
+ #ifdef FFI_EXTRA_CIF_FIELDS
+   FFI_EXTRA_CIF_FIELDS;
+ #endif
+ } ffi_cif;
+ 
++#if HAVE_LONG_DOUBLE_VARIANT
++/* Used to adjust size/alignment of ffi types.  */
++void ffi_prep_types (ffi_abi abi);
++# endif
++
++/* Used internally, but overridden by some architectures */
++ffi_status ffi_prep_cif_core(ffi_cif *cif,
++			     ffi_abi abi,
++			     unsigned int isvariadic,
++			     unsigned int nfixedargs,
++			     unsigned int ntotalargs,
++			     ffi_type *rtype,
++			     ffi_type **atypes);
++
+ /* ---- Definitions for the raw API -------------------------------------- */
+ 
+ #ifndef FFI_SIZEOF_ARG
+ # if LONG_MAX == 2147483647
+ #  define FFI_SIZEOF_ARG        4
+ # elif LONG_MAX == FFI_64_BIT_MAX
+ #  define FFI_SIZEOF_ARG        8
+ # endif
+@@ -264,24 +297,32 @@ size_t ffi_java_raw_size (ffi_cif *cif);
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #if FFI_CLOSURES
+ 
+ #ifdef _MSC_VER
+ __declspec(align(8))
+ #endif
+ typedef struct {
++#if @FFI_EXEC_TRAMPOLINE_TABLE@
++  void *trampoline_table;
++  void *trampoline_table_entry;
++#else
+   char tramp[FFI_TRAMPOLINE_SIZE];
++#endif
+   ffi_cif   *cif;
+   void     (*fun)(ffi_cif*,void*,void**,void*);
+   void      *user_data;
+ #ifdef __GNUC__
+ } ffi_closure __attribute__((aligned (8)));
+ #else
+ } ffi_closure;
++# ifdef __sgi
++#  pragma pack 0
++# endif
+ #endif
+ 
+ void *ffi_closure_alloc (size_t size, void **code);
+ void ffi_closure_free (void *);
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure*,
+ 		  ffi_cif *,
+@@ -290,19 +331,26 @@ ffi_prep_closure (ffi_closure*,
+ 
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure*,
+ 		      ffi_cif *,
+ 		      void (*fun)(ffi_cif*,void*,void**,void*),
+ 		      void *user_data,
+ 		      void*codeloc);
+ 
++#ifdef __sgi
++# pragma pack 8
++#endif
+ typedef struct {
++#if @FFI_EXEC_TRAMPOLINE_TABLE@
++  void *trampoline_table;
++  void *trampoline_table_entry;
++#else
+   char tramp[FFI_TRAMPOLINE_SIZE];
+-
++#endif
+   ffi_cif   *cif;
+ 
+ #if !FFI_NATIVE_RAW_API
+ 
+   /* if this is enabled, then a raw closure has the same layout 
+      as a regular closure.  We use this to install an intermediate 
+      handler to do the transaltion, void** -> ffi_raw*. */
+ 
+@@ -312,17 +360,22 @@ typedef struct {
+ #endif
+ 
+   void     (*fun)(ffi_cif*,void*,ffi_raw*,void*);
+   void      *user_data;
+ 
+ } ffi_raw_closure;
+ 
+ typedef struct {
++#if @FFI_EXEC_TRAMPOLINE_TABLE@
++  void *trampoline_table;
++  void *trampoline_table_entry;
++#else
+   char tramp[FFI_TRAMPOLINE_SIZE];
++#endif
+ 
+   ffi_cif   *cif;
+ 
+ #if !FFI_NATIVE_RAW_API
+ 
+   /* if this is enabled, then a raw closure has the same layout 
+      as a regular closure.  We use this to install an intermediate 
+      handler to do the transaltion, void** -> ffi_raw*. */
+@@ -368,16 +421,23 @@ ffi_prep_java_raw_closure_loc (ffi_java_
+ /* ---- Public interface definition -------------------------------------- */
+ 
+ ffi_status ffi_prep_cif(ffi_cif *cif,
+ 			ffi_abi abi,
+ 			unsigned int nargs,
+ 			ffi_type *rtype,
+ 			ffi_type **atypes);
+ 
++ffi_status ffi_prep_cif_var(ffi_cif *cif,
++			    ffi_abi abi,
++			    unsigned int nfixedargs,
++			    unsigned int ntotalargs,
++			    ffi_type *rtype,
++			    ffi_type **atypes);
++
+ void ffi_call(ffi_cif *cif,
+ 	      void (*fn)(void),
+ 	      void *rvalue,
+ 	      void **avalue);
+ 
+ /* Useful for eliminating compiler warnings */
+ #define FFI_FN(f) ((void (*)(void))f)
+ 
+diff --git a/js/src/ctypes/libffi/include/ffi_common.h b/js/src/ctypes/libffi/include/ffi_common.h
+--- a/js/src/ctypes/libffi/include/ffi_common.h
++++ b/js/src/ctypes/libffi/include/ffi_common.h
+@@ -1,50 +1,55 @@
+ /* -----------------------------------------------------------------------
+-   ffi_common.h - Copyright (c) 1996  Red Hat, Inc.
+-   Copyright (C) 2007 Free Software Foundation, Inc
+-
++   ffi_common.h - Copyright (C) 2011, 2012, 2013  Anthony Green
++                  Copyright (C) 2007  Free Software Foundation, Inc
++                  Copyright (c) 1996  Red Hat, Inc.
++                  
+    Common internal definitions and macros. Only necessary for building
+    libffi.
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef FFI_COMMON_H
+ #define FFI_COMMON_H
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ #include <fficonfig.h>
+ 
+ /* Do not move this. Some versions of AIX are very picky about where
+    this is positioned. */
+ #ifdef __GNUC__
+-/* mingw64 defines this already in malloc.h. */
+-#ifndef alloca
+-# define alloca __builtin_alloca
+-#endif
++# if HAVE_ALLOCA_H
++#  include <alloca.h>
++# else
++  /* mingw64 defines this already in malloc.h. */
++#  ifndef alloca
++#    define alloca __builtin_alloca
++#  endif
++# endif
+ # define MAYBE_UNUSED __attribute__((__unused__))
+ #else
+ # define MAYBE_UNUSED
+ # if HAVE_ALLOCA_H
+ #  include <alloca.h>
+ # else
+ #  ifdef _AIX
+- #pragma alloca
++#   pragma alloca
+ #  else
+ #   ifndef alloca /* predefined by HP cc +Olibcalls */
+ #    ifdef _MSC_VER
+ #     define alloca _alloca
+ #    else
+ char *alloca ();
+-#    endif
+ #   endif
+ #  endif
+ # endif
++# endif
+ #endif
+ 
+ /* Check for the existence of memcpy. */
+ #if STDC_HEADERS
+ # include <string.h>
+ #else
+ # ifndef HAVE_MEMCPY
+ #  define memcpy(d, s, n) bcopy ((s), (d), (n))
+@@ -69,27 +74,29 @@ void ffi_type_test(ffi_type *a, char *fi
+ #define FFI_ASSERT_VALID_TYPE(x)
+ #endif
+ 
+ #define ALIGN(v, a)  (((((size_t) (v))-1) | ((a)-1))+1)
+ #define ALIGN_DOWN(v, a) (((size_t) (v)) & -a)
+ 
+ /* Perform machine dependent cif processing */
+ ffi_status ffi_prep_cif_machdep(ffi_cif *cif);
++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif,
++	 unsigned int nfixedargs, unsigned int ntotalargs);
+ 
+ /* Extended cif, used in callback from assembly routine */
+ typedef struct
+ {
+   ffi_cif *cif;
+   void *rvalue;
+   void **avalue;
+ } extended_cif;
+ 
+ /* Terse sized type definitions.  */
+-#if defined(_MSC_VER) || defined(__sgi)
++#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C)
+ typedef unsigned char UINT8;
+ typedef signed char   SINT8;
+ typedef unsigned short UINT16;
+ typedef signed short   SINT16;
+ typedef unsigned int UINT32;
+ typedef signed int   SINT32;
+ # ifdef _MSC_VER
+ typedef unsigned __int64 UINT64;
+@@ -107,16 +114,19 @@ typedef signed int   SINT16 __attribute_
+ typedef unsigned int UINT32 __attribute__((__mode__(__SI__)));
+ typedef signed int   SINT32 __attribute__((__mode__(__SI__)));
+ typedef unsigned int UINT64 __attribute__((__mode__(__DI__)));
+ typedef signed int   SINT64 __attribute__((__mode__(__DI__)));
+ #endif
+ 
+ typedef float FLOAT32;
+ 
++#ifndef __GNUC__
++#define __builtin_expect(x, expected_value) (x)
++#endif
++#define LIKELY(x)    __builtin_expect(!!(x),1)
++#define UNLIKELY(x)  __builtin_expect((x)!=0,0)
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ #endif
+-
+-
+diff --git a/js/src/ctypes/libffi/install-sh b/js/src/ctypes/libffi/install-sh
+--- a/js/src/ctypes/libffi/install-sh
++++ b/js/src/ctypes/libffi/install-sh
+@@ -1,12 +1,12 @@
+ #!/bin/sh
+ # install - install a program, script, or datafile
+ 
+-scriptversion=2004-12-17.09
++scriptversion=2011-11-20.07; # UTC
+ 
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
+ # later released in X11R6 (xc/config/util/install.sh) with the
+ # following copyright and license.
+ #
+ # Copyright (C) 1994 X Consortium
+ #
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
+@@ -30,294 +30,498 @@ scriptversion=2004-12-17.09
+ # be used in advertising or otherwise to promote the sale, use or other deal-
+ # ings in this Software without prior written authorization from the X Consor-
+ # tium.
+ #
+ #
+ # FSF changes to this file are in the public domain.
+ #
+ # Calling this script install-sh is preferred over install.sh, to prevent
+-# `make' implicit rules from creating a file called install from it
++# 'make' implicit rules from creating a file called install from it
+ # when there is no Makefile.
+ #
+ # This script is compatible with the BSD install script, but was written
+-# from scratch.  It can only install one file at a time, a restriction
+-# shared with many OS's install programs.
++# from scratch.
++
++nl='
++'
++IFS=" ""	$nl"
+ 
+ # set DOITPROG to echo to test this script
+ 
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+-doit="${DOITPROG-}"
++doit=${DOITPROG-}
++if test -z "$doit"; then
++  doit_exec=exec
++else
++  doit_exec=$doit
++fi
+ 
+-# put in absolute paths if you don't have them in your path; or use env. vars.
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
+ 
+-mvprog="${MVPROG-mv}"
+-cpprog="${CPPROG-cp}"
+-chmodprog="${CHMODPROG-chmod}"
+-chownprog="${CHOWNPROG-chown}"
+-chgrpprog="${CHGRPPROG-chgrp}"
+-stripprog="${STRIPPROG-strip}"
+-rmprog="${RMPROG-rm}"
+-mkdirprog="${MKDIRPROG-mkdir}"
++chgrpprog=${CHGRPPROG-chgrp}
++chmodprog=${CHMODPROG-chmod}
++chownprog=${CHOWNPROG-chown}
++cmpprog=${CMPPROG-cmp}
++cpprog=${CPPROG-cp}
++mkdirprog=${MKDIRPROG-mkdir}
++mvprog=${MVPROG-mv}
++rmprog=${RMPROG-rm}
++stripprog=${STRIPPROG-strip}
+ 
+-chmodcmd="$chmodprog 0755"
++posix_glob='?'
++initialize_posix_glob='
++  test "$posix_glob" != "?" || {
++    if (set -f) 2>/dev/null; then
++      posix_glob=
++    else
++      posix_glob=:
++    fi
++  }
++'
++
++posix_mkdir=
++
++# Desired mode of installed file.
++mode=0755
++
++chgrpcmd=
++chmodcmd=$chmodprog
+ chowncmd=
+-chgrpcmd=
++mvcmd=$mvprog
++rmcmd="$rmprog -f"
+ stripcmd=
+-rmcmd="$rmprog -f"
+-mvcmd="$mvprog"
++
+ src=
+ dst=
+ dir_arg=
+-dstarg=
++dst_arg=
++
++copy_on_change=false
+ no_target_directory=
+ 
+-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
++usage="\
++Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+    or: $0 [OPTION]... SRCFILES... DIRECTORY
+    or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+    or: $0 [OPTION]... -d DIRECTORIES...
+ 
+ In the 1st form, copy SRCFILE to DSTFILE.
+ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+ In the 4th, create DIRECTORIES.
+ 
+ Options:
+--c         (ignored)
+--d         create directories instead of installing files.
+--g GROUP   $chgrpprog installed files to GROUP.
+--m MODE    $chmodprog installed files to MODE.
+--o USER    $chownprog installed files to USER.
+--s         $stripprog installed files.
+--t DIRECTORY  install into DIRECTORY.
+--T         report an error if DSTFILE is a directory.
+---help     display this help and exit.
+---version  display version info and exit.
++     --help     display this help and exit.
++     --version  display version info and exit.
++
++  -c            (ignored)
++  -C            install only if different (preserve the last data modification time)
++  -d            create directories instead of installing files.
++  -g GROUP      $chgrpprog installed files to GROUP.
++  -m MODE       $chmodprog installed files to MODE.
++  -o USER       $chownprog installed files to USER.
++  -s            $stripprog installed files.
++  -t DIRECTORY  install into DIRECTORY.
++  -T            report an error if DSTFILE is a directory.
+ 
+ Environment variables override the default commands:
+-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
++  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
++  RMPROG STRIPPROG
+ "
+ 
+-while test -n "$1"; do
++while test $# -ne 0; do
+   case $1 in
+-    -c) shift
+-        continue;;
++    -c) ;;
+ 
+-    -d) dir_arg=true
+-        shift
+-        continue;;
++    -C) copy_on_change=true;;
++
++    -d) dir_arg=true;;
+ 
+     -g) chgrpcmd="$chgrpprog $2"
+-        shift
+-        shift
+-        continue;;
++	shift;;
+ 
+-    --help) echo "$usage"; exit 0;;
++    --help) echo "$usage"; exit $?;;
+ 
+-    -m) chmodcmd="$chmodprog $2"
+-        shift
+-        shift
+-        continue;;
++    -m) mode=$2
++	case $mode in
++	  *' '* | *'	'* | *'
++'*	  | *'*'* | *'?'* | *'['*)
++	    echo "$0: invalid mode: $mode" >&2
++	    exit 1;;
++	esac
++	shift;;
+ 
+     -o) chowncmd="$chownprog $2"
+-        shift
+-        shift
+-        continue;;
++	shift;;
+ 
+-    -s) stripcmd=$stripprog
+-        shift
+-        continue;;
++    -s) stripcmd=$stripprog;;
+ 
+-    -t) dstarg=$2
+-	shift
+-	shift
+-	continue;;
++    -t) dst_arg=$2
++	# Protect names problematic for 'test' and other utilities.
++	case $dst_arg in
++	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
++	esac
++	shift;;
+ 
+-    -T) no_target_directory=true
+-	shift
+-	continue;;
++    -T) no_target_directory=true;;
+ 
+-    --version) echo "$0 $scriptversion"; exit 0;;
++    --version) echo "$0 $scriptversion"; exit $?;;
+ 
+-    *)  # When -d is used, all remaining arguments are directories to create.
+-	# When -t is used, the destination is already specified.
+-	test -n "$dir_arg$dstarg" && break
+-        # Otherwise, the last argument is the destination.  Remove it from $@.
+-	for arg
+-	do
+-          if test -n "$dstarg"; then
+-	    # $@ is not empty: it contains at least $arg.
+-	    set fnord "$@" "$dstarg"
+-	    shift # fnord
+-	  fi
+-	  shift # arg
+-	  dstarg=$arg
+-	done
++    --)	shift
+ 	break;;
++
++    -*)	echo "$0: invalid option: $1" >&2
++	exit 1;;
++
++    *)  break;;
+   esac
++  shift
+ done
+ 
+-if test -z "$1"; then
++if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
++  # When -d is used, all remaining arguments are directories to create.
++  # When -t is used, the destination is already specified.
++  # Otherwise, the last argument is the destination.  Remove it from $@.
++  for arg
++  do
++    if test -n "$dst_arg"; then
++      # $@ is not empty: it contains at least $arg.
++      set fnord "$@" "$dst_arg"
++      shift # fnord
++    fi
++    shift # arg
++    dst_arg=$arg
++    # Protect names problematic for 'test' and other utilities.
++    case $dst_arg in
++      -* | [=\(\)!]) dst_arg=./$dst_arg;;
++    esac
++  done
++fi
++
++if test $# -eq 0; then
+   if test -z "$dir_arg"; then
+     echo "$0: no input file specified." >&2
+     exit 1
+   fi
+-  # It's OK to call `install-sh -d' without argument.
++  # It's OK to call 'install-sh -d' without argument.
+   # This can happen when creating conditional directories.
+   exit 0
+ fi
+ 
++if test -z "$dir_arg"; then
++  do_exit='(exit $ret); exit $ret'
++  trap "ret=129; $do_exit" 1
++  trap "ret=130; $do_exit" 2
++  trap "ret=141; $do_exit" 13
++  trap "ret=143; $do_exit" 15
++
++  # Set umask so as not to create temps with too-generous modes.
++  # However, 'strip' requires both read and write access to temps.
++  case $mode in
++    # Optimize common cases.
++    *644) cp_umask=133;;
++    *755) cp_umask=22;;
++
++    *[0-7])
++      if test -z "$stripcmd"; then
++	u_plus_rw=
++      else
++	u_plus_rw='% 200'
++      fi
++      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++    *)
++      if test -z "$stripcmd"; then
++	u_plus_rw=
++      else
++	u_plus_rw=,u+rw
++      fi
++      cp_umask=$mode$u_plus_rw;;
++  esac
++fi
++
+ for src
+ do
+-  # Protect names starting with `-'.
++  # Protect names problematic for 'test' and other utilities.
+   case $src in
+-    -*) src=./$src ;;
++    -* | [=\(\)!]) src=./$src;;
+   esac
+ 
+   if test -n "$dir_arg"; then
+     dst=$src
+-    src=
++    dstdir=$dst
++    test -d "$dstdir"
++    dstdir_status=$?
++  else
+ 
+-    if test -d "$dst"; then
+-      mkdircmd=:
+-      chmodcmd=
+-    else
+-      mkdircmd=$mkdirprog
+-    fi
+-  else
+     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+     # might cause directories to be created, which would be especially bad
+     # if $src (and thus $dsttmp) contains '*'.
+     if test ! -f "$src" && test ! -d "$src"; then
+       echo "$0: $src does not exist." >&2
+       exit 1
+     fi
+ 
+-    if test -z "$dstarg"; then
++    if test -z "$dst_arg"; then
+       echo "$0: no destination specified." >&2
+       exit 1
+     fi
+-
+-    dst=$dstarg
+-    # Protect names starting with `-'.
+-    case $dst in
+-      -*) dst=./$dst ;;
+-    esac
++    dst=$dst_arg
+ 
+     # If destination is a directory, append the input filename; won't work
+     # if double slashes aren't ignored.
+     if test -d "$dst"; then
+       if test -n "$no_target_directory"; then
+-	echo "$0: $dstarg: Is a directory" >&2
++	echo "$0: $dst_arg: Is a directory" >&2
+ 	exit 1
+       fi
+-      dst=$dst/`basename "$src"`
++      dstdir=$dst
++      dst=$dstdir/`basename "$src"`
++      dstdir_status=0
++    else
++      # Prefer dirname, but fall back on a substitute if dirname fails.
++      dstdir=`
++	(dirname "$dst") 2>/dev/null ||
++	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	     X"$dst" : 'X\(//\)[^/]' \| \
++	     X"$dst" : 'X\(//\)$' \| \
++	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++	echo X"$dst" |
++	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\/\)[^/].*/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\/\)$/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\).*/{
++		   s//\1/
++		   q
++		 }
++		 s/.*/./; q'
++      `
++
++      test -d "$dstdir"
++      dstdir_status=$?
+     fi
+   fi
+ 
+-  # This sed command emulates the dirname command.
+-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
++  obsolete_mkdir_used=false
+ 
+-  # Make sure that the destination directory exists.
++  if test $dstdir_status != 0; then
++    case $posix_mkdir in
++      '')
++	# Create intermediate dirs using mode 755 as modified by the umask.
++	# This is like FreeBSD 'install' as of 1997-10-28.
++	umask=`umask`
++	case $stripcmd.$umask in
++	  # Optimize common cases.
++	  *[2367][2367]) mkdir_umask=$umask;;
++	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+ 
+-  # Skip lots of stat calls in the usual case.
+-  if test ! -d "$dstdir"; then
+-    defaultIFS='
+-	 '
+-    IFS="${IFS-$defaultIFS}"
++	  *[0-7])
++	    mkdir_umask=`expr $umask + 22 \
++	      - $umask % 100 % 40 + $umask % 20 \
++	      - $umask % 10 % 4 + $umask % 2
++	    `;;
++	  *) mkdir_umask=$umask,go-w;;
++	esac
+ 
+-    oIFS=$IFS
+-    # Some sh's can't handle IFS=/ for some reason.
+-    IFS='%'
+-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+-    shift
+-    IFS=$oIFS
++	# With -d, create the new directory with the user-specified mode.
++	# Otherwise, rely on $mkdir_umask.
++	if test -n "$dir_arg"; then
++	  mkdir_mode=-m$mode
++	else
++	  mkdir_mode=
++	fi
+ 
+-    pathcomp=
++	posix_mkdir=false
++	case $umask in
++	  *[123567][0-7][0-7])
++	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
++	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++	    ;;
++	  *)
++	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ 
+-    while test $# -ne 0 ; do
+-      pathcomp=$pathcomp$1
++	    if (umask $mkdir_umask &&
++		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++	    then
++	      if test -z "$dir_arg" || {
++		   # Check for POSIX incompatibilities with -m.
++		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++		   # other-writable bit of parent directory when it shouldn't.
++		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
++		   case $ls_ld_tmpdir in
++		     d????-?r-*) different_mode=700;;
++		     d????-?--*) different_mode=755;;
++		     *) false;;
++		   esac &&
++		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++		   }
++		 }
++	      then posix_mkdir=:
++	      fi
++	      rmdir "$tmpdir/d" "$tmpdir"
++	    else
++	      # Remove any dirs left behind by ancient mkdir implementations.
++	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++	    fi
++	    trap '' 0;;
++	esac;;
++    esac
++
++    if
++      $posix_mkdir && (
++	umask $mkdir_umask &&
++	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++      )
++    then :
++    else
++
++      # The umask is ridiculous, or mkdir does not conform to POSIX,
++      # or it failed possibly due to a race condition.  Create the
++      # directory the slow way, step by step, checking for races as we go.
++
++      case $dstdir in
++	/*) prefix='/';;
++	[-=\(\)!]*) prefix='./';;
++	*)  prefix='';;
++      esac
++
++      eval "$initialize_posix_glob"
++
++      oIFS=$IFS
++      IFS=/
++      $posix_glob set -f
++      set fnord $dstdir
+       shift
+-      if test ! -d "$pathcomp"; then
+-        $mkdirprog "$pathcomp"
+-	# mkdir can fail with a `File exist' error in case several
+-	# install-sh are creating the directory concurrently.  This
+-	# is OK.
+-	test -d "$pathcomp" || exit
++      $posix_glob set +f
++      IFS=$oIFS
++
++      prefixes=
++
++      for d
++      do
++	test X"$d" = X && continue
++
++	prefix=$prefix$d
++	if test -d "$prefix"; then
++	  prefixes=
++	else
++	  if $posix_mkdir; then
++	    (umask=$mkdir_umask &&
++	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++	    # Don't fail if two instances are running concurrently.
++	    test -d "$prefix" || exit 1
++	  else
++	    case $prefix in
++	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++	      *) qprefix=$prefix;;
++	    esac
++	    prefixes="$prefixes '$qprefix'"
++	  fi
++	fi
++	prefix=$prefix/
++      done
++
++      if test -n "$prefixes"; then
++	# Don't fail if two instances are running concurrently.
++	(umask $mkdir_umask &&
++	 eval "\$doit_exec \$mkdirprog $prefixes") ||
++	  test -d "$dstdir" || exit 1
++	obsolete_mkdir_used=true
+       fi
+-      pathcomp=$pathcomp/
+-    done
++    fi
+   fi
+ 
+   if test -n "$dir_arg"; then
+-    $doit $mkdircmd "$dst" \
+-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+-
++    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+   else
+-    dstfile=`basename "$dst"`
+ 
+     # Make a couple of temp file names in the proper directory.
+     dsttmp=$dstdir/_inst.$$_
+     rmtmp=$dstdir/_rm.$$_
+ 
+     # Trap to clean up those temp files at exit.
+     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+-    trap '(exit $?); exit' 1 2 13 15
+ 
+     # Copy the file name to the temp name.
+-    $doit $cpprog "$src" "$dsttmp" &&
++    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+ 
+     # and set any options; do chmod last to preserve setuid bits.
+     #
+     # If any of these fail, we abort the whole thing.  If we want to
+     # ignore errors from any of these, just make sure not to ignore
+     # errors from the above "$doit $cpprog $src $dsttmp" command.
+     #
+-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+-      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
++    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
++    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
++    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+ 
+-    # Now rename the file to the real destination.
+-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+-      || {
+-	   # The rename failed, perhaps because mv can't rename something else
+-	   # to itself, or perhaps because mv is so ancient that it does not
+-	   # support -f.
++    # If -C, don't bother to copy if it wouldn't change the file.
++    if $copy_on_change &&
++       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
++       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+ 
+-	   # Now remove or move aside any old file at destination location.
+-	   # We try this two ways since rm can't unlink itself on some
+-	   # systems and the destination file might be busy for other
+-	   # reasons.  In this case, the final cleanup might fail but the new
+-	   # file should still install successfully.
+-	   {
+-	     if test -f "$dstdir/$dstfile"; then
+-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+-	       || {
+-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+-		 (exit 1); exit 1
+-	       }
+-	     else
+-	       :
+-	     fi
+-	   } &&
++       eval "$initialize_posix_glob" &&
++       $posix_glob set -f &&
++       set X $old && old=:$2:$4:$5:$6 &&
++       set X $new && new=:$2:$4:$5:$6 &&
++       $posix_glob set +f &&
+ 
+-	   # Now rename the file to the real destination.
+-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+-	 }
+-    }
+-  fi || { (exit 1); exit 1; }
++       test "$old" = "$new" &&
++       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
++    then
++      rm -f "$dsttmp"
++    else
++      # Rename the file to the real destination.
++      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
++
++      # The rename failed, perhaps because mv can't rename something else
++      # to itself, or perhaps because mv is so ancient that it does not
++      # support -f.
++      {
++	# Now remove or move aside any old file at destination location.
++	# We try this two ways since rm can't unlink itself on some
++	# systems and the destination file might be busy for other
++	# reasons.  In this case, the final cleanup might fail but the new
++	# file should still install successfully.
++	{
++	  test ! -f "$dst" ||
++	  $doit $rmcmd -f "$dst" 2>/dev/null ||
++	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
++	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
++	  } ||
++	  { echo "$0: cannot unlink or rename $dst" >&2
++	    (exit 1); exit 1
++	  }
++	} &&
++
++	# Now rename the file to the real destination.
++	$doit $mvcmd "$dsttmp" "$dst"
++      }
++    fi || exit 1
++
++    trap '' 0
++  fi
+ done
+ 
+-# The final little trick to "correctly" pass the exit status to the exit trap.
+-{
+-  (exit 0); exit 0
+-}
+-
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff --git a/js/src/ctypes/libffi/libffi.pc.in b/js/src/ctypes/libffi/libffi.pc.in
+--- a/js/src/ctypes/libffi/libffi.pc.in
++++ b/js/src/ctypes/libffi/libffi.pc.in
+@@ -1,10 +1,11 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
++toolexeclibdir=@toolexeclibdir@
+ includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
+ 
+ Name: @PACKAGE_NAME@
+ Description: Library supporting Foreign Function Interfaces
+ Version: @PACKAGE_VERSION@
+-Libs: -L${libdir} -lffi
++Libs: -L${toolexeclibdir} -lffi
+ Cflags: -I${includedir}
+diff --git a/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj b/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj
+@@ -0,0 +1,637 @@
++// !$*UTF8*$!
++{
++	archiveVersion = 1;
++	classes = {
++	};
++	objectVersion = 46;
++	objects = {
++
++/* Begin PBXBuildFile section */
++		DBFA714A187F1D8600A76262 /* ffi.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA713E187F1D8600A76262 /* ffi.h */; };
++		DBFA714B187F1D8600A76262 /* ffi_common.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA713F187F1D8600A76262 /* ffi_common.h */; };
++		DBFA714C187F1D8600A76262 /* fficonfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7140187F1D8600A76262 /* fficonfig.h */; };
++		DBFA714D187F1D8600A76262 /* ffitarget.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7141187F1D8600A76262 /* ffitarget.h */; };
++		DBFA714E187F1D8600A76262 /* closures.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7143187F1D8600A76262 /* closures.c */; };
++		DBFA714F187F1D8600A76262 /* closures.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7143187F1D8600A76262 /* closures.c */; };
++		DBFA7156187F1D8600A76262 /* prep_cif.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7147187F1D8600A76262 /* prep_cif.c */; };
++		DBFA7157187F1D8600A76262 /* prep_cif.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7147187F1D8600A76262 /* prep_cif.c */; };
++		DBFA7158187F1D8600A76262 /* raw_api.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7148187F1D8600A76262 /* raw_api.c */; };
++		DBFA7159187F1D8600A76262 /* raw_api.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7148187F1D8600A76262 /* raw_api.c */; };
++		DBFA715A187F1D8600A76262 /* types.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7149187F1D8600A76262 /* types.c */; };
++		DBFA715B187F1D8600A76262 /* types.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7149187F1D8600A76262 /* types.c */; };
++		DBFA7177187F1D9B00A76262 /* ffi_arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA716C187F1D9B00A76262 /* ffi_arm64.c */; };
++		DBFA7178187F1D9B00A76262 /* sysv_arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA716D187F1D9B00A76262 /* sysv_arm64.S */; };
++		DBFA7179187F1D9B00A76262 /* ffi_armv7.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA716F187F1D9B00A76262 /* ffi_armv7.c */; };
++		DBFA717A187F1D9B00A76262 /* sysv_armv7.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7170187F1D9B00A76262 /* sysv_armv7.S */; };
++		DBFA717B187F1D9B00A76262 /* trampoline_armv7.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7171187F1D9B00A76262 /* trampoline_armv7.S */; };
++		DBFA717C187F1D9B00A76262 /* darwin64_x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7173187F1D9B00A76262 /* darwin64_x86_64.S */; };
++		DBFA717D187F1D9B00A76262 /* darwin_i386.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7174187F1D9B00A76262 /* darwin_i386.S */; };
++		DBFA717E187F1D9B00A76262 /* ffi64_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7175187F1D9B00A76262 /* ffi64_x86_64.c */; };
++		DBFA717F187F1D9B00A76262 /* ffi_i386.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7176187F1D9B00A76262 /* ffi_i386.c */; };
++		DBFA718E187F1DA100A76262 /* ffi_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7182187F1DA100A76262 /* ffi_i386.h */; };
++		DBFA718F187F1DA100A76262 /* ffi_x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7183187F1DA100A76262 /* ffi_x86_64.h */; };
++		DBFA7190187F1DA100A76262 /* fficonfig_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7184187F1DA100A76262 /* fficonfig_i386.h */; };
++		DBFA7191187F1DA100A76262 /* fficonfig_x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7185187F1DA100A76262 /* fficonfig_x86_64.h */; };
++		DBFA7192187F1DA100A76262 /* ffitarget_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7186187F1DA100A76262 /* ffitarget_i386.h */; };
++		DBFA7193187F1DA100A76262 /* ffitarget_x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7187187F1DA100A76262 /* ffitarget_x86_64.h */; };
++		DBFA7194187F1DA100A76262 /* darwin64_x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718A187F1DA100A76262 /* darwin64_x86_64.S */; };
++		DBFA7195187F1DA100A76262 /* darwin_i386.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718B187F1DA100A76262 /* darwin_i386.S */; };
++		DBFA7196187F1DA100A76262 /* ffi64_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718C187F1DA100A76262 /* ffi64_x86_64.c */; };
++		DBFA7197187F1DA100A76262 /* ffi_i386.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718D187F1DA100A76262 /* ffi_i386.c */; };
++/* End PBXBuildFile section */
++
++/* Begin PBXCopyFilesBuildPhase section */
++		DB13B1641849DF1E0010F42D /* CopyFiles */ = {
++			isa = PBXCopyFilesBuildPhase;
++			buildActionMask = 8;
++			dstPath = "include/$(PRODUCT_NAME)";
++			dstSubfolderSpec = 16;
++			files = (
++			);
++			runOnlyForDeploymentPostprocessing = 1;
++		};
++/* End PBXCopyFilesBuildPhase section */
++
++/* Begin PBXFileReference section */
++		DB13B1661849DF1E0010F42D /* libffi.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libffi.a; sourceTree = BUILT_PRODUCTS_DIR; };
++		DB13B1911849DF510010F42D /* ffi.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = ffi.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
++		DBFA713E187F1D8600A76262 /* ffi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi.h; sourceTree = "<group>"; };
++		DBFA713F187F1D8600A76262 /* ffi_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_common.h; sourceTree = "<group>"; };
++		DBFA7140187F1D8600A76262 /* fficonfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig.h; sourceTree = "<group>"; };
++		DBFA7141187F1D8600A76262 /* ffitarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget.h; sourceTree = "<group>"; };
++		DBFA7143187F1D8600A76262 /* closures.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = closures.c; sourceTree = "<group>"; };
++		DBFA7145187F1D8600A76262 /* dlmalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dlmalloc.c; sourceTree = "<group>"; };
++		DBFA7147187F1D8600A76262 /* prep_cif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = prep_cif.c; sourceTree = "<group>"; };
++		DBFA7148187F1D8600A76262 /* raw_api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_api.c; sourceTree = "<group>"; };
++		DBFA7149187F1D8600A76262 /* types.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = types.c; sourceTree = "<group>"; };
++		DBFA715E187F1D9B00A76262 /* ffi_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_arm64.h; sourceTree = "<group>"; };
++		DBFA715F187F1D9B00A76262 /* ffi_armv7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_armv7.h; sourceTree = "<group>"; };
++		DBFA7160187F1D9B00A76262 /* ffi_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_i386.h; sourceTree = "<group>"; };
++		DBFA7161187F1D9B00A76262 /* ffi_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_x86_64.h; sourceTree = "<group>"; };
++		DBFA7162187F1D9B00A76262 /* fficonfig_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_arm64.h; sourceTree = "<group>"; };
++		DBFA7163187F1D9B00A76262 /* fficonfig_armv7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_armv7.h; sourceTree = "<group>"; };
++		DBFA7164187F1D9B00A76262 /* fficonfig_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_i386.h; sourceTree = "<group>"; };
++		DBFA7165187F1D9B00A76262 /* fficonfig_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_x86_64.h; sourceTree = "<group>"; };
++		DBFA7166187F1D9B00A76262 /* ffitarget_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_arm64.h; sourceTree = "<group>"; };
++		DBFA7167187F1D9B00A76262 /* ffitarget_armv7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_armv7.h; sourceTree = "<group>"; };
++		DBFA7168187F1D9B00A76262 /* ffitarget_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_i386.h; sourceTree = "<group>"; };
++		DBFA7169187F1D9B00A76262 /* ffitarget_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_x86_64.h; sourceTree = "<group>"; };
++		DBFA716C187F1D9B00A76262 /* ffi_arm64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_arm64.c; sourceTree = "<group>"; };
++		DBFA716D187F1D9B00A76262 /* sysv_arm64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = sysv_arm64.S; sourceTree = "<group>"; };
++		DBFA716F187F1D9B00A76262 /* ffi_armv7.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_armv7.c; sourceTree = "<group>"; };
++		DBFA7170187F1D9B00A76262 /* sysv_armv7.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = sysv_armv7.S; sourceTree = "<group>"; };
++		DBFA7171187F1D9B00A76262 /* trampoline_armv7.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = trampoline_armv7.S; sourceTree = "<group>"; };
++		DBFA7173187F1D9B00A76262 /* darwin64_x86_64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin64_x86_64.S; sourceTree = "<group>"; };
++		DBFA7174187F1D9B00A76262 /* darwin_i386.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin_i386.S; sourceTree = "<group>"; };
++		DBFA7175187F1D9B00A76262 /* ffi64_x86_64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi64_x86_64.c; sourceTree = "<group>"; };
++		DBFA7176187F1D9B00A76262 /* ffi_i386.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_i386.c; sourceTree = "<group>"; };
++		DBFA7182187F1DA100A76262 /* ffi_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_i386.h; sourceTree = "<group>"; };
++		DBFA7183187F1DA100A76262 /* ffi_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_x86_64.h; sourceTree = "<group>"; };
++		DBFA7184187F1DA100A76262 /* fficonfig_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_i386.h; sourceTree = "<group>"; };
++		DBFA7185187F1DA100A76262 /* fficonfig_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_x86_64.h; sourceTree = "<group>"; };
++		DBFA7186187F1DA100A76262 /* ffitarget_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_i386.h; sourceTree = "<group>"; };
++		DBFA7187187F1DA100A76262 /* ffitarget_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_x86_64.h; sourceTree = "<group>"; };
++		DBFA718A187F1DA100A76262 /* darwin64_x86_64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin64_x86_64.S; sourceTree = "<group>"; };
++		DBFA718B187F1DA100A76262 /* darwin_i386.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin_i386.S; sourceTree = "<group>"; };
++		DBFA718C187F1DA100A76262 /* ffi64_x86_64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi64_x86_64.c; sourceTree = "<group>"; };
++		DBFA718D187F1DA100A76262 /* ffi_i386.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_i386.c; sourceTree = "<group>"; };
++/* End PBXFileReference section */
++
++/* Begin PBXGroup section */
++		DB13B15B1849DEB70010F42D = {
++			isa = PBXGroup;
++			children = (
++				DBFA713C187F1D8600A76262 /* darwin_common */,
++				DBFA715C187F1D9B00A76262 /* darwin_ios */,
++				DBFA7180187F1DA100A76262 /* darwin_osx */,
++				DB13B1671849DF1E0010F42D /* Products */,
++			);
++			sourceTree = "<group>";
++		};
++		DB13B1671849DF1E0010F42D /* Products */ = {
++			isa = PBXGroup;
++			children = (
++				DB13B1661849DF1E0010F42D /* libffi.a */,
++				DB13B1911849DF510010F42D /* ffi.dylib */,
++			);
++			name = Products;
++			sourceTree = "<group>";
++		};
++		DBFA713C187F1D8600A76262 /* darwin_common */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA713D187F1D8600A76262 /* include */,
++				DBFA7142187F1D8600A76262 /* src */,
++			);
++			path = "darwin_common";
++			sourceTree = "<group>";
++		};
++		DBFA713D187F1D8600A76262 /* include */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA713E187F1D8600A76262 /* ffi.h */,
++				DBFA713F187F1D8600A76262 /* ffi_common.h */,
++				DBFA7140187F1D8600A76262 /* fficonfig.h */,
++				DBFA7141187F1D8600A76262 /* ffitarget.h */,
++			);
++			path = include;
++			sourceTree = "<group>";
++		};
++		DBFA7142187F1D8600A76262 /* src */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA7143187F1D8600A76262 /* closures.c */,
++				DBFA7145187F1D8600A76262 /* dlmalloc.c */,
++				DBFA7147187F1D8600A76262 /* prep_cif.c */,
++				DBFA7148187F1D8600A76262 /* raw_api.c */,
++				DBFA7149187F1D8600A76262 /* types.c */,
++			);
++			path = src;
++			sourceTree = "<group>";
++		};
++		DBFA715C187F1D9B00A76262 /* darwin_ios */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA715D187F1D9B00A76262 /* include */,
++				DBFA716A187F1D9B00A76262 /* src */,
++			);
++			path = "darwin_ios";
++			sourceTree = "<group>";
++		};
++		DBFA715D187F1D9B00A76262 /* include */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA715E187F1D9B00A76262 /* ffi_arm64.h */,
++				DBFA715F187F1D9B00A76262 /* ffi_armv7.h */,
++				DBFA7160187F1D9B00A76262 /* ffi_i386.h */,
++				DBFA7161187F1D9B00A76262 /* ffi_x86_64.h */,
++				DBFA7162187F1D9B00A76262 /* fficonfig_arm64.h */,
++				DBFA7163187F1D9B00A76262 /* fficonfig_armv7.h */,
++				DBFA7164187F1D9B00A76262 /* fficonfig_i386.h */,
++				DBFA7165187F1D9B00A76262 /* fficonfig_x86_64.h */,
++				DBFA7166187F1D9B00A76262 /* ffitarget_arm64.h */,
++				DBFA7167187F1D9B00A76262 /* ffitarget_armv7.h */,
++				DBFA7168187F1D9B00A76262 /* ffitarget_i386.h */,
++				DBFA7169187F1D9B00A76262 /* ffitarget_x86_64.h */,
++			);
++			path = include;
++			sourceTree = "<group>";
++		};
++		DBFA716A187F1D9B00A76262 /* src */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA716B187F1D9B00A76262 /* aarch64 */,
++				DBFA716E187F1D9B00A76262 /* arm */,
++				DBFA7172187F1D9B00A76262 /* x86 */,
++			);
++			path = src;
++			sourceTree = "<group>";
++		};
++		DBFA716B187F1D9B00A76262 /* aarch64 */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA716C187F1D9B00A76262 /* ffi_arm64.c */,
++				DBFA716D187F1D9B00A76262 /* sysv_arm64.S */,
++			);
++			path = aarch64;
++			sourceTree = "<group>";
++		};
++		DBFA716E187F1D9B00A76262 /* arm */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA716F187F1D9B00A76262 /* ffi_armv7.c */,
++				DBFA7170187F1D9B00A76262 /* sysv_armv7.S */,
++				DBFA7171187F1D9B00A76262 /* trampoline_armv7.S */,
++			);
++			path = arm;
++			sourceTree = "<group>";
++		};
++		DBFA7172187F1D9B00A76262 /* x86 */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA7173187F1D9B00A76262 /* darwin64_x86_64.S */,
++				DBFA7174187F1D9B00A76262 /* darwin_i386.S */,
++				DBFA7175187F1D9B00A76262 /* ffi64_x86_64.c */,
++				DBFA7176187F1D9B00A76262 /* ffi_i386.c */,
++			);
++			path = x86;
++			sourceTree = "<group>";
++		};
++		DBFA7180187F1DA100A76262 /* darwin_osx */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA7181187F1DA100A76262 /* include */,
++				DBFA7188187F1DA100A76262 /* src */,
++			);
++			path = "darwin_osx";
++			sourceTree = "<group>";
++		};
++		DBFA7181187F1DA100A76262 /* include */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA7182187F1DA100A76262 /* ffi_i386.h */,
++				DBFA7183187F1DA100A76262 /* ffi_x86_64.h */,
++				DBFA7184187F1DA100A76262 /* fficonfig_i386.h */,
++				DBFA7185187F1DA100A76262 /* fficonfig_x86_64.h */,
++				DBFA7186187F1DA100A76262 /* ffitarget_i386.h */,
++				DBFA7187187F1DA100A76262 /* ffitarget_x86_64.h */,
++			);
++			path = include;
++			sourceTree = "<group>";
++		};
++		DBFA7188187F1DA100A76262 /* src */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA7189187F1DA100A76262 /* x86 */,
++			);
++			path = src;
++			sourceTree = "<group>";
++		};
++		DBFA7189187F1DA100A76262 /* x86 */ = {
++			isa = PBXGroup;
++			children = (
++				DBFA718A187F1DA100A76262 /* darwin64_x86_64.S */,
++				DBFA718B187F1DA100A76262 /* darwin_i386.S */,
++				DBFA718C187F1DA100A76262 /* ffi64_x86_64.c */,
++				DBFA718D187F1DA100A76262 /* ffi_i386.c */,
++			);
++			path = x86;
++			sourceTree = "<group>";
++		};
++/* End PBXGroup section */
++
++/* Begin PBXHeadersBuildPhase section */
++		DB13B18F1849DF510010F42D /* Headers */ = {
++			isa = PBXHeadersBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				DBFA714C187F1D8600A76262 /* fficonfig.h in Headers */,
++				DBFA714D187F1D8600A76262 /* ffitarget.h in Headers */,
++				DBFA714A187F1D8600A76262 /* ffi.h in Headers */,
++				DBFA718F187F1DA100A76262 /* ffi_x86_64.h in Headers */,
++				DBFA7191187F1DA100A76262 /* fficonfig_x86_64.h in Headers */,
++				DBFA718E187F1DA100A76262 /* ffi_i386.h in Headers */,
++				DBFA7190187F1DA100A76262 /* fficonfig_i386.h in Headers */,
++				DBFA714B187F1D8600A76262 /* ffi_common.h in Headers */,
++				DBFA7193187F1DA100A76262 /* ffitarget_x86_64.h in Headers */,
++				DBFA7192187F1DA100A76262 /* ffitarget_i386.h in Headers */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++/* End PBXHeadersBuildPhase section */
++
++/* Begin PBXNativeTarget section */
++		DB13B1651849DF1E0010F42D /* libffi-iOS */ = {
++			isa = PBXNativeTarget;
++			buildConfigurationList = DB13B18B1849DF1E0010F42D /* Build configuration list for PBXNativeTarget "libffi-iOS" */;
++			buildPhases = (
++				DB13B3051849E01C0010F42D /* ShellScript */,
++				DB13B1621849DF1E0010F42D /* Sources */,
++				DB13B1641849DF1E0010F42D /* CopyFiles */,
++			);
++			buildRules = (
++			);
++			dependencies = (
++			);
++			name = "libffi-iOS";
++			productName = ffi;
++			productReference = DB13B1661849DF1E0010F42D /* libffi.a */;
++			productType = "com.apple.product-type.library.static";
++		};
++		DB13B1901849DF510010F42D /* libffi-Mac */ = {
++			isa = PBXNativeTarget;
++			buildConfigurationList = DB13B1B01849DF520010F42D /* Build configuration list for PBXNativeTarget "libffi-Mac" */;
++			buildPhases = (
++				DB13B3061849E0490010F42D /* ShellScript */,
++				DB13B18D1849DF510010F42D /* Sources */,
++				DB13B18F1849DF510010F42D /* Headers */,
++			);
++			buildRules = (
++			);
++			dependencies = (
++			);
++			name = "libffi-Mac";
++			productName = ffi;
++			productReference = DB13B1911849DF510010F42D /* ffi.dylib */;
++			productType = "com.apple.product-type.library.dynamic";
++		};
++/* End PBXNativeTarget section */
++
++/* Begin PBXProject section */
++		DB13B15C1849DEB70010F42D /* Project object */ = {
++			isa = PBXProject;
++			attributes = {
++				LastUpgradeCheck = 0510;
++			};
++			buildConfigurationList = DB13B15F1849DEB70010F42D /* Build configuration list for PBXProject "libffi" */;
++			compatibilityVersion = "Xcode 3.2";
++			developmentRegion = English;
++			hasScannedForEncodings = 0;
++			knownRegions = (
++				en,
++			);
++			mainGroup = DB13B15B1849DEB70010F42D;
++			productRefGroup = DB13B1671849DF1E0010F42D /* Products */;
++			projectDirPath = "";
++			projectRoot = "";
++			targets = (
++				DB13B1651849DF1E0010F42D /* libffi-iOS */,
++				DB13B1901849DF510010F42D /* libffi-Mac */,
++			);
++		};
++/* End PBXProject section */
++
++/* Begin PBXShellScriptBuildPhase section */
++		DB13B3051849E01C0010F42D /* ShellScript */ = {
++			isa = PBXShellScriptBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++			);
++			inputPaths = (
++			);
++			outputPaths = (
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++			shellPath = /bin/sh;
++			shellScript = "/usr/bin/python generate-darwin-source-and-headers.py --only-ios";
++		};
++		DB13B3061849E0490010F42D /* ShellScript */ = {
++			isa = PBXShellScriptBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++			);
++			inputPaths = (
++			);
++			outputPaths = (
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++			shellPath = /bin/sh;
++			shellScript = "/usr/bin/python generate-darwin-source-and-headers.py --only-osx";
++		};
++/* End PBXShellScriptBuildPhase section */
++
++/* Begin PBXSourcesBuildPhase section */
++		DB13B1621849DF1E0010F42D /* Sources */ = {
++			isa = PBXSourcesBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				DBFA717E187F1D9B00A76262 /* ffi64_x86_64.c in Sources */,
++				DBFA7179187F1D9B00A76262 /* ffi_armv7.c in Sources */,
++				DBFA717B187F1D9B00A76262 /* trampoline_armv7.S in Sources */,
++				DBFA714E187F1D8600A76262 /* closures.c in Sources */,
++				DBFA717A187F1D9B00A76262 /* sysv_armv7.S in Sources */,
++				DBFA717D187F1D9B00A76262 /* darwin_i386.S in Sources */,
++				DBFA7156187F1D8600A76262 /* prep_cif.c in Sources */,
++				DBFA717F187F1D9B00A76262 /* ffi_i386.c in Sources */,
++				DBFA7158187F1D8600A76262 /* raw_api.c in Sources */,
++				DBFA7178187F1D9B00A76262 /* sysv_arm64.S in Sources */,
++				DBFA717C187F1D9B00A76262 /* darwin64_x86_64.S in Sources */,
++				DBFA715A187F1D8600A76262 /* types.c in Sources */,
++				DBFA7177187F1D9B00A76262 /* ffi_arm64.c in Sources */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++		DB13B18D1849DF510010F42D /* Sources */ = {
++			isa = PBXSourcesBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				DBFA7196187F1DA100A76262 /* ffi64_x86_64.c in Sources */,
++				DBFA7195187F1DA100A76262 /* darwin_i386.S in Sources */,
++				DBFA7157187F1D8600A76262 /* prep_cif.c in Sources */,
++				DBFA7197187F1DA100A76262 /* ffi_i386.c in Sources */,
++				DBFA715B187F1D8600A76262 /* types.c in Sources */,
++				DBFA7159187F1D8600A76262 /* raw_api.c in Sources */,
++				DBFA714F187F1D8600A76262 /* closures.c in Sources */,
++				DBFA7194187F1DA100A76262 /* darwin64_x86_64.S in Sources */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++/* End PBXSourcesBuildPhase section */
++
++/* Begin XCBuildConfiguration section */
++		DB13B1601849DEB70010F42D /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				HEADER_SEARCH_PATHS = (
++					"$(inherited)",
++					"darwin_common/include",
++				);
++				ONLY_ACTIVE_ARCH = YES;
++			};
++			name = Debug;
++		};
++		DB13B1611849DEB70010F42D /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				HEADER_SEARCH_PATHS = (
++					"$(inherited)",
++					"darwin_common/include",
++				);
++			};
++			name = Release;
++		};
++		DB13B1871849DF1E0010F42D /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				ALWAYS_SEARCH_USER_PATHS = NO;
++				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
++				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
++				CLANG_CXX_LIBRARY = "libc++";
++				CLANG_ENABLE_MODULES = YES;
++				CLANG_ENABLE_OBJC_ARC = YES;
++				CLANG_WARN_BOOL_CONVERSION = YES;
++				CLANG_WARN_CONSTANT_CONVERSION = YES;
++				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
++				CLANG_WARN_EMPTY_BODY = YES;
++				CLANG_WARN_ENUM_CONVERSION = YES;
++				CLANG_WARN_INT_CONVERSION = YES;
++				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
++				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
++				COPY_PHASE_STRIP = NO;
++				DSTROOT = /tmp/ffi.dst;
++				GCC_C_LANGUAGE_STANDARD = gnu99;
++				GCC_DYNAMIC_NO_PIC = NO;
++				GCC_OPTIMIZATION_LEVEL = 0;
++				GCC_PREPROCESSOR_DEFINITIONS = (
++					"DEBUG=1",
++					"$(inherited)",
++				);
++				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
++				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
++				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
++				GCC_WARN_UNDECLARED_SELECTOR = YES;
++				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
++				GCC_WARN_UNUSED_FUNCTION = YES;
++				GCC_WARN_UNUSED_VARIABLE = YES;
++				HEADER_SEARCH_PATHS = (
++					"$(inherited)",
++					"darwin_ios/include",
++				);
++				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
++				"IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0;
++				OTHER_LDFLAGS = "-ObjC";
++				PRODUCT_NAME = ffi;
++				SDKROOT = iphoneos;
++				SKIP_INSTALL = YES;
++			};
++			name = Debug;
++		};
++		DB13B1881849DF1E0010F42D /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				ALWAYS_SEARCH_USER_PATHS = NO;
++				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
++				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
++				CLANG_CXX_LIBRARY = "libc++";
++				CLANG_ENABLE_MODULES = YES;
++				CLANG_ENABLE_OBJC_ARC = YES;
++				CLANG_WARN_BOOL_CONVERSION = YES;
++				CLANG_WARN_CONSTANT_CONVERSION = YES;
++				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
++				CLANG_WARN_EMPTY_BODY = YES;
++				CLANG_WARN_ENUM_CONVERSION = YES;
++				CLANG_WARN_INT_CONVERSION = YES;
++				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
++				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
++				COPY_PHASE_STRIP = YES;
++				DSTROOT = /tmp/ffi.dst;
++				ENABLE_NS_ASSERTIONS = NO;
++				GCC_C_LANGUAGE_STANDARD = gnu99;
++				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
++				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
++				GCC_WARN_UNDECLARED_SELECTOR = YES;
++				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
++				GCC_WARN_UNUSED_FUNCTION = YES;
++				GCC_WARN_UNUSED_VARIABLE = YES;
++				HEADER_SEARCH_PATHS = (
++					"$(inherited)",
++					"darwin_ios/include",
++				);
++				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
++				"IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0;
++				OTHER_LDFLAGS = "-ObjC";
++				PRODUCT_NAME = ffi;
++				SDKROOT = iphoneos;
++				SKIP_INSTALL = YES;
++				VALIDATE_PRODUCT = YES;
++			};
++			name = Release;
++		};
++		DB13B1B11849DF520010F42D /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				ALWAYS_SEARCH_USER_PATHS = NO;
++				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
++				CLANG_CXX_LIBRARY = "libc++";
++				CLANG_ENABLE_OBJC_ARC = YES;
++				CLANG_WARN_BOOL_CONVERSION = YES;
++				CLANG_WARN_CONSTANT_CONVERSION = YES;
++				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
++				CLANG_WARN_EMPTY_BODY = YES;
++				CLANG_WARN_ENUM_CONVERSION = YES;
++				CLANG_WARN_INT_CONVERSION = YES;
++				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
++				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
++				COPY_PHASE_STRIP = NO;
++				DYLIB_COMPATIBILITY_VERSION = 1;
++				DYLIB_CURRENT_VERSION = 1;
++				GCC_C_LANGUAGE_STANDARD = gnu99;
++				GCC_DYNAMIC_NO_PIC = NO;
++				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
++				GCC_OPTIMIZATION_LEVEL = 0;
++				GCC_PREPROCESSOR_DEFINITIONS = (
++					"DEBUG=1",
++					"$(inherited)",
++				);
++				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
++				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
++				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
++				GCC_WARN_UNDECLARED_SELECTOR = YES;
++				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
++				GCC_WARN_UNUSED_FUNCTION = YES;
++				GCC_WARN_UNUSED_VARIABLE = YES;
++				HEADER_SEARCH_PATHS = (
++					"$(inherited)",
++					"darwin_osx/include",
++				);
++				MACOSX_DEPLOYMENT_TARGET = 10.6;
++				ONLY_ACTIVE_ARCH = YES;
++				OTHER_LDFLAGS = "-Wl,-no_compact_unwind";
++				PRODUCT_NAME = ffi;
++				SDKROOT = macosx;
++			};
++			name = Debug;
++		};
++		DB13B1B21849DF520010F42D /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				ALWAYS_SEARCH_USER_PATHS = NO;
++				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
++				CLANG_CXX_LIBRARY = "libc++";
++				CLANG_ENABLE_OBJC_ARC = YES;
++				CLANG_WARN_BOOL_CONVERSION = YES;
++				CLANG_WARN_CONSTANT_CONVERSION = YES;
++				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
++				CLANG_WARN_EMPTY_BODY = YES;
++				CLANG_WARN_ENUM_CONVERSION = YES;
++				CLANG_WARN_INT_CONVERSION = YES;
++				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
++				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
++				COPY_PHASE_STRIP = YES;
++				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
++				DYLIB_COMPATIBILITY_VERSION = 1;
++				DYLIB_CURRENT_VERSION = 1;
++				ENABLE_NS_ASSERTIONS = NO;
++				GCC_C_LANGUAGE_STANDARD = gnu99;
++				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
++				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
++				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
++				GCC_WARN_UNDECLARED_SELECTOR = YES;
++				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
++				GCC_WARN_UNUSED_FUNCTION = YES;
++				GCC_WARN_UNUSED_VARIABLE = YES;
++				HEADER_SEARCH_PATHS = (
++					"$(inherited)",
++					"darwin_osx/include",
++				);
++				MACOSX_DEPLOYMENT_TARGET = 10.6;
++				OTHER_LDFLAGS = "-Wl,-no_compact_unwind";
++				PRODUCT_NAME = ffi;
++				SDKROOT = macosx;
++			};
++			name = Release;
++		};
++/* End XCBuildConfiguration section */
++
++/* Begin XCConfigurationList section */
++		DB13B15F1849DEB70010F42D /* Build configuration list for PBXProject "libffi" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				DB13B1601849DEB70010F42D /* Debug */,
++				DB13B1611849DEB70010F42D /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++		DB13B18B1849DF1E0010F42D /* Build configuration list for PBXNativeTarget "libffi-iOS" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				DB13B1871849DF1E0010F42D /* Debug */,
++				DB13B1881849DF1E0010F42D /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++		DB13B1B01849DF520010F42D /* Build configuration list for PBXNativeTarget "libffi-Mac" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				DB13B1B11849DF520010F42D /* Debug */,
++				DB13B1B21849DF520010F42D /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++/* End XCConfigurationList section */
++	};
++	rootObject = DB13B15C1849DEB70010F42D /* Project object */;
++}
+diff --git a/js/src/ctypes/libffi/libtool-ldflags b/js/src/ctypes/libffi/libtool-ldflags
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/libtool-ldflags
+@@ -0,0 +1,106 @@
++#! /bin/sh
++
++# Script to translate LDFLAGS into a form suitable for use with libtool.
++
++# Copyright (C) 2005 Free Software Foundation, Inc.
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++# 
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++# 
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
++# MA 02110-1301, USA. 
++
++# Contributed by CodeSourcery, LLC.
++
++# This script is designed to be used from a Makefile that uses libtool
++# to build libraries as follows: 
++#
++#   LTLDFLAGS = $(shell libtool-ldflags $(LDFLAGS))
++#
++# Then, use (LTLDFLAGS) in place of $(LDFLAGS) in your link line.
++
++# The output of the script.  This string is built up as we process the
++# arguments.
++result=
++prev_arg=
++
++for arg
++do
++    case $arg in
++	-f*|--*)
++	    # Libtool does not ascribe any special meaning options
++	    # that begin with -f or with a double-dash.  So, it will
++	    # think these options are linker options, and prefix them
++	    # with "-Wl,".  Then, the compiler driver will ignore the
++	    # options.  So, we prefix these options with -Xcompiler to
++	    # make clear to libtool that they are in fact compiler
++	    # options.
++	    case $prev_arg in
++		-Xpreprocessor|-Xcompiler|-Xlinker)
++		    # This option is already prefixed; don't prefix it again.
++		    ;;
++		*)
++		    result="$result -Xcompiler"
++		    ;;
++	    esac
++	    ;;
++	*)
++	    # We do not want to add -Xcompiler to other options because
++	    # that would prevent libtool itself from recognizing them.
++	    ;;
++    esac
++    prev_arg=$arg
++
++    # If $(LDFLAGS) is (say):
++    #   a "b'c d" e
++    # then the user expects that:
++    #   $(LD) $(LDFLAGS)
++    # will pass three arguments to $(LD):
++    #   1) a
++    #   2) b'c d
++    #   3) e
++    # We must ensure, therefore, that the arguments are appropriately
++    # quoted so that using:
++    #   libtool --mode=link ... $(LTLDFLAGS)
++    # will result in the same number of arguments being passed to
++    # libtool.   In other words, when this script was invoked, the shell 
++    # removed one level of quoting, present in $(LDFLAGS); we have to put 
++    # it back.
++
++    # Quote any embedded single quotes.
++    case $arg in
++	*"'"*)
++	    # The following command creates the script:
++	    #   1s,^X,,;s|'|'"'"'|g
++	    # which removes a leading X, and then quotes and embedded single
++	    # quotes.
++	    sed_script="1s,^X,,;s|'|'\"'\"'|g"
++	    # Add a leading "X" so that if $arg starts with a dash,
++	    # the echo command will not try to interpret the argument
++	    # as a command-line option.
++	    arg="X$arg"
++	    # Generate the quoted string.
++	    quoted_arg=`echo "$arg" | sed -e "$sed_script"`
++	    ;;
++	*)
++	    quoted_arg=$arg
++	    ;;
++    esac
++    # Surround the entire argument with single quotes.
++    quoted_arg="'"$quoted_arg"'" 
++
++    # Add it to the string.
++    result="$result $quoted_arg"
++done
++
++# Output the string we have built up.
++echo "$result"
+diff --git a/js/src/ctypes/libffi/libtool-version b/js/src/ctypes/libffi/libtool-version
+--- a/js/src/ctypes/libffi/libtool-version
++++ b/js/src/ctypes/libffi/libtool-version
+@@ -21,9 +21,9 @@
+ #
+ # 5. If any interfaces have been added since the last public release,
+ #    then increment age.
+ #
+ # 6. If any interfaces have been removed since the last public
+ #    release, then set age to 0.
+ #
+ # CURRENT:REVISION:AGE
+-5:10:0
++6:1:0
+diff --git a/js/src/ctypes/libffi/ltmain.sh b/js/src/ctypes/libffi/ltmain.sh
+--- a/js/src/ctypes/libffi/ltmain.sh
++++ b/js/src/ctypes/libffi/ltmain.sh
+@@ -1,14 +1,14 @@
+-# Generated from ltmain.m4sh.
+-
+-# ltmain.sh (GNU libtool) 2.2.6b
++
++# libtool (GNU libtool) 2.4.2
+ # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+ 
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
++# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ # This is free software; see the source for copying conditions.  There is NO
+ # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ 
+ # GNU Libtool is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2 of the License, or
+ # (at your option) any later version.
+ #
+@@ -27,109 +27,125 @@
+ # can be downloaded from http://www.gnu.org/licenses/gpl.html,
+ # or obtained by writing to the Free Software Foundation, Inc.,
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ 
+ # Usage: $progname [OPTION]... [MODE-ARG]...
+ #
+ # Provide generalized library-building support services.
+ #
+-#     --config             show all configuration variables
+-#     --debug              enable verbose shell tracing
+-# -n, --dry-run            display commands without modifying any files
+-#     --features           display basic configuration information and exit
+-#     --mode=MODE          use operation mode MODE
+-#     --preserve-dup-deps  don't remove duplicate dependency libraries
+-#     --quiet, --silent    don't print informational messages
+-#     --tag=TAG            use configuration variables from tag TAG
+-# -v, --verbose            print informational messages (default)
+-#     --version            print version information
+-# -h, --help               print short or long help message
++#       --config             show all configuration variables
++#       --debug              enable verbose shell tracing
++#   -n, --dry-run            display commands without modifying any files
++#       --features           display basic configuration information and exit
++#       --mode=MODE          use operation mode MODE
++#       --preserve-dup-deps  don't remove duplicate dependency libraries
++#       --quiet, --silent    don't print informational messages
++#       --no-quiet, --no-silent
++#                            print informational messages (default)
++#       --no-warn            don't display warning messages
++#       --tag=TAG            use configuration variables from tag TAG
++#   -v, --verbose            print more informational messages than default
++#       --no-verbose         don't print the extra informational messages
++#       --version            print version information
++#   -h, --help, --help-all   print short, long, or detailed help message
+ #
+ # MODE must be one of the following:
+ #
+-#       clean              remove files from the build directory
+-#       compile            compile a source file into a libtool object
+-#       execute            automatically set library path, then run a program
+-#       finish             complete the installation of libtool libraries
+-#       install            install libraries or executables
+-#       link               create a library or an executable
+-#       uninstall          remove libraries from an installed directory
++#         clean              remove files from the build directory
++#         compile            compile a source file into a libtool object
++#         execute            automatically set library path, then run a program
++#         finish             complete the installation of libtool libraries
++#         install            install libraries or executables
++#         link               create a library or an executable
++#         uninstall          remove libraries from an installed directory
+ #
+-# MODE-ARGS vary depending on the MODE.
++# MODE-ARGS vary depending on the MODE.  When passed as first option,
++# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+ # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+ #
+ # When reporting a bug, please describe a test case to reproduce it and
+ # include the following information:
+ #
+-#       host-triplet:	$host
+-#       shell:		$SHELL
+-#       compiler:		$LTCC
+-#       compiler flags:		$LTCFLAGS
+-#       linker:		$LD (gnu? $with_gnu_ld)
+-#       $progname:		(GNU libtool) 2.2.6b
+-#       automake:		$automake_version
+-#       autoconf:		$autoconf_version
++#         host-triplet:	$host
++#         shell:		$SHELL
++#         compiler:		$LTCC
++#         compiler flags:		$LTCFLAGS
++#         linker:		$LD (gnu? $with_gnu_ld)
++#         $progname:	(GNU libtool) 2.4.2
++#         automake:	$automake_version
++#         autoconf:	$autoconf_version
+ #
+ # Report bugs to <bug-libtool@gnu.org>.
+-
+-PROGRAM=ltmain.sh
++# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
++# General help using GNU software: <http://www.gnu.org/gethelp/>.
++
++PROGRAM=libtool
+ PACKAGE=libtool
+-VERSION=2.2.6b
++VERSION=2.4.2
+ TIMESTAMP=""
+-package_revision=1.3017
++package_revision=1.3337
+ 
+ # Be Bourne compatible
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+   emulate sh
+   NULLCMD=:
+   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+   # is contrary to our usage.  Disable this feature.
+   alias -g '${1+"$@"}'='"$@"'
+   setopt NO_GLOB_SUBST
+ else
+   case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+ fi
+ BIN_SH=xpg4; export BIN_SH # for Tru64
+ DUALCASE=1; export DUALCASE # for MKS sh
+ 
++# A function that is used when there is no print builtin or printf.
++func_fallback_echo ()
++{
++  eval 'cat <<_LTECHO_EOF
++$1
++_LTECHO_EOF'
++}
++
+ # NLS nuisances: We save the old values to restore during execute mode.
+-# Only set LANG and LC_ALL to C if already set.
+-# These must not be set unconditionally because not all systems understand
+-# e.g. LANG=C (notably SCO).
+ lt_user_locale=
+ lt_safe_locale=
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+   eval "if test \"\${$lt_var+set}\" = set; then
+           save_$lt_var=\$$lt_var
+           $lt_var=C
+ 	  export $lt_var
+ 	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ 	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ 	fi"
+ done
++LC_ALL=C
++LANGUAGE=C
++export LANGUAGE LC_ALL
+ 
+ $lt_unset CDPATH
+ 
+ 
++# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
++# is ksh but when the shell is invoked as "sh" and the current value of
++# the _XPG environment variable is not equal to 1 (one), the special
++# positional parameter $0, within a function call, is the name of the
++# function.
++progpath="$0"
+ 
+ 
+ 
+ : ${CP="cp -f"}
+-: ${ECHO="echo"}
+-: ${EGREP="/bin/grep -E"}
+-: ${FGREP="/bin/grep -F"}
+-: ${GREP="/bin/grep"}
+-: ${LN_S="ln -s"}
++test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+ : ${MAKE="make"}
+ : ${MKDIR="mkdir"}
+ : ${MV="mv -f"}
+ : ${RM="rm -f"}
+-: ${SED="/bin/sed"}
+ : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+ : ${Xsed="$SED -e 1s/^X//"}
+ 
+ # Global variables:
+ EXIT_SUCCESS=0
+ EXIT_FAILURE=1
+ EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+ EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+@@ -139,69 +155,240 @@ exit_status=$EXIT_SUCCESS
+ # Make sure IFS has a sensible default
+ lt_nl='
+ '
+ IFS=" 	$lt_nl"
+ 
+ dirname="s,/[^/]*$,,"
+ basename="s,^.*/,,"
+ 
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
++    if test "X$func_dirname_result" = "X${1}"; then
++      func_dirname_result="${3}"
++    else
++      func_dirname_result="$func_dirname_result${2}"
++    fi
++} # func_dirname may be replaced by extended shell implementation
++
++
++# func_basename file
++func_basename ()
++{
++    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
++} # func_basename may be replaced by extended shell implementation
++
++
+ # func_dirname_and_basename file append nondir_replacement
+ # perform func_basename and func_dirname in a single function
+ # call:
+ #   dirname:  Compute the dirname of FILE.  If nonempty,
+ #             add APPEND to the result, otherwise set result
+ #             to NONDIR_REPLACEMENT.
+ #             value returned in "$func_dirname_result"
+ #   basename: Compute filename of FILE.
+ #             value retuned in "$func_basename_result"
+ # Implementation must be kept synchronized with func_dirname
+ # and func_basename. For efficiency, we do not delegate to
+ # those functions but instead duplicate the functionality here.
+ func_dirname_and_basename ()
+ {
+-  # Extract subdirectory from the argument.
+-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+-  if test "X$func_dirname_result" = "X${1}"; then
+-    func_dirname_result="${3}"
+-  else
+-    func_dirname_result="$func_dirname_result${2}"
++    # Extract subdirectory from the argument.
++    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
++    if test "X$func_dirname_result" = "X${1}"; then
++      func_dirname_result="${3}"
++    else
++      func_dirname_result="$func_dirname_result${2}"
++    fi
++    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
++} # func_dirname_and_basename may be replaced by extended shell implementation
++
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++    case ${2} in
++      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++    esac
++} # func_stripname may be replaced by extended shell implementation
++
++
++# These SED scripts presuppose an absolute path with a trailing slash.
++pathcar='s,^/\([^/]*\).*$,\1,'
++pathcdr='s,^/[^/]*,,'
++removedotparts=':dotsl
++		s@/\./@/@g
++		t dotsl
++		s,/\.$,/,'
++collapseslashes='s@/\{1,\}@/@g'
++finalslash='s,/*$,/,'
++
++# func_normal_abspath PATH
++# Remove doubled-up and trailing slashes, "." path components,
++# and cancel out any ".." path components in PATH after making
++# it an absolute path.
++#             value returned in "$func_normal_abspath_result"
++func_normal_abspath ()
++{
++  # Start from root dir and reassemble the path.
++  func_normal_abspath_result=
++  func_normal_abspath_tpath=$1
++  func_normal_abspath_altnamespace=
++  case $func_normal_abspath_tpath in
++    "")
++      # Empty path, that just means $cwd.
++      func_stripname '' '/' "`pwd`"
++      func_normal_abspath_result=$func_stripname_result
++      return
++    ;;
++    # The next three entries are used to spot a run of precisely
++    # two leading slashes without using negated character classes;
++    # we take advantage of case's first-match behaviour.
++    ///*)
++      # Unusual form of absolute path, do nothing.
++    ;;
++    //*)
++      # Not necessarily an ordinary path; POSIX reserves leading '//'
++      # and for example Cygwin uses it to access remote file shares
++      # over CIFS/SMB, so we conserve a leading double slash if found.
++      func_normal_abspath_altnamespace=/
++    ;;
++    /*)
++      # Absolute path, do nothing.
++    ;;
++    *)
++      # Relative path, prepend $cwd.
++      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
++    ;;
++  esac
++  # Cancel out all the simple stuff to save iterations.  We also want
++  # the path to end with a slash for ease of parsing, so make sure
++  # there is one (and only one) here.
++  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
++        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
++  while :; do
++    # Processed it all yet?
++    if test "$func_normal_abspath_tpath" = / ; then
++      # If we ascended to the root using ".." the result may be empty now.
++      if test -z "$func_normal_abspath_result" ; then
++        func_normal_abspath_result=/
++      fi
++      break
++    fi
++    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
++        -e "$pathcar"`
++    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
++        -e "$pathcdr"`
++    # Figure out what to do with it
++    case $func_normal_abspath_tcomponent in
++      "")
++        # Trailing empty path component, ignore it.
++      ;;
++      ..)
++        # Parent dir; strip last assembled component from result.
++        func_dirname "$func_normal_abspath_result"
++        func_normal_abspath_result=$func_dirname_result
++      ;;
++      *)
++        # Actual path component, append it.
++        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
++      ;;
++    esac
++  done
++  # Restore leading double-slash if one was found on entry.
++  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
++}
++
++# func_relative_path SRCDIR DSTDIR
++# generates a relative path from SRCDIR to DSTDIR, with a trailing
++# slash if non-empty, suitable for immediately appending a filename
++# without needing to append a separator.
++#             value returned in "$func_relative_path_result"
++func_relative_path ()
++{
++  func_relative_path_result=
++  func_normal_abspath "$1"
++  func_relative_path_tlibdir=$func_normal_abspath_result
++  func_normal_abspath "$2"
++  func_relative_path_tbindir=$func_normal_abspath_result
++
++  # Ascend the tree starting from libdir
++  while :; do
++    # check if we have found a prefix of bindir
++    case $func_relative_path_tbindir in
++      $func_relative_path_tlibdir)
++        # found an exact match
++        func_relative_path_tcancelled=
++        break
++        ;;
++      $func_relative_path_tlibdir*)
++        # found a matching prefix
++        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
++        func_relative_path_tcancelled=$func_stripname_result
++        if test -z "$func_relative_path_result"; then
++          func_relative_path_result=.
++        fi
++        break
++        ;;
++      *)
++        func_dirname $func_relative_path_tlibdir
++        func_relative_path_tlibdir=${func_dirname_result}
++        if test "x$func_relative_path_tlibdir" = x ; then
++          # Have to descend all the way to the root!
++          func_relative_path_result=../$func_relative_path_result
++          func_relative_path_tcancelled=$func_relative_path_tbindir
++          break
++        fi
++        func_relative_path_result=../$func_relative_path_result
++        ;;
++    esac
++  done
++
++  # Now calculate path; take care to avoid doubling-up slashes.
++  func_stripname '' '/' "$func_relative_path_result"
++  func_relative_path_result=$func_stripname_result
++  func_stripname '/' '/' "$func_relative_path_tcancelled"
++  if test "x$func_stripname_result" != x ; then
++    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+   fi
+-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+-}
+-
+-# Generated shell functions inserted here.
+-
+-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+-# is ksh but when the shell is invoked as "sh" and the current value of
+-# the _XPG environment variable is not equal to 1 (one), the special
+-# positional parameter $0, within a function call, is the name of the
+-# function.
+-progpath="$0"
++
++  # Normalisation. If bindir is libdir, return empty string,
++  # else relative path ending with a slash; either way, target
++  # file name can be directly appended.
++  if test ! -z "$func_relative_path_result"; then
++    func_stripname './' '' "$func_relative_path_result/"
++    func_relative_path_result=$func_stripname_result
++  fi
++}
+ 
+ # The name of this program:
+-# In the unlikely event $progname began with a '-', it would play havoc with
+-# func_echo (imagine progname=-n), so we prepend ./ in that case:
+ func_dirname_and_basename "$progpath"
+ progname=$func_basename_result
+-case $progname in
+-  -*) progname=./$progname ;;
+-esac
+ 
+ # Make sure we have an absolute path for reexecution:
+ case $progpath in
+   [\\/]*|[A-Za-z]:\\*) ;;
+   *[\\/]*)
+      progdir=$func_dirname_result
+      progdir=`cd "$progdir" && pwd`
+      progpath="$progdir/$progname"
+      ;;
+   *)
+      save_IFS="$IFS"
+-     IFS=:
++     IFS=${PATH_SEPARATOR-:}
+      for progdir in $PATH; do
+        IFS="$save_IFS"
+        test -x "$progdir/$progname" && break
+      done
+      IFS="$save_IFS"
+      test -n "$progdir" || progdir=`pwd`
+      progpath="$progdir/$progname"
+      ;;
+@@ -210,16 +397,25 @@ esac
+ # Sed substitution that helps us do robust quoting.  It backslashifies
+ # metacharacters that are still active within double-quoted strings.
+ Xsed="${SED}"' -e 1s/^X//'
+ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+ 
+ # Same as above, but do not quote variable references.
+ double_quote_subst='s/\(["`\\]\)/\\\1/g'
+ 
++# Sed substitution that turns a string into a regex matching for the
++# string literally.
++sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
++
++# Sed substitution that converts a w32 file name or path
++# which contains forward slashes, into one that contains
++# (escaped) backslashes.  A very naive implementation.
++lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
++
+ # Re-`\' parameter expansions in output of double_quote_subst that were
+ # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+ # in input to double_quote_subst, that '$' was protected from expansion.
+ # Since each input `\' is now two `\'s, look for any number of runs of
+ # four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+ bs='\\'
+ bs2='\\\\'
+ bs4='\\\\\\\\'
+@@ -238,43 +434,50 @@ opt_quiet=false
+ opt_verbose=false
+ opt_warning=:
+ 
+ # func_echo arg...
+ # Echo program name prefixed message, along with the current mode
+ # name if it has been set yet.
+ func_echo ()
+ {
+-    $ECHO "$progname${mode+: }$mode: $*"
++    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+ }
+ 
+ # func_verbose arg...
+ # Echo program name prefixed message in verbose mode only.
+ func_verbose ()
+ {
+     $opt_verbose && func_echo ${1+"$@"}
+ 
+     # A bug in bash halts the script if the last line of a function
+     # fails when set -e is in force, so we need another command to
+     # work around that:
+     :
+ }
+ 
++# func_echo_all arg...
++# Invoke $ECHO with all args, space-separated.
++func_echo_all ()
++{
++    $ECHO "$*"
++}
++
+ # func_error arg...
+ # Echo program name prefixed message to standard error.
+ func_error ()
+ {
+-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
++    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+ }
+ 
+ # func_warning arg...
+ # Echo program name prefixed warning message to standard error.
+ func_warning ()
+ {
+-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
++    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+ 
+     # bash bug again:
+     :
+ }
+ 
+ # func_fatal_error arg...
+ # Echo program name prefixed message to standard error, and exit.
+ func_fatal_error ()
+@@ -321,19 +524,19 @@ func_mkdir_p ()
+         # ...make a list in topmost first order.  Use a colon delimited
+ 	# list incase some portion of path contains whitespace.
+         my_dir_list="$my_directory_path:$my_dir_list"
+ 
+         # If the last portion added has no slash in it, the list is done
+         case $my_directory_path in */*) ;; *) break ;; esac
+ 
+         # ...otherwise throw away the child directory and loop
+-        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
++        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+       done
+-      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
++      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+ 
+       save_mkdir_p_IFS="$IFS"; IFS=':'
+       for my_dir in $my_dir_list; do
+ 	IFS="$save_mkdir_p_IFS"
+         # mkdir can fail with a `File exist' error if two processes
+         # try to create one of the directories concurrently.  Don't
+         # stop in that case!
+         $MKDIR "$my_dir" 2>/dev/null || :
+@@ -373,31 +576,31 @@ func_mktempdir ()
+         umask $save_mktempdir_umask
+       fi
+ 
+       # If we're not in dry-run mode, bomb out on failure
+       test -d "$my_tmpdir" || \
+         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+     fi
+ 
+-    $ECHO "X$my_tmpdir" | $Xsed
++    $ECHO "$my_tmpdir"
+ }
+ 
+ 
+ # func_quote_for_eval arg
+ # Aesthetically quote ARG to be evaled later.
+ # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+ # is double-quoted, suitable for a subsequent eval, whereas
+ # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+ # which are still active within double quotes backslashified.
+ func_quote_for_eval ()
+ {
+     case $1 in
+       *[\\\`\"\$]*)
+-	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
++	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+       *)
+         func_quote_for_eval_unquoted_result="$1" ;;
+     esac
+ 
+     case $func_quote_for_eval_unquoted_result in
+       # Double-quote args containing shell metacharacters to delay
+       # word splitting, command substitution and and variable
+       # expansion for a subsequent eval.
+@@ -414,17 +617,17 @@ func_quote_for_eval ()
+ 
+ # func_quote_for_expand arg
+ # Aesthetically quote ARG to be evaled later; same as above,
+ # but do not quote variable references.
+ func_quote_for_expand ()
+ {
+     case $1 in
+       *[\\\`\"]*)
+-	my_arg=`$ECHO "X$1" | $Xsed \
++	my_arg=`$ECHO "$1" | $SED \
+ 	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+       *)
+         my_arg="$1" ;;
+     esac
+ 
+     case $my_arg in
+       # Double-quote args containing shell metacharacters to delay
+       # word splitting and command substitution for a subsequent eval.
+@@ -483,131 +686,211 @@ func_show_eval_locale ()
+       my_status=$?
+       eval "$lt_safe_locale"
+       if test "$my_status" -eq 0; then :; else
+ 	eval "(exit $my_status); $my_fail_exp"
+       fi
+     fi
+ }
+ 
+-
+-
++# func_tr_sh
++# Turn $1 into a string suitable for a shell variable name.
++# Result is stored in $func_tr_sh_result.  All characters
++# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
++# if $1 begins with a digit, a '_' is prepended as well.
++func_tr_sh ()
++{
++  case $1 in
++  [0-9]* | *[!a-zA-Z0-9_]*)
++    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
++    ;;
++  * )
++    func_tr_sh_result=$1
++    ;;
++  esac
++}
+ 
+ 
+ # func_version
+ # Echo version message to standard output and exit.
+ func_version ()
+ {
+-    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
++    $opt_debug
++
++    $SED -n '/(C)/!b go
++	:more
++	/\./!{
++	  N
++	  s/\n# / /
++	  b more
++	}
++	:go
++	/^# '$PROGRAM' (GNU /,/# warranty; / {
+         s/^# //
+ 	s/^# *$//
+         s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+         p
+      }' < "$progpath"
+      exit $?
+ }
+ 
+ # func_usage
+ # Echo short help message to standard output and exit.
+ func_usage ()
+ {
+-    $SED -n '/^# Usage:/,/# -h/ {
++    $opt_debug
++
++    $SED -n '/^# Usage:/,/^#  *.*--help/ {
+         s/^# //
+ 	s/^# *$//
+ 	s/\$progname/'$progname'/
+ 	p
+     }' < "$progpath"
+-    $ECHO
++    echo
+     $ECHO "run \`$progname --help | more' for full usage"
+     exit $?
+ }
+ 
+-# func_help
+-# Echo long help message to standard output and exit.
++# func_help [NOEXIT]
++# Echo long help message to standard output and exit,
++# unless 'noexit' is passed as argument.
+ func_help ()
+ {
++    $opt_debug
++
+     $SED -n '/^# Usage:/,/# Report bugs to/ {
++	:print
+         s/^# //
+ 	s/^# *$//
+ 	s*\$progname*'$progname'*
+ 	s*\$host*'"$host"'*
+ 	s*\$SHELL*'"$SHELL"'*
+ 	s*\$LTCC*'"$LTCC"'*
+ 	s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ 	s*\$LD*'"$LD"'*
+ 	s/\$with_gnu_ld/'"$with_gnu_ld"'/
+-	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+-	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
++	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
++	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
+ 	p
+-     }' < "$progpath"
+-    exit $?
++	d
++     }
++     /^# .* home page:/b print
++     /^# General help using/b print
++     ' < "$progpath"
++    ret=$?
++    if test -z "$1"; then
++      exit $ret
++    fi
+ }
+ 
+ # func_missing_arg argname
+ # Echo program name prefixed message to standard error and set global
+ # exit_cmd.
+ func_missing_arg ()
+ {
+-    func_error "missing argument for $1"
++    $opt_debug
++
++    func_error "missing argument for $1."
+     exit_cmd=exit
+ }
+ 
++
++# func_split_short_opt shortopt
++# Set func_split_short_opt_name and func_split_short_opt_arg shell
++# variables after splitting SHORTOPT after the 2nd character.
++func_split_short_opt ()
++{
++    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
++    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
++
++    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
++    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
++} # func_split_short_opt may be replaced by extended shell implementation
++
++
++# func_split_long_opt longopt
++# Set func_split_long_opt_name and func_split_long_opt_arg shell
++# variables after splitting LONGOPT at the `=' sign.
++func_split_long_opt ()
++{
++    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
++    my_sed_long_arg='1s/^--[^=]*=//'
++
++    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
++    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
++} # func_split_long_opt may be replaced by extended shell implementation
++
+ exit_cmd=:
+ 
+ 
+ 
+ 
+ 
+-# Check that we have a working $ECHO.
+-if test "X$1" = X--no-reexec; then
+-  # Discard the --no-reexec flag, and continue.
+-  shift
+-elif test "X$1" = X--fallback-echo; then
+-  # Avoid inline document here, it may be left over
+-  :
+-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+-  # Yippee, $ECHO works!
+-  :
+-else
+-  # Restart under the correct shell, and then maybe $ECHO will work.
+-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+-fi
+-
+-if test "X$1" = X--fallback-echo; then
+-  # used as fallback echo
+-  shift
+-  cat <<EOF
+-$*
+-EOF
+-  exit $EXIT_SUCCESS
+-fi
+-
+ magic="%%%MAGIC variable%%%"
+ magic_exe="%%%MAGIC EXE variable%%%"
+ 
+ # Global variables.
+-# $mode is unset
+ nonopt=
+-execute_dlfiles=
+ preserve_args=
+ lo2o="s/\\.lo\$/.${objext}/"
+ o2lo="s/\\.${objext}\$/.lo/"
+ extracted_archives=
+ extracted_serial=0
+ 
+-opt_dry_run=false
+-opt_duplicate_deps=false
+-opt_silent=false
+-opt_debug=:
+-
+ # If this variable is set in any of the actions, the command in it
+ # will be execed at the end.  This prevents here-documents from being
+ # left over by shells.
+ exec_cmd=
+ 
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++    eval "${1}=\$${1}\${2}"
++} # func_append may be replaced by extended shell implementation
++
++# func_append_quoted var value
++# Quote VALUE and append to the end of shell variable VAR, separated
++# by a space.
++func_append_quoted ()
++{
++    func_quote_for_eval "${2}"
++    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
++} # func_append_quoted may be replaced by extended shell implementation
++
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++    func_arith_result=`expr "${@}"`
++} # func_arith may be replaced by extended shell implementation
++
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
++} # func_len may be replaced by extended shell implementation
++
++
++# func_lo2o object
++func_lo2o ()
++{
++    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
++} # func_lo2o may be replaced by extended shell implementation
++
++
++# func_xform libobj-or-source
++func_xform ()
++{
++    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
++} # func_xform may be replaced by extended shell implementation
++
++
+ # func_fatal_configuration arg...
+ # Echo program name prefixed message to standard error, followed by
+ # a configuration failure hint, and exit.
+ func_fatal_configuration ()
+ {
+     func_error ${1+"$@"}
+     func_error "See the $PACKAGE documentation for more information."
+     func_fatal_error "Fatal configuration error."
+@@ -631,26 +914,26 @@ func_config ()
+ 
+     exit $?
+ }
+ 
+ # func_features
+ # Display the features supported by this script.
+ func_features ()
+ {
+-    $ECHO "host: $host"
++    echo "host: $host"
+     if test "$build_libtool_libs" = yes; then
+-      $ECHO "enable shared libraries"
++      echo "enable shared libraries"
+     else
+-      $ECHO "disable shared libraries"
++      echo "disable shared libraries"
+     fi
+     if test "$build_old_libs" = yes; then
+-      $ECHO "enable static libraries"
++      echo "enable static libraries"
+     else
+-      $ECHO "disable static libraries"
++      echo "disable static libraries"
+     fi
+ 
+     exit $?
+ }
+ 
+ # func_enable_tag tagname
+ # Verify that TAGNAME is valid, and either flag an error and exit, or
+ # enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+@@ -687,143 +970,16 @@ func_enable_tag ()
+ 	eval "$extractedcf"
+       else
+ 	func_error "ignoring unknown tag $tagname"
+       fi
+       ;;
+   esac
+ }
+ 
+-# Parse options once, thoroughly.  This comes as soon as possible in
+-# the script to make things like `libtool --version' happen quickly.
+-{
+-
+-  # Shorthand for --mode=foo, only valid as the first argument
+-  case $1 in
+-  clean|clea|cle|cl)
+-    shift; set dummy --mode clean ${1+"$@"}; shift
+-    ;;
+-  compile|compil|compi|comp|com|co|c)
+-    shift; set dummy --mode compile ${1+"$@"}; shift
+-    ;;
+-  execute|execut|execu|exec|exe|ex|e)
+-    shift; set dummy --mode execute ${1+"$@"}; shift
+-    ;;
+-  finish|finis|fini|fin|fi|f)
+-    shift; set dummy --mode finish ${1+"$@"}; shift
+-    ;;
+-  install|instal|insta|inst|ins|in|i)
+-    shift; set dummy --mode install ${1+"$@"}; shift
+-    ;;
+-  link|lin|li|l)
+-    shift; set dummy --mode link ${1+"$@"}; shift
+-    ;;
+-  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+-    shift; set dummy --mode uninstall ${1+"$@"}; shift
+-    ;;
+-  esac
+-
+-  # Parse non-mode specific arguments:
+-  while test "$#" -gt 0; do
+-    opt="$1"
+-    shift
+-
+-    case $opt in
+-      --config)		func_config					;;
+-
+-      --debug)		preserve_args="$preserve_args $opt"
+-			func_echo "enabling shell trace mode"
+-			opt_debug='set -x'
+-			$opt_debug
+-			;;
+-
+-      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
+-			execute_dlfiles="$execute_dlfiles $1"
+-			shift
+-			;;
+-
+-      --dry-run | -n)	opt_dry_run=:					;;
+-      --features)       func_features					;;
+-      --finish)		mode="finish"					;;
+-
+-      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
+-			case $1 in
+-			  # Valid mode arguments:
+-			  clean)	;;
+-			  compile)	;;
+-			  execute)	;;
+-			  finish)	;;
+-			  install)	;;
+-			  link)		;;
+-			  relink)	;;
+-			  uninstall)	;;
+-
+-			  # Catch anything else as an error
+-			  *) func_error "invalid argument for $opt"
+-			     exit_cmd=exit
+-			     break
+-			     ;;
+-		        esac
+-
+-			mode="$1"
+-			shift
+-			;;
+-
+-      --preserve-dup-deps)
+-			opt_duplicate_deps=:				;;
+-
+-      --quiet|--silent)	preserve_args="$preserve_args $opt"
+-			opt_silent=:
+-			;;
+-
+-      --verbose| -v)	preserve_args="$preserve_args $opt"
+-			opt_silent=false
+-			;;
+-
+-      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
+-			preserve_args="$preserve_args $opt $1"
+-			func_enable_tag "$1"	# tagname is set here
+-			shift
+-			;;
+-
+-      # Separate optargs to long options:
+-      -dlopen=*|--mode=*|--tag=*)
+-			func_opt_split "$opt"
+-			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+-			shift
+-			;;
+-
+-      -\?|-h)		func_usage					;;
+-      --help)		opt_help=:					;;
+-      --version)	func_version					;;
+-
+-      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
+-
+-      *)		nonopt="$opt"
+-			break
+-			;;
+-    esac
+-  done
+-
+-
+-  case $host in
+-    *cygwin* | *mingw* | *pw32* | *cegcc*)
+-      # don't eliminate duplications in $postdeps and $predeps
+-      opt_duplicate_compiler_generated_deps=:
+-      ;;
+-    *)
+-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+-      ;;
+-  esac
+-
+-  # Having warned about all mis-specified options, bail out if
+-  # anything was wrong.
+-  $exit_cmd $EXIT_FAILURE
+-}
+-
+ # func_check_version_match
+ # Ensure that we are using m4 macros, and libtool script from the same
+ # release of libtool.
+ func_check_version_match ()
+ {
+   if test "$package_revision" != "$macro_revision"; then
+     if test "$VERSION" != "$macro_version"; then
+       if test -z "$macro_version"; then
+@@ -850,48 +1006,229 @@ func_check_version_match ()
+ _LT_EOF
+     fi
+ 
+     exit $EXIT_MISMATCH
+   fi
+ }
+ 
+ 
++# Shorthand for --mode=foo, only valid as the first argument
++case $1 in
++clean|clea|cle|cl)
++  shift; set dummy --mode clean ${1+"$@"}; shift
++  ;;
++compile|compil|compi|comp|com|co|c)
++  shift; set dummy --mode compile ${1+"$@"}; shift
++  ;;
++execute|execut|execu|exec|exe|ex|e)
++  shift; set dummy --mode execute ${1+"$@"}; shift
++  ;;
++finish|finis|fini|fin|fi|f)
++  shift; set dummy --mode finish ${1+"$@"}; shift
++  ;;
++install|instal|insta|inst|ins|in|i)
++  shift; set dummy --mode install ${1+"$@"}; shift
++  ;;
++link|lin|li|l)
++  shift; set dummy --mode link ${1+"$@"}; shift
++  ;;
++uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
++  shift; set dummy --mode uninstall ${1+"$@"}; shift
++  ;;
++esac
++
++
++
++# Option defaults:
++opt_debug=:
++opt_dry_run=false
++opt_config=false
++opt_preserve_dup_deps=false
++opt_features=false
++opt_finish=false
++opt_help=false
++opt_help_all=false
++opt_silent=:
++opt_warning=:
++opt_verbose=:
++opt_silent=false
++opt_verbose=false
++
++
++# Parse options once, thoroughly.  This comes as soon as possible in the
++# script to make things like `--version' happen as quickly as we can.
++{
++  # this just eases exit handling
++  while test $# -gt 0; do
++    opt="$1"
++    shift
++    case $opt in
++      --debug|-x)	opt_debug='set -x'
++			func_echo "enabling shell trace mode"
++			$opt_debug
++			;;
++      --dry-run|--dryrun|-n)
++			opt_dry_run=:
++			;;
++      --config)
++			opt_config=:
++func_config
++			;;
++      --dlopen|-dlopen)
++			optarg="$1"
++			opt_dlopen="${opt_dlopen+$opt_dlopen
++}$optarg"
++			shift
++			;;
++      --preserve-dup-deps)
++			opt_preserve_dup_deps=:
++			;;
++      --features)
++			opt_features=:
++func_features
++			;;
++      --finish)
++			opt_finish=:
++set dummy --mode finish ${1+"$@"}; shift
++			;;
++      --help)
++			opt_help=:
++			;;
++      --help-all)
++			opt_help_all=:
++opt_help=': help-all'
++			;;
++      --mode)
++			test $# = 0 && func_missing_arg $opt && break
++			optarg="$1"
++			opt_mode="$optarg"
++case $optarg in
++  # Valid mode arguments:
++  clean|compile|execute|finish|install|link|relink|uninstall) ;;
++
++  # Catch anything else as an error
++  *) func_error "invalid argument for $opt"
++     exit_cmd=exit
++     break
++     ;;
++esac
++			shift
++			;;
++      --no-silent|--no-quiet)
++			opt_silent=false
++func_append preserve_args " $opt"
++			;;
++      --no-warning|--no-warn)
++			opt_warning=false
++func_append preserve_args " $opt"
++			;;
++      --no-verbose)
++			opt_verbose=false
++func_append preserve_args " $opt"
++			;;
++      --silent|--quiet)
++			opt_silent=:
++func_append preserve_args " $opt"
++        opt_verbose=false
++			;;
++      --verbose|-v)
++			opt_verbose=:
++func_append preserve_args " $opt"
++opt_silent=false
++			;;
++      --tag)
++			test $# = 0 && func_missing_arg $opt && break
++			optarg="$1"
++			opt_tag="$optarg"
++func_append preserve_args " $opt $optarg"
++func_enable_tag "$optarg"
++			shift
++			;;
++
++      -\?|-h)		func_usage				;;
++      --help)		func_help				;;
++      --version)	func_version				;;
++
++      # Separate optargs to long options:
++      --*=*)
++			func_split_long_opt "$opt"
++			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
++			shift
++			;;
++
++      # Separate non-argument short options:
++      -\?*|-h*|-n*|-v*)
++			func_split_short_opt "$opt"
++			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
++			shift
++			;;
++
++      --)		break					;;
++      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
++      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
++    esac
++  done
++
++  # Validate options:
++
++  # save first non-option argument
++  if test "$#" -gt 0; then
++    nonopt="$opt"
++    shift
++  fi
++
++  # preserve --debug
++  test "$opt_debug" = : || func_append preserve_args " --debug"
++
++  case $host in
++    *cygwin* | *mingw* | *pw32* | *cegcc*)
++      # don't eliminate duplications in $postdeps and $predeps
++      opt_duplicate_compiler_generated_deps=:
++      ;;
++    *)
++      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
++      ;;
++  esac
++
++  $opt_help || {
++    # Sanity checks first:
++    func_check_version_match
++
++    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
++      func_fatal_configuration "not configured to build any kind of library"
++    fi
++
++    # Darwin sucks
++    eval std_shrext=\"$shrext_cmds\"
++
++    # Only execute mode is allowed to have -dlopen flags.
++    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
++      func_error "unrecognized option \`-dlopen'"
++      $ECHO "$help" 1>&2
++      exit $EXIT_FAILURE
++    fi
++
++    # Change the help message to a mode-specific one.
++    generic_help="$help"
++    help="Try \`$progname --help --mode=$opt_mode' for more information."
++  }
++
++
++  # Bail if the options were screwed
++  $exit_cmd $EXIT_FAILURE
++}
++
++
++
++
+ ## ----------- ##
+ ##    Main.    ##
+ ## ----------- ##
+ 
+-$opt_help || {
+-  # Sanity checks first:
+-  func_check_version_match
+-
+-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+-    func_fatal_configuration "not configured to build any kind of library"
+-  fi
+-
+-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+-
+-
+-  # Darwin sucks
+-  eval std_shrext=\"$shrext_cmds\"
+-
+-
+-  # Only execute mode is allowed to have -dlopen flags.
+-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+-    func_error "unrecognized option \`-dlopen'"
+-    $ECHO "$help" 1>&2
+-    exit $EXIT_FAILURE
+-  fi
+-
+-  # Change the help message to a mode-specific one.
+-  generic_help="$help"
+-  help="Try \`$progname --help --mode=$mode' for more information."
+-}
+-
+-
+ # func_lalib_p file
+ # True iff FILE is a libtool `.la' library or `.lo' object file.
+ # This function is only a basic sanity check; it will hardly flush out
+ # determined imposters.
+ func_lalib_p ()
+ {
+     test -f "$1" &&
+       $SED -e 4q "$1" 2>/dev/null \
+@@ -945,22 +1282,19 @@ func_ltwrapper_executable_p ()
+ }
+ 
+ # func_ltwrapper_scriptname file
+ # Assumes file is an ltwrapper_executable
+ # uses $file to determine the appropriate filename for a
+ # temporary ltwrapper_script.
+ func_ltwrapper_scriptname ()
+ {
+-    func_ltwrapper_scriptname_result=""
+-    if func_ltwrapper_executable_p "$1"; then
+-	func_dirname_and_basename "$1" "" "."
+-	func_stripname '' '.exe' "$func_basename_result"
+-	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+-    fi
++    func_dirname_and_basename "$1" "" "."
++    func_stripname '' '.exe' "$func_basename_result"
++    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+ }
+ 
+ # func_ltwrapper_p file
+ # True iff FILE is a libtool wrapper script or wrapper executable
+ # This function is only a basic sanity check; it will hardly flush out
+ # determined imposters.
+ func_ltwrapper_p ()
+ {
+@@ -996,50 +1330,85 @@ func_source ()
+     $opt_debug
+     case $1 in
+     */* | *\\*)	. "$1" ;;
+     *)		. "./$1" ;;
+     esac
+ }
+ 
+ 
++# func_resolve_sysroot PATH
++# Replace a leading = in PATH with a sysroot.  Store the result into
++# func_resolve_sysroot_result
++func_resolve_sysroot ()
++{
++  func_resolve_sysroot_result=$1
++  case $func_resolve_sysroot_result in
++  =*)
++    func_stripname '=' '' "$func_resolve_sysroot_result"
++    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
++    ;;
++  esac
++}
++
++# func_replace_sysroot PATH
++# If PATH begins with the sysroot, replace it with = and
++# store the result into func_replace_sysroot_result.
++func_replace_sysroot ()
++{
++  case "$lt_sysroot:$1" in
++  ?*:"$lt_sysroot"*)
++    func_stripname "$lt_sysroot" '' "$1"
++    func_replace_sysroot_result="=$func_stripname_result"
++    ;;
++  *)
++    # Including no sysroot.
++    func_replace_sysroot_result=$1
++    ;;
++  esac
++}
++
+ # func_infer_tag arg
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base compile
+ # command doesn't match the default compiler.
+ # arg is usually of the form 'gcc ...'
+ func_infer_tag ()
+ {
+     $opt_debug
+     if test -n "$available_tags" && test -z "$tagname"; then
+       CC_quoted=
+       for arg in $CC; do
+-        func_quote_for_eval "$arg"
+-	CC_quoted="$CC_quoted $func_quote_for_eval_result"
++	func_append_quoted CC_quoted "$arg"
+       done
++      CC_expanded=`func_echo_all $CC`
++      CC_quoted_expanded=`func_echo_all $CC_quoted`
+       case $@ in
+       # Blanks in the command may have been stripped by the calling shell,
+       # but not from the CC environment variable when configure was run.
+-      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
++      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
++      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+       # Blanks at the start of $base_compile will cause this to fail
+       # if we don't check for them as well.
+       *)
+ 	for z in $available_tags; do
+ 	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ 	    # Evaluate the configuration.
+ 	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ 	    CC_quoted=
+ 	    for arg in $CC; do
+ 	      # Double-quote args containing other shell metacharacters.
+-	      func_quote_for_eval "$arg"
+-	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
++	      func_append_quoted CC_quoted "$arg"
+ 	    done
++	    CC_expanded=`func_echo_all $CC`
++	    CC_quoted_expanded=`func_echo_all $CC_quoted`
+ 	    case "$@ " in
+-	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
++	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
++	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ 	      # The compiler in the base compile command matches
+ 	      # the one in the tagged configuration.
+ 	      # Assume this is the tagged configuration we want.
+ 	      tagname=$z
+ 	      break
+ 	      ;;
+ 	    esac
+ 	  fi
+@@ -1092,16 +1461,496 @@ pic_object=$write_lobj
+ # Name of the non-PIC object
+ non_pic_object=$write_oldobj
+ 
+ EOF
+       $MV "${write_libobj}T" "${write_libobj}"
+     }
+ }
+ 
++
++##################################################
++# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
++##################################################
++
++# func_convert_core_file_wine_to_w32 ARG
++# Helper function used by file name conversion functions when $build is *nix,
++# and $host is mingw, cygwin, or some other w32 environment. Relies on a
++# correctly configured wine environment available, with the winepath program
++# in $build's $PATH.
++#
++# ARG is the $build file name to be converted to w32 format.
++# Result is available in $func_convert_core_file_wine_to_w32_result, and will
++# be empty on error (or when ARG is empty)
++func_convert_core_file_wine_to_w32 ()
++{
++  $opt_debug
++  func_convert_core_file_wine_to_w32_result="$1"
++  if test -n "$1"; then
++    # Unfortunately, winepath does not exit with a non-zero error code, so we
++    # are forced to check the contents of stdout. On the other hand, if the
++    # command is not found, the shell will set an exit code of 127 and print
++    # *an error message* to stdout. So we must check for both error code of
++    # zero AND non-empty stdout, which explains the odd construction:
++    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
++    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
++      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
++        $SED -e "$lt_sed_naive_backslashify"`
++    else
++      func_convert_core_file_wine_to_w32_result=
++    fi
++  fi
++}
++# end: func_convert_core_file_wine_to_w32
++
++
++# func_convert_core_path_wine_to_w32 ARG
++# Helper function used by path conversion functions when $build is *nix, and
++# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
++# configured wine environment available, with the winepath program in $build's
++# $PATH. Assumes ARG has no leading or trailing path separator characters.
++#
++# ARG is path to be converted from $build format to win32.
++# Result is available in $func_convert_core_path_wine_to_w32_result.
++# Unconvertible file (directory) names in ARG are skipped; if no directory names
++# are convertible, then the result may be empty.
++func_convert_core_path_wine_to_w32 ()
++{
++  $opt_debug
++  # unfortunately, winepath doesn't convert paths, only file names
++  func_convert_core_path_wine_to_w32_result=""
++  if test -n "$1"; then
++    oldIFS=$IFS
++    IFS=:
++    for func_convert_core_path_wine_to_w32_f in $1; do
++      IFS=$oldIFS
++      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
++      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
++        if test -z "$func_convert_core_path_wine_to_w32_result"; then
++          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
++        else
++          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
++        fi
++      fi
++    done
++    IFS=$oldIFS
++  fi
++}
++# end: func_convert_core_path_wine_to_w32
++
++
++# func_cygpath ARGS...
++# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
++# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
++# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
++# (2), returns the Cygwin file name or path in func_cygpath_result (input
++# file name or path is assumed to be in w32 format, as previously converted
++# from $build's *nix or MSYS format). In case (3), returns the w32 file name
++# or path in func_cygpath_result (input file name or path is assumed to be in
++# Cygwin format). Returns an empty string on error.
++#
++# ARGS are passed to cygpath, with the last one being the file name or path to
++# be converted.
++#
++# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
++# environment variable; do not put it in $PATH.
++func_cygpath ()
++{
++  $opt_debug
++  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
++    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
++    if test "$?" -ne 0; then
++      # on failure, ensure result is empty
++      func_cygpath_result=
++    fi
++  else
++    func_cygpath_result=
++    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
++  fi
++}
++#end: func_cygpath
++
++
++# func_convert_core_msys_to_w32 ARG
++# Convert file name or path ARG from MSYS format to w32 format.  Return
++# result in func_convert_core_msys_to_w32_result.
++func_convert_core_msys_to_w32 ()
++{
++  $opt_debug
++  # awkward: cmd appends spaces to result
++  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
++    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
++}
++#end: func_convert_core_msys_to_w32
++
++
++# func_convert_file_check ARG1 ARG2
++# Verify that ARG1 (a file name in $build format) was converted to $host
++# format in ARG2. Otherwise, emit an error message, but continue (resetting
++# func_to_host_file_result to ARG1).
++func_convert_file_check ()
++{
++  $opt_debug
++  if test -z "$2" && test -n "$1" ; then
++    func_error "Could not determine host file name corresponding to"
++    func_error "  \`$1'"
++    func_error "Continuing, but uninstalled executables may not work."
++    # Fallback:
++    func_to_host_file_result="$1"
++  fi
++}
++# end func_convert_file_check
++
++
++# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
++# Verify that FROM_PATH (a path in $build format) was converted to $host
++# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
++# func_to_host_file_result to a simplistic fallback value (see below).
++func_convert_path_check ()
++{
++  $opt_debug
++  if test -z "$4" && test -n "$3"; then
++    func_error "Could not determine the host path corresponding to"
++    func_error "  \`$3'"
++    func_error "Continuing, but uninstalled executables may not work."
++    # Fallback.  This is a deliberately simplistic "conversion" and
++    # should not be "improved".  See libtool.info.
++    if test "x$1" != "x$2"; then
++      lt_replace_pathsep_chars="s|$1|$2|g"
++      func_to_host_path_result=`echo "$3" |
++        $SED -e "$lt_replace_pathsep_chars"`
++    else
++      func_to_host_path_result="$3"
++    fi
++  fi
++}
++# end func_convert_path_check
++
++
++# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
++# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
++# and appending REPL if ORIG matches BACKPAT.
++func_convert_path_front_back_pathsep ()
++{
++  $opt_debug
++  case $4 in
++  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
++    ;;
++  esac
++  case $4 in
++  $2 ) func_append func_to_host_path_result "$3"
++    ;;
++  esac
++}
++# end func_convert_path_front_back_pathsep
++
++
++##################################################
++# $build to $host FILE NAME CONVERSION FUNCTIONS #
++##################################################
++# invoked via `$to_host_file_cmd ARG'
++#
++# In each case, ARG is the path to be converted from $build to $host format.
++# Result will be available in $func_to_host_file_result.
++
++
++# func_to_host_file ARG
++# Converts the file name ARG from $build format to $host format. Return result
++# in func_to_host_file_result.
++func_to_host_file ()
++{
++  $opt_debug
++  $to_host_file_cmd "$1"
++}
++# end func_to_host_file
++
++
++# func_to_tool_file ARG LAZY
++# converts the file name ARG from $build format to toolchain format. Return
++# result in func_to_tool_file_result.  If the conversion in use is listed
++# in (the comma separated) LAZY, no conversion takes place.
++func_to_tool_file ()
++{
++  $opt_debug
++  case ,$2, in
++    *,"$to_tool_file_cmd",*)
++      func_to_tool_file_result=$1
++      ;;
++    *)
++      $to_tool_file_cmd "$1"
++      func_to_tool_file_result=$func_to_host_file_result
++      ;;
++  esac
++}
++# end func_to_tool_file
++
++
++# func_convert_file_noop ARG
++# Copy ARG to func_to_host_file_result.
++func_convert_file_noop ()
++{
++  func_to_host_file_result="$1"
++}
++# end func_convert_file_noop
++
++
++# func_convert_file_msys_to_w32 ARG
++# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
++# conversion to w32 is not available inside the cwrapper.  Returns result in
++# func_to_host_file_result.
++func_convert_file_msys_to_w32 ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    func_convert_core_msys_to_w32 "$1"
++    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_msys_to_w32
++
++
++# func_convert_file_cygwin_to_w32 ARG
++# Convert file name ARG from Cygwin to w32 format.  Returns result in
++# func_to_host_file_result.
++func_convert_file_cygwin_to_w32 ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
++    # LT_CYGPATH in this case.
++    func_to_host_file_result=`cygpath -m "$1"`
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_cygwin_to_w32
++
++
++# func_convert_file_nix_to_w32 ARG
++# Convert file name ARG from *nix to w32 format.  Requires a wine environment
++# and a working winepath. Returns result in func_to_host_file_result.
++func_convert_file_nix_to_w32 ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    func_convert_core_file_wine_to_w32 "$1"
++    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_nix_to_w32
++
++
++# func_convert_file_msys_to_cygwin ARG
++# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
++# Returns result in func_to_host_file_result.
++func_convert_file_msys_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    func_convert_core_msys_to_w32 "$1"
++    func_cygpath -u "$func_convert_core_msys_to_w32_result"
++    func_to_host_file_result="$func_cygpath_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_msys_to_cygwin
++
++
++# func_convert_file_nix_to_cygwin ARG
++# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
++# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
++# in func_to_host_file_result.
++func_convert_file_nix_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
++    func_convert_core_file_wine_to_w32 "$1"
++    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
++    func_to_host_file_result="$func_cygpath_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_nix_to_cygwin
++
++
++#############################################
++# $build to $host PATH CONVERSION FUNCTIONS #
++#############################################
++# invoked via `$to_host_path_cmd ARG'
++#
++# In each case, ARG is the path to be converted from $build to $host format.
++# The result will be available in $func_to_host_path_result.
++#
++# Path separators are also converted from $build format to $host format.  If
++# ARG begins or ends with a path separator character, it is preserved (but
++# converted to $host format) on output.
++#
++# All path conversion functions are named using the following convention:
++#   file name conversion function    : func_convert_file_X_to_Y ()
++#   path conversion function         : func_convert_path_X_to_Y ()
++# where, for any given $build/$host combination the 'X_to_Y' value is the
++# same.  If conversion functions are added for new $build/$host combinations,
++# the two new functions must follow this pattern, or func_init_to_host_path_cmd
++# will break.
++
++
++# func_init_to_host_path_cmd
++# Ensures that function "pointer" variable $to_host_path_cmd is set to the
++# appropriate value, based on the value of $to_host_file_cmd.
++to_host_path_cmd=
++func_init_to_host_path_cmd ()
++{
++  $opt_debug
++  if test -z "$to_host_path_cmd"; then
++    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
++    to_host_path_cmd="func_convert_path_${func_stripname_result}"
++  fi
++}
++
++
++# func_to_host_path ARG
++# Converts the path ARG from $build format to $host format. Return result
++# in func_to_host_path_result.
++func_to_host_path ()
++{
++  $opt_debug
++  func_init_to_host_path_cmd
++  $to_host_path_cmd "$1"
++}
++# end func_to_host_path
++
++
++# func_convert_path_noop ARG
++# Copy ARG to func_to_host_path_result.
++func_convert_path_noop ()
++{
++  func_to_host_path_result="$1"
++}
++# end func_convert_path_noop
++
++
++# func_convert_path_msys_to_w32 ARG
++# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
++# conversion to w32 is not available inside the cwrapper.  Returns result in
++# func_to_host_path_result.
++func_convert_path_msys_to_w32 ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # Remove leading and trailing path separator characters from ARG.  MSYS
++    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
++    # and winepath ignores them completely.
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
++    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
++    func_convert_path_check : ";" \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++  fi
++}
++# end func_convert_path_msys_to_w32
++
++
++# func_convert_path_cygwin_to_w32 ARG
++# Convert path ARG from Cygwin to w32 format.  Returns result in
++# func_to_host_file_result.
++func_convert_path_cygwin_to_w32 ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # See func_convert_path_msys_to_w32:
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
++    func_convert_path_check : ";" \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++  fi
++}
++# end func_convert_path_cygwin_to_w32
++
++
++# func_convert_path_nix_to_w32 ARG
++# Convert path ARG from *nix to w32 format.  Requires a wine environment and
++# a working winepath.  Returns result in func_to_host_file_result.
++func_convert_path_nix_to_w32 ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # See func_convert_path_msys_to_w32:
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
++    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
++    func_convert_path_check : ";" \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++  fi
++}
++# end func_convert_path_nix_to_w32
++
++
++# func_convert_path_msys_to_cygwin ARG
++# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
++# Returns result in func_to_host_file_result.
++func_convert_path_msys_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # See func_convert_path_msys_to_w32:
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
++    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
++    func_to_host_path_result="$func_cygpath_result"
++    func_convert_path_check : : \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
++  fi
++}
++# end func_convert_path_msys_to_cygwin
++
++
++# func_convert_path_nix_to_cygwin ARG
++# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
++# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
++# func_to_host_file_result.
++func_convert_path_nix_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # Remove leading and trailing path separator characters from
++    # ARG. msys behavior is inconsistent here, cygpath turns them
++    # into '.;' and ';.', and winepath ignores them completely.
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
++    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
++    func_to_host_path_result="$func_cygpath_result"
++    func_convert_path_check : : \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
++  fi
++}
++# end func_convert_path_nix_to_cygwin
++
++
+ # func_mode_compile arg...
+ func_mode_compile ()
+ {
+     $opt_debug
+     # Get the compilation command and the source file.
+     base_compile=
+     srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+     suppress_opt=yes
+@@ -1132,22 +1981,22 @@ func_mode_compile ()
+ 	-o)
+ 	  test -n "$libobj" && \
+ 	    func_fatal_error "you cannot specify \`-o' more than once"
+ 	  arg_mode=target
+ 	  continue
+ 	  ;;
+ 
+ 	-pie | -fpie | -fPIE)
+-          pie_flag="$pie_flag $arg"
++          func_append pie_flag " $arg"
+ 	  continue
+ 	  ;;
+ 
+ 	-shared | -static | -prefer-pic | -prefer-non-pic)
+-	  later="$later $arg"
++	  func_append later " $arg"
+ 	  continue
+ 	  ;;
+ 
+ 	-no-suppress)
+ 	  suppress_opt=no
+ 	  continue
+ 	  ;;
+ 
+@@ -1158,42 +2007,40 @@ func_mode_compile ()
+ 
+ 	-Wc,*)
+ 	  func_stripname '-Wc,' '' "$arg"
+ 	  args=$func_stripname_result
+ 	  lastarg=
+ 	  save_ifs="$IFS"; IFS=','
+ 	  for arg in $args; do
+ 	    IFS="$save_ifs"
+-	    func_quote_for_eval "$arg"
+-	    lastarg="$lastarg $func_quote_for_eval_result"
++	    func_append_quoted lastarg "$arg"
+ 	  done
+ 	  IFS="$save_ifs"
+ 	  func_stripname ' ' '' "$lastarg"
+ 	  lastarg=$func_stripname_result
+ 
+ 	  # Add the arguments to base_compile.
+-	  base_compile="$base_compile $lastarg"
++	  func_append base_compile " $lastarg"
+ 	  continue
+ 	  ;;
+ 
+ 	*)
+ 	  # Accept the current argument as the source file.
+ 	  # The previous "srcfile" becomes the current argument.
+ 	  #
+ 	  lastarg="$srcfile"
+ 	  srcfile="$arg"
+ 	  ;;
+ 	esac  #  case $arg
+ 	;;
+       esac    #  case $arg_mode
+ 
+       # Aesthetically quote the previous argument.
+-      func_quote_for_eval "$lastarg"
+-      base_compile="$base_compile $func_quote_for_eval_result"
++      func_append_quoted base_compile "$lastarg"
+     done # for arg
+ 
+     case $arg_mode in
+     arg)
+       func_fatal_error "you must specify an argument for -Xcompile"
+       ;;
+     target)
+       func_fatal_error "you must specify a target with \`-o'"
+@@ -1208,17 +2055,17 @@ func_mode_compile ()
+     esac
+ 
+     # Recognize several different file suffixes.
+     # If the user specifies -o file.o, it is replaced with file.lo
+     case $libobj in
+     *.[cCFSifmso] | \
+     *.ada | *.adb | *.ads | *.asm | \
+     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+-    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
++    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+       func_xform "$libobj"
+       libobj=$func_xform_result
+       ;;
+     esac
+ 
+     case $libobj in
+     *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+     *)
+@@ -1283,17 +2130,17 @@ func_mode_compile ()
+     if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+       # non-PIC code in shared libraries is not supported
+       pic_mode=default
+     fi
+ 
+     # Calculate the filename of the output object if compiler does
+     # not support -o with -c
+     if test "$compiler_c_o" = no; then
+-      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
++      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+       lockfile="$output_obj.lock"
+     else
+       output_obj=
+       need_locks=no
+       lockfile=
+     fi
+ 
+     # Lock this critical section if it is needed
+@@ -1314,27 +2161,26 @@ temporary object file, and libtool could
+ your compiler does not support \`-c' and \`-o' together.  If you
+ repeat this compilation, it may succeed, by chance, but you had better
+ avoid parallel builds (make -j) in this platform, or get a better
+ compiler."
+ 
+ 	$opt_dry_run || $RM $removelist
+ 	exit $EXIT_FAILURE
+       fi
+-      removelist="$removelist $output_obj"
++      func_append removelist " $output_obj"
+       $ECHO "$srcfile" > "$lockfile"
+     fi
+ 
+     $opt_dry_run || $RM $removelist
+-    removelist="$removelist $lockfile"
++    func_append removelist " $lockfile"
+     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+ 
+-    if test -n "$fix_srcfile_path"; then
+-      eval srcfile=\"$fix_srcfile_path\"
+-    fi
++    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
++    srcfile=$func_to_tool_file_result
+     func_quote_for_eval "$srcfile"
+     qsrcfile=$func_quote_for_eval_result
+ 
+     # Only build a PIC object if we are building libtool libraries.
+     if test "$build_libtool_libs" = yes; then
+       # Without this assignment, base_compile gets emptied.
+       fbsd_hideous_sh_bug=$base_compile
+ 
+@@ -1344,17 +2190,17 @@ compiler."
+ 	# Don't build PIC code
+ 	command="$base_compile $qsrcfile"
+       fi
+ 
+       func_mkdir_p "$xdir$objdir"
+ 
+       if test -z "$output_obj"; then
+ 	# Place PIC objects in $objdir
+-	command="$command -o $lobj"
++	func_append command " -o $lobj"
+       fi
+ 
+       func_show_eval_locale "$command"	\
+           'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+ 
+       if test "$need_locks" = warn &&
+ 	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ 	$ECHO "\
+@@ -1391,21 +2237,21 @@ compiler."
+     if test "$build_old_libs" = yes; then
+       if test "$pic_mode" != yes; then
+ 	# Don't build PIC code
+ 	command="$base_compile $qsrcfile$pie_flag"
+       else
+ 	command="$base_compile $qsrcfile $pic_flag"
+       fi
+       if test "$compiler_c_o" = yes; then
+-	command="$command -o $obj"
++	func_append command " -o $obj"
+       fi
+ 
+       # Suppress compiler output if we already did a PIC compilation.
+-      command="$command$suppress_output"
++      func_append command "$suppress_output"
+       func_show_eval_locale "$command" \
+         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+ 
+       if test "$need_locks" = warn &&
+ 	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ 	$ECHO "\
+ *** ERROR, $lockfile contains:
+ `cat $lockfile 2>/dev/null`
+@@ -1440,23 +2286,23 @@ compiler."
+         $RM "$lockfile"
+       fi
+     }
+ 
+     exit $EXIT_SUCCESS
+ }
+ 
+ $opt_help || {
+-test "$mode" = compile && func_mode_compile ${1+"$@"}
++  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+ }
+ 
+ func_mode_help ()
+ {
+     # We need to display help for each of the modes.
+-    case $mode in
++    case $opt_mode in
+       "")
+         # Generic help is extracted from the usage comments
+         # at the start of this file.
+         func_help
+         ;;
+ 
+       clean)
+         $ECHO \
+@@ -1477,20 +2323,21 @@ with it are deleted. Otherwise, only FIL
+ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+ 
+ Compile a source file into a libtool library object.
+ 
+ This mode accepts the following additional options:
+ 
+   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+   -no-suppress      do not suppress compiler output for multiple passes
+-  -prefer-pic       try to building PIC objects only
+-  -prefer-non-pic   try to building non-PIC objects only
++  -prefer-pic       try to build PIC objects only
++  -prefer-non-pic   try to build non-PIC objects only
+   -shared           do not build a \`.o' file suitable for static linking
+   -static           only build a \`.o' file suitable for static linking
++  -Wc,FLAG          pass FLAG directly to the compiler
+ 
+ COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+ from the given SOURCEFILE.
+ 
+ The output file name is determined by removing the directory component from
+ SOURCEFILE, then substituting the C source code suffix \`.c' with the
+ library object suffix, \`.lo'."
+         ;;
+@@ -1533,17 +2380,17 @@ the \`--dry-run' option if you just want
+ 
+ Install executables or libraries.
+ 
+ INSTALL-COMMAND is the installation command.  The first component should be
+ either the \`install' or \`cp' program.
+ 
+ The following components of INSTALL-COMMAND are treated specially:
+ 
+-  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
++  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+ 
+ The rest of the components are interpreted as arguments to that command (only
+ BSD-compatible install options are recognized)."
+         ;;
+ 
+       link)
+         $ECHO \
+ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+@@ -1553,16 +2400,18 @@ create an executable program.
+ 
+ LINK-COMMAND is a command using the C compiler that you would use to create
+ a program from several object files.
+ 
+ The following components of LINK-COMMAND are treated specially:
+ 
+   -all-static       do not do any dynamic linking at all
+   -avoid-version    do not add a version suffix if possible
++  -bindir BINDIR    specify path to binaries directory (for systems where
++                    libraries must be found in the PATH setting at runtime)
+   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+   -export-symbols SYMFILE
+                     try to export only the symbols listed in SYMFILE
+   -export-symbols-regex REGEX
+                     try to export only the symbols matching REGEX
+   -LLIBDIR          search LIBDIR for required installed libraries
+@@ -1581,16 +2430,21 @@ The following components of LINK-COMMAND
+   -shared           only do dynamic linking of libtool libraries
+   -shrext SUFFIX    override the standard shared library file extension
+   -static           do not do any dynamic linking of uninstalled libtool libraries
+   -static-libtool-libs
+                     do not do any dynamic linking of libtool libraries
+   -version-info CURRENT[:REVISION[:AGE]]
+                     specify library version info [each variable defaults to 0]
+   -weak LIBNAME     declare that the target provides the LIBNAME interface
++  -Wc,FLAG
++  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
++  -Wl,FLAG
++  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
++  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+ 
+ All other options (arguments beginning with \`-') are ignored.
+ 
+ Every other argument is treated as a filename.  Files ending in \`.la' are
+ treated as uninstalled libtool libraries, other files are standard or library
+ object files.
+ 
+ If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+@@ -1614,47 +2468,76 @@ RM is the name of the program to use to 
+ (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+ to RM.
+ 
+ If FILE is a libtool library, all the files associated with it are deleted.
+ Otherwise, only FILE itself is deleted using RM."
+         ;;
+ 
+       *)
+-        func_fatal_help "invalid operation mode \`$mode'"
++        func_fatal_help "invalid operation mode \`$opt_mode'"
+         ;;
+     esac
+ 
+-    $ECHO
++    echo
+     $ECHO "Try \`$progname --help' for more information about other modes."
+-
+-    exit $?
+-}
+-
+-  # Now that we've collected a possible --mode arg, show help if necessary
+-  $opt_help && func_mode_help
++}
++
++# Now that we've collected a possible --mode arg, show help if necessary
++if $opt_help; then
++  if test "$opt_help" = :; then
++    func_mode_help
++  else
++    {
++      func_help noexit
++      for opt_mode in compile link execute install finish uninstall clean; do
++	func_mode_help
++      done
++    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
++    {
++      func_help noexit
++      for opt_mode in compile link execute install finish uninstall clean; do
++	echo
++	func_mode_help
++      done
++    } |
++    sed '1d
++      /^When reporting/,/^Report/{
++	H
++	d
++      }
++      $x
++      /information about other modes/d
++      /more detailed .*MODE/d
++      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
++  fi
++  exit $?
++fi
+ 
+ 
+ # func_mode_execute arg...
+ func_mode_execute ()
+ {
+     $opt_debug
+     # The first argument is the command name.
+     cmd="$nonopt"
+     test -z "$cmd" && \
+       func_fatal_help "you must specify a COMMAND"
+ 
+     # Handle -dlopen flags immediately.
+-    for file in $execute_dlfiles; do
++    for file in $opt_dlopen; do
+       test -f "$file" \
+ 	|| func_fatal_help "\`$file' is not a file"
+ 
+       dir=
+       case $file in
+       *.la)
++	func_resolve_sysroot "$file"
++	file=$func_resolve_sysroot_result
++
+ 	# Check to see that this really is a libtool archive.
+ 	func_lalib_unsafe_p "$file" \
+ 	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+ 
+ 	# Read the libtool library.
+ 	dlname=
+ 	library_names=
+ 	func_source "$file"
+@@ -1666,17 +2549,17 @@ func_mode_execute ()
+ 	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+ 	  continue
+ 	fi
+ 
+ 	func_dirname "$file" "" "."
+ 	dir="$func_dirname_result"
+ 
+ 	if test -f "$dir/$objdir/$dlname"; then
+-	  dir="$dir/$objdir"
++	  func_append dir "/$objdir"
+ 	else
+ 	  if test ! -f "$dir/$dlname"; then
+ 	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ 	  fi
+ 	fi
+ 	;;
+ 
+       *.lo)
+@@ -1707,34 +2590,33 @@ func_mode_execute ()
+     # rather than running their programs.
+     libtool_execute_magic="$magic"
+ 
+     # Check if any of the arguments is a wrapper script.
+     args=
+     for file
+     do
+       case $file in
+-      -*) ;;
++      -* | *.la | *.lo ) ;;
+       *)
+ 	# Do a test to see if this is really a libtool program.
+ 	if func_ltwrapper_script_p "$file"; then
+ 	  func_source "$file"
+ 	  # Transform arg to wrapped name.
+ 	  file="$progdir/$program"
+ 	elif func_ltwrapper_executable_p "$file"; then
+ 	  func_ltwrapper_scriptname "$file"
+ 	  func_source "$func_ltwrapper_scriptname_result"
+ 	  # Transform arg to wrapped name.
+ 	  file="$progdir/$program"
+ 	fi
+ 	;;
+       esac
+       # Quote arguments (to preserve shell metacharacters).
+-      func_quote_for_eval "$file"
+-      args="$args $func_quote_for_eval_result"
++      func_append_quoted args "$file"
+     done
+ 
+     if test "X$opt_dry_run" = Xfalse; then
+       if test -n "$shlibpath_var"; then
+ 	# Export the shlibpath_var.
+ 	eval "export $shlibpath_var"
+       fi
+ 
+@@ -1749,185 +2631,245 @@ func_mode_execute ()
+       done
+ 
+       # Now prepare to actually exec the command.
+       exec_cmd="\$cmd$args"
+     else
+       # Display what would be done.
+       if test -n "$shlibpath_var"; then
+ 	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+-	$ECHO "export $shlibpath_var"
++	echo "export $shlibpath_var"
+       fi
+       $ECHO "$cmd$args"
+       exit $EXIT_SUCCESS
+     fi
+ }
+ 
+-test "$mode" = execute && func_mode_execute ${1+"$@"}
++test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+ 
+ 
+ # func_mode_finish arg...
+ func_mode_finish ()
+ {
+     $opt_debug
+-    libdirs="$nonopt"
++    libs=
++    libdirs=
+     admincmds=
+ 
++    for opt in "$nonopt" ${1+"$@"}
++    do
++      if test -d "$opt"; then
++	func_append libdirs " $opt"
++
++      elif test -f "$opt"; then
++	if func_lalib_unsafe_p "$opt"; then
++	  func_append libs " $opt"
++	else
++	  func_warning "\`$opt' is not a valid libtool archive"
++	fi
++
++      else
++	func_fatal_error "invalid argument \`$opt'"
++      fi
++    done
++
++    if test -n "$libs"; then
++      if test -n "$lt_sysroot"; then
++        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
++        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
++      else
++        sysroot_cmd=
++      fi
++
++      # Remove sysroot references
++      if $opt_dry_run; then
++        for lib in $libs; do
++          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
++        done
++      else
++        tmpdir=`func_mktempdir`
++        for lib in $libs; do
++	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
++	    > $tmpdir/tmp-la
++	  mv -f $tmpdir/tmp-la $lib
++	done
++        ${RM}r "$tmpdir"
++      fi
++    fi
++
+     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+-      for dir
+-      do
+-	libdirs="$libdirs $dir"
+-      done
+-
+       for libdir in $libdirs; do
+ 	if test -n "$finish_cmds"; then
+ 	  # Do each command in the finish commands.
+ 	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+ '"$cmd"'"'
+ 	fi
+ 	if test -n "$finish_eval"; then
+ 	  # Do the single finish_eval.
+ 	  eval cmds=\"$finish_eval\"
+-	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
++	  $opt_dry_run || eval "$cmds" || func_append admincmds "
+        $cmds"
+ 	fi
+       done
+     fi
+ 
+     # Exit here if they wanted silent mode.
+     $opt_silent && exit $EXIT_SUCCESS
+ 
+-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+-    $ECHO "Libraries have been installed in:"
+-    for libdir in $libdirs; do
+-      $ECHO "   $libdir"
+-    done
+-    $ECHO
+-    $ECHO "If you ever happen to want to link against installed libraries"
+-    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+-    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+-    $ECHO "flag during linking and do at least one of the following:"
+-    if test -n "$shlibpath_var"; then
+-      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+-      $ECHO "     during execution"
++    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
++      echo "----------------------------------------------------------------------"
++      echo "Libraries have been installed in:"
++      for libdir in $libdirs; do
++	$ECHO "   $libdir"
++      done
++      echo
++      echo "If you ever happen to want to link against installed libraries"
++      echo "in a given directory, LIBDIR, you must either use libtool, and"
++      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
++      echo "flag during linking and do at least one of the following:"
++      if test -n "$shlibpath_var"; then
++	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
++	echo "     during execution"
++      fi
++      if test -n "$runpath_var"; then
++	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
++	echo "     during linking"
++      fi
++      if test -n "$hardcode_libdir_flag_spec"; then
++	libdir=LIBDIR
++	eval flag=\"$hardcode_libdir_flag_spec\"
++
++	$ECHO "   - use the \`$flag' linker flag"
++      fi
++      if test -n "$admincmds"; then
++	$ECHO "   - have your system administrator run these commands:$admincmds"
++      fi
++      if test -f /etc/ld.so.conf; then
++	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
++      fi
++      echo
++
++      echo "See any operating system documentation about shared libraries for"
++      case $host in
++	solaris2.[6789]|solaris2.1[0-9])
++	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
++	  echo "pages."
++	  ;;
++	*)
++	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
++	  ;;
++      esac
++      echo "----------------------------------------------------------------------"
+     fi
+-    if test -n "$runpath_var"; then
+-      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+-      $ECHO "     during linking"
+-    fi
+-    if test -n "$hardcode_libdir_flag_spec"; then
+-      libdir=LIBDIR
+-      eval flag=\"$hardcode_libdir_flag_spec\"
+-
+-      $ECHO "   - use the \`$flag' linker flag"
+-    fi
+-    if test -n "$admincmds"; then
+-      $ECHO "   - have your system administrator run these commands:$admincmds"
+-    fi
+-    if test -f /etc/ld.so.conf; then
+-      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+-    fi
+-    $ECHO
+-
+-    $ECHO "See any operating system documentation about shared libraries for"
+-    case $host in
+-      solaris2.[6789]|solaris2.1[0-9])
+-        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+-	$ECHO "pages."
+-	;;
+-      *)
+-        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+-        ;;
+-    esac
+-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+     exit $EXIT_SUCCESS
+ }
+ 
+-test "$mode" = finish && func_mode_finish ${1+"$@"}
++test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+ 
+ 
+ # func_mode_install arg...
+ func_mode_install ()
+ {
+     $opt_debug
+     # There may be an optional sh(1) argument at the beginning of
+     # install_prog (especially on Windows NT).
+     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+        # Allow the use of GNU shtool's install command.
+-       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
++       case $nonopt in *shtool*) :;; *) false;; esac; then
+       # Aesthetically quote it.
+       func_quote_for_eval "$nonopt"
+       install_prog="$func_quote_for_eval_result "
+       arg=$1
+       shift
+     else
+       install_prog=
+       arg=$nonopt
+     fi
+ 
+     # The real first argument should be the name of the installation program.
+     # Aesthetically quote it.
+     func_quote_for_eval "$arg"
+-    install_prog="$install_prog$func_quote_for_eval_result"
++    func_append install_prog "$func_quote_for_eval_result"
++    install_shared_prog=$install_prog
++    case " $install_prog " in
++      *[\\\ /]cp\ *) install_cp=: ;;
++      *) install_cp=false ;;
++    esac
+ 
+     # We need to accept at least all the BSD install flags.
+     dest=
+     files=
+     opts=
+     prev=
+     install_type=
+     isdir=no
+     stripme=
++    no_mode=:
+     for arg
+     do
++      arg2=
+       if test -n "$dest"; then
+-	files="$files $dest"
++	func_append files " $dest"
+ 	dest=$arg
+ 	continue
+       fi
+ 
+       case $arg in
+       -d) isdir=yes ;;
+       -f)
+-	case " $install_prog " in
+-	*[\\\ /]cp\ *) ;;
+-	*) prev=$arg ;;
+-	esac
++	if $install_cp; then :; else
++	  prev=$arg
++	fi
+ 	;;
+       -g | -m | -o)
+ 	prev=$arg
+ 	;;
+       -s)
+ 	stripme=" -s"
+ 	continue
+ 	;;
+       -*)
+ 	;;
+       *)
+ 	# If the previous option needed an argument, then skip it.
+ 	if test -n "$prev"; then
++	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
++	    arg2=$install_override_mode
++	    no_mode=false
++	  fi
+ 	  prev=
+ 	else
+ 	  dest=$arg
+ 	  continue
+ 	fi
+ 	;;
+       esac
+ 
+       # Aesthetically quote the argument.
+       func_quote_for_eval "$arg"
+-      install_prog="$install_prog $func_quote_for_eval_result"
++      func_append install_prog " $func_quote_for_eval_result"
++      if test -n "$arg2"; then
++	func_quote_for_eval "$arg2"
++      fi
++      func_append install_shared_prog " $func_quote_for_eval_result"
+     done
+ 
+     test -z "$install_prog" && \
+       func_fatal_help "you must specify an install program"
+ 
+     test -n "$prev" && \
+       func_fatal_help "the \`$prev' option requires an argument"
+ 
++    if test -n "$install_override_mode" && $no_mode; then
++      if $install_cp; then :; else
++	func_quote_for_eval "$install_override_mode"
++	func_append install_shared_prog " -m $func_quote_for_eval_result"
++      fi
++    fi
++
+     if test -z "$files"; then
+       if test -z "$dest"; then
+ 	func_fatal_help "no file or destination specified"
+       else
+ 	func_fatal_help "you must specify a destination"
+       fi
+     fi
+ 
+@@ -1972,65 +2914,68 @@ func_mode_install ()
+     future_libdirs=
+     current_libdirs=
+     for file in $files; do
+ 
+       # Do each installation.
+       case $file in
+       *.$libext)
+ 	# Do the static libraries later.
+-	staticlibs="$staticlibs $file"
++	func_append staticlibs " $file"
+ 	;;
+ 
+       *.la)
++	func_resolve_sysroot "$file"
++	file=$func_resolve_sysroot_result
++
+ 	# Check to see that this really is a libtool archive.
+ 	func_lalib_unsafe_p "$file" \
+ 	  || func_fatal_help "\`$file' is not a valid libtool archive"
+ 
+ 	library_names=
+ 	old_library=
+ 	relink_command=
+ 	func_source "$file"
+ 
+ 	# Add the libdir to current_libdirs if it is the destination.
+ 	if test "X$destdir" = "X$libdir"; then
+ 	  case "$current_libdirs " in
+ 	  *" $libdir "*) ;;
+-	  *) current_libdirs="$current_libdirs $libdir" ;;
++	  *) func_append current_libdirs " $libdir" ;;
+ 	  esac
+ 	else
+ 	  # Note the libdir as a future libdir.
+ 	  case "$future_libdirs " in
+ 	  *" $libdir "*) ;;
+-	  *) future_libdirs="$future_libdirs $libdir" ;;
++	  *) func_append future_libdirs " $libdir" ;;
+ 	  esac
+ 	fi
+ 
+ 	func_dirname "$file" "/" ""
+ 	dir="$func_dirname_result"
+-	dir="$dir$objdir"
++	func_append dir "$objdir"
+ 
+ 	if test -n "$relink_command"; then
+ 	  # Determine the prefix the user has applied to our future dir.
+-	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
++	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+ 
+ 	  # Don't allow the user to place us outside of our expected
+ 	  # location b/c this prevents finding dependent libraries that
+ 	  # are installed to the same prefix.
+ 	  # At present, this check doesn't affect windows .dll's that
+ 	  # are installed into $libdir/../bin (currently, that works fine)
+ 	  # but it's something to keep an eye on.
+ 	  test "$inst_prefix_dir" = "$destdir" && \
+ 	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+ 
+ 	  if test -n "$inst_prefix_dir"; then
+ 	    # Stick the inst_prefix_dir data into the link command.
+-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
++	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ 	  else
+-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
++	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ 	  fi
+ 
+ 	  func_warning "relinking \`$file'"
+ 	  func_show_eval "$relink_command" \
+ 	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ 	fi
+ 
+ 	# See the names of the shared library.
+@@ -2038,17 +2983,17 @@ func_mode_install ()
+ 	if test -n "$1"; then
+ 	  realname="$1"
+ 	  shift
+ 
+ 	  srcname="$realname"
+ 	  test -n "$relink_command" && srcname="$realname"T
+ 
+ 	  # Install the shared library and build the symlinks.
+-	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
++	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 	      'exit $?'
+ 	  tstripme="$stripme"
+ 	  case $host_os in
+ 	  cygwin* | mingw* | pw32* | cegcc*)
+ 	    case $realname in
+ 	    *.dll.a)
+ 	      tstripme=""
+ 	      ;;
+@@ -2078,17 +3023,17 @@ func_mode_install ()
+ 
+ 	# Install the pseudo-library for information purposes.
+ 	func_basename "$file"
+ 	name="$func_basename_result"
+ 	instname="$dir/$name"i
+ 	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+ 
+ 	# Maybe install the static library, too.
+-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
++	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ 	;;
+ 
+       *.lo)
+ 	# Install (i.e. copy) a libtool object.
+ 
+ 	# Figure out destination file name, if it wasn't already specified.
+ 	if test -n "$destname"; then
+ 	  destfile="$destdir/$destname"
+@@ -2178,17 +3123,17 @@ func_mode_install ()
+ 
+ 	  finalize=yes
+ 	  for lib in $notinst_deplibs; do
+ 	    # Check to see that each library is installed.
+ 	    libdir=
+ 	    if test -f "$lib"; then
+ 	      func_source "$lib"
+ 	    fi
+-	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
++	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ 	    if test -n "$libdir" && test ! -f "$libfile"; then
+ 	      func_warning "\`$lib' has not been installed in \`$libdir'"
+ 	      finalize=no
+ 	    fi
+ 	  done
+ 
+ 	  relink_command=
+ 	  func_source "$wrapper"
+@@ -2197,17 +3142,17 @@ func_mode_install ()
+ 	  if test "$fast_install" = no && test -n "$relink_command"; then
+ 	    $opt_dry_run || {
+ 	      if test "$finalize" = yes; then
+ 	        tmpdir=`func_mktempdir`
+ 		func_basename "$file$stripped_ext"
+ 		file="$func_basename_result"
+ 	        outputname="$tmpdir/$file"
+ 	        # Replace the output file specification.
+-	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
++	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+ 
+ 	        $opt_silent || {
+ 	          func_quote_for_expand "$relink_command"
+ 		  eval "func_echo $func_quote_for_expand_result"
+ 	        }
+ 	        if eval "$relink_command"; then :
+ 	          else
+ 		  func_error "error: relink \`$file' with the above command before installing it"
+@@ -2216,17 +3161,17 @@ func_mode_install ()
+ 	        fi
+ 	        file="$outputname"
+ 	      else
+ 	        func_warning "cannot relink \`$file'"
+ 	      fi
+ 	    }
+ 	  else
+ 	    # Install the binary that we compiled earlier.
+-	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
++	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ 	  fi
+ 	fi
+ 
+ 	# remove .exe since cygwin /usr/bin/install will append another
+ 	# one anyway
+ 	case $install_prog,$host in
+ 	*/usr/bin/install*,*cygwin*)
+ 	  case $file:$destfile in
+@@ -2252,21 +3197,23 @@ func_mode_install ()
+     done
+ 
+     for file in $staticlibs; do
+       func_basename "$file"
+       name="$func_basename_result"
+ 
+       # Set up the ranlib parameters.
+       oldlib="$destdir/$name"
++      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
++      tool_oldlib=$func_to_tool_file_result
+ 
+       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+ 
+       if test -n "$stripme" && test -n "$old_striplib"; then
+-	func_show_eval "$old_striplib $oldlib" 'exit $?'
++	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+       fi
+ 
+       # Do each command in the postinstall commands.
+       func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+     done
+ 
+     test -n "$future_libdirs" && \
+       func_warning "remember to run \`$progname --finish$future_libdirs'"
+@@ -2275,17 +3222,17 @@ func_mode_install ()
+       # Maybe just do a dry run.
+       $opt_dry_run && current_libdirs=" -n$current_libdirs"
+       exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+     else
+       exit $EXIT_SUCCESS
+     fi
+ }
+ 
+-test "$mode" = install && func_mode_install ${1+"$@"}
++test "$opt_mode" = install && func_mode_install ${1+"$@"}
+ 
+ 
+ # func_generate_dlsyms outputname originator pic_p
+ # Extract symbols from dlprefiles and create ${outputname}S.o with
+ # a dlpreopen symbol table.
+ func_generate_dlsyms ()
+ {
+     $opt_debug
+@@ -2318,29 +3265,46 @@ func_generate_dlsyms ()
+ 	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+ 
+ #ifdef __cplusplus
+ extern \"C\" {
+ #endif
+ 
++#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
++#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
++#endif
++
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++   relocations are performed -- see ld's documentation on pseudo-relocs.  */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data.  */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
+ /* External symbol declarations for the compiler. */\
+ "
+ 
+ 	if test "$dlself" = yes; then
+ 	  func_verbose "generating symbol list for \`$output'"
+ 
+ 	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+ 
+ 	  # Add our own program objects to the symbol list.
+-	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ 	  for progfile in $progfiles; do
+-	    func_verbose "extracting global C symbols from \`$progfile'"
+-	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
++	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
++	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
++	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ 	  done
+ 
+ 	  if test -n "$exclude_expsyms"; then
+ 	    $opt_dry_run || {
+ 	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ 	      eval '$MV "$nlist"T "$nlist"'
+ 	    }
+ 	  fi
+@@ -2366,33 +3330,75 @@ extern \"C\" {
+ 	      esac
+ 	    }
+ 	  else
+ 	    $opt_dry_run || {
+ 	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ 	      eval '$MV "$nlist"T "$nlist"'
+ 	      case $host in
+-	        *cygwin | *mingw* | *cegcc* )
++	        *cygwin* | *mingw* | *cegcc* )
+ 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ 	          ;;
+ 	      esac
+ 	    }
+ 	  fi
+ 	fi
+ 
+ 	for dlprefile in $dlprefiles; do
+ 	  func_verbose "extracting global C symbols from \`$dlprefile'"
+ 	  func_basename "$dlprefile"
+ 	  name="$func_basename_result"
+-	  $opt_dry_run || {
+-	    eval '$ECHO ": $name " >> "$nlist"'
+-	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+-	  }
++          case $host in
++	    *cygwin* | *mingw* | *cegcc* )
++	      # if an import library, we need to obtain dlname
++	      if func_win32_import_lib_p "$dlprefile"; then
++	        func_tr_sh "$dlprefile"
++	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
++	        dlprefile_dlbasename=""
++	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
++	          # Use subshell, to avoid clobbering current variable values
++	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
++	          if test -n "$dlprefile_dlname" ; then
++	            func_basename "$dlprefile_dlname"
++	            dlprefile_dlbasename="$func_basename_result"
++	          else
++	            # no lafile. user explicitly requested -dlpreopen <import library>.
++	            $sharedlib_from_linklib_cmd "$dlprefile"
++	            dlprefile_dlbasename=$sharedlib_from_linklib_result
++	          fi
++	        fi
++	        $opt_dry_run || {
++	          if test -n "$dlprefile_dlbasename" ; then
++	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
++	          else
++	            func_warning "Could not compute DLL name from $name"
++	            eval '$ECHO ": $name " >> "$nlist"'
++	          fi
++	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
++	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
++	        }
++	      else # not an import lib
++	        $opt_dry_run || {
++	          eval '$ECHO ": $name " >> "$nlist"'
++	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++	        }
++	      fi
++	    ;;
++	    *)
++	      $opt_dry_run || {
++	        eval '$ECHO ": $name " >> "$nlist"'
++	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++	      }
++	    ;;
++          esac
+ 	done
+ 
+ 	$opt_dry_run || {
+ 	  # Make sure we have at least an empty file.
+ 	  test -f "$nlist" || : > "$nlist"
+ 
+ 	  if test -n "$exclude_expsyms"; then
+ 	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+@@ -2410,59 +3416,42 @@ extern \"C\" {
+ 	    :
+ 	  else
+ 	    $GREP -v "^: " < "$nlist" > "$nlist"S
+ 	  fi
+ 
+ 	  if test -f "$nlist"S; then
+ 	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ 	  else
+-	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
++	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ 	  fi
+ 
+-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
++	  echo >> "$output_objdir/$my_dlsyms" "\
+ 
+ /* The mapping between symbol names and symbols.  */
+ typedef struct {
+   const char *name;
+   void *address;
+ } lt_dlsymlist;
+-"
+-	  case $host in
+-	  *cygwin* | *mingw* | *cegcc* )
+-	    $ECHO >> "$output_objdir/$my_dlsyms" "\
+-/* DATA imports from DLLs on WIN32 con't be const, because
+-   runtime relocations are performed -- see ld's documentation
+-   on pseudo-relocs.  */"
+-	    lt_dlsym_const= ;;
+-	  *osf5*)
+-	    echo >> "$output_objdir/$my_dlsyms" "\
+-/* This system does not cope well with relocations in const data */"
+-	    lt_dlsym_const= ;;
+-	  *)
+-	    lt_dlsym_const=const ;;
+-	  esac
+-
+-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+-extern $lt_dlsym_const lt_dlsymlist
++extern LT_DLSYM_CONST lt_dlsymlist
+ lt_${my_prefix}_LTX_preloaded_symbols[];
+-$lt_dlsym_const lt_dlsymlist
++LT_DLSYM_CONST lt_dlsymlist
+ lt_${my_prefix}_LTX_preloaded_symbols[] =
+ {\
+   { \"$my_originator\", (void *) 0 },"
+ 
+ 	  case $need_lib_prefix in
+ 	  no)
+ 	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ 	    ;;
+ 	  *)
+ 	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ 	    ;;
+ 	  esac
+-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
++	  echo >> "$output_objdir/$my_dlsyms" "\
+   {0, (void *) 0}
+ };
+ 
+ /* This works around a problem in FreeBSD linker */
+ #ifdef FREEBSD_WORKAROUND
+ static const void *lt_preloaded_setup() {
+   return lt_${my_prefix}_LTX_preloaded_symbols;
+ }
+@@ -2479,94 +3468,97 @@ static const void *lt_preloaded_setup() 
+ 	*" -static "*) ;;
+ 	*)
+ 	  case $host in
+ 	  # compiling the symbol table file with pic_flag works around
+ 	  # a FreeBSD bug that causes programs to crash when -lm is
+ 	  # linked before any other PIC object.  But we must not use
+ 	  # pic_flag when linking with -static.  The problem exists in
+ 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
++	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ 	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ 	  *-*-hpux*)
+ 	    pic_flag_for_symtable=" $pic_flag"  ;;
+ 	  *)
+ 	    if test "X$my_pic_p" != Xno; then
+ 	      pic_flag_for_symtable=" $pic_flag"
+ 	    fi
+ 	    ;;
+ 	  esac
+ 	  ;;
+ 	esac
+ 	symtab_cflags=
+ 	for arg in $LTCFLAGS; do
+ 	  case $arg in
+ 	  -pie | -fpie | -fPIE) ;;
+-	  *) symtab_cflags="$symtab_cflags $arg" ;;
++	  *) func_append symtab_cflags " $arg" ;;
+ 	  esac
+ 	done
+ 
+ 	# Now compile the dynamic symbol file.
+ 	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+ 
+ 	# Clean up the generated files.
+ 	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+ 
+ 	# Transform the symbol file into the correct name.
+ 	symfileobj="$output_objdir/${my_outputname}S.$objext"
+ 	case $host in
+ 	*cygwin* | *mingw* | *cegcc* )
+ 	  if test -f "$output_objdir/$my_outputname.def"; then
+-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
++	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
++	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ 	  else
+-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
++	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
++	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ 	  fi
+ 	  ;;
+ 	*)
+-	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+-	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
++	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
++	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ 	  ;;
+ 	esac
+ 	;;
+       *)
+ 	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ 	;;
+       esac
+     else
+       # We keep going just in case the user didn't refer to
+       # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+       # really was required.
+ 
+       # Nullify the symbol file.
+-      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+-      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
++      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
++      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+     fi
+ }
+ 
+ # func_win32_libid arg
+ # return the library type of file 'arg'
+ #
+ # Need a lot of goo to handle *both* DLLs and import libs
+ # Has to be a shell function in order to 'eat' the argument
+ # that is supplied when $file_magic_command is called.
++# Despite the name, also deal with 64 bit binaries.
+ func_win32_libid ()
+ {
+   $opt_debug
+   win32_libid_type="unknown"
+   win32_fileres=`file -L $1 2>/dev/null`
+   case $win32_fileres in
+   *ar\ archive\ import\ library*) # definitely import
+     win32_libid_type="x86 archive import"
+     ;;
+   *ar\ archive*) # could be an import, or static
++    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+-       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+-      win32_nmres=`eval $NM -f posix -A $1 |
++       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
++      func_to_tool_file "$1" func_convert_file_msys_to_w32
++      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ 	$SED -n -e '
+ 	    1,100{
+ 		/ I /{
+ 		    s,.*,import,
+ 		    p
+ 		    q
+ 		}
+ 	    }'`
+@@ -2585,25 +3577,161 @@ func_win32_libid ()
+       win32_libid_type="x86 DLL"
+       ;;
+     esac
+     ;;
+   esac
+   $ECHO "$win32_libid_type"
+ }
+ 
++# func_cygming_dll_for_implib ARG
++#
++# Platform-specific function to extract the
++# name of the DLL associated with the specified
++# import library ARG.
++# Invoked by eval'ing the libtool variable
++#    $sharedlib_from_linklib_cmd
++# Result is available in the variable
++#    $sharedlib_from_linklib_result
++func_cygming_dll_for_implib ()
++{
++  $opt_debug
++  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
++}
++
++# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
++#
++# The is the core of a fallback implementation of a
++# platform-specific function to extract the name of the
++# DLL associated with the specified import library LIBNAME.
++#
++# SECTION_NAME is either .idata$6 or .idata$7, depending
++# on the platform and compiler that created the implib.
++#
++# Echos the name of the DLL associated with the
++# specified import library.
++func_cygming_dll_for_implib_fallback_core ()
++{
++  $opt_debug
++  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
++  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
++    $SED '/^Contents of section '"$match_literal"':/{
++      # Place marker at beginning of archive member dllname section
++      s/.*/====MARK====/
++      p
++      d
++    }
++    # These lines can sometimes be longer than 43 characters, but
++    # are always uninteresting
++    /:[	 ]*file format pe[i]\{,1\}-/d
++    /^In archive [^:]*:/d
++    # Ensure marker is printed
++    /^====MARK====/p
++    # Remove all lines with less than 43 characters
++    /^.\{43\}/!d
++    # From remaining lines, remove first 43 characters
++    s/^.\{43\}//' |
++    $SED -n '
++      # Join marker and all lines until next marker into a single line
++      /^====MARK====/ b para
++      H
++      $ b para
++      b
++      :para
++      x
++      s/\n//g
++      # Remove the marker
++      s/^====MARK====//
++      # Remove trailing dots and whitespace
++      s/[\. \t]*$//
++      # Print
++      /./p' |
++    # we now have a list, one entry per line, of the stringified
++    # contents of the appropriate section of all members of the
++    # archive which possess that section. Heuristic: eliminate
++    # all those which have a first or second character that is
++    # a '.' (that is, objdump's representation of an unprintable
++    # character.) This should work for all archives with less than
++    # 0x302f exports -- but will fail for DLLs whose name actually
++    # begins with a literal '.' or a single character followed by
++    # a '.'.
++    #
++    # Of those that remain, print the first one.
++    $SED -e '/^\./d;/^.\./d;q'
++}
++
++# func_cygming_gnu_implib_p ARG
++# This predicate returns with zero status (TRUE) if
++# ARG is a GNU/binutils-style import library. Returns
++# with nonzero status (FALSE) otherwise.
++func_cygming_gnu_implib_p ()
++{
++  $opt_debug
++  func_to_tool_file "$1" func_convert_file_msys_to_w32
++  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
++  test -n "$func_cygming_gnu_implib_tmp"
++}
++
++# func_cygming_ms_implib_p ARG
++# This predicate returns with zero status (TRUE) if
++# ARG is an MS-style import library. Returns
++# with nonzero status (FALSE) otherwise.
++func_cygming_ms_implib_p ()
++{
++  $opt_debug
++  func_to_tool_file "$1" func_convert_file_msys_to_w32
++  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
++  test -n "$func_cygming_ms_implib_tmp"
++}
++
++# func_cygming_dll_for_implib_fallback ARG
++# Platform-specific function to extract the
++# name of the DLL associated with the specified
++# import library ARG.
++#
++# This fallback implementation is for use when $DLLTOOL
++# does not support the --identify-strict option.
++# Invoked by eval'ing the libtool variable
++#    $sharedlib_from_linklib_cmd
++# Result is available in the variable
++#    $sharedlib_from_linklib_result
++func_cygming_dll_for_implib_fallback ()
++{
++  $opt_debug
++  if func_cygming_gnu_implib_p "$1" ; then
++    # binutils import library
++    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
++  elif func_cygming_ms_implib_p "$1" ; then
++    # ms-generated import library
++    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
++  else
++    # unknown
++    sharedlib_from_linklib_result=""
++  fi
++}
+ 
+ 
+ # func_extract_an_archive dir oldlib
+ func_extract_an_archive ()
+ {
+     $opt_debug
+     f_ex_an_ar_dir="$1"; shift
+     f_ex_an_ar_oldlib="$1"
+-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
++    if test "$lock_old_archive_extraction" = yes; then
++      lockfile=$f_ex_an_ar_oldlib.lock
++      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
++	func_echo "Waiting for $lockfile to be removed"
++	sleep 2
++      done
++    fi
++    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
++		   'stat=$?; rm -f "$lockfile"; exit $stat'
++    if test "$lock_old_archive_extraction" = yes; then
++      $opt_dry_run || rm -f "$lockfile"
++    fi
+     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+      :
+     else
+       func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+     fi
+ }
+ 
+ 
+@@ -2664,471 +3792,349 @@ func_extract_archives ()
+ 	      cd "$darwin_curdir"
+ 	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ 	    done # $darwin_arches
+             ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ 	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ 	    darwin_file=
+ 	    darwin_files=
+ 	    for darwin_file in $darwin_filelist; do
+-	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
++	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ 	      $LIPO -create -output "$darwin_file" $darwin_files
+ 	    done # $darwin_filelist
+ 	    $RM -rf unfat-$$
+ 	    cd "$darwin_orig_dir"
+ 	  else
+ 	    cd $darwin_orig_dir
+ 	    func_extract_an_archive "$my_xdir" "$my_xabs"
+ 	  fi # $darwin_arches
+ 	} # !$opt_dry_run
+ 	;;
+       *)
+         func_extract_an_archive "$my_xdir" "$my_xabs"
+ 	;;
+       esac
+-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
++      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+     done
+ 
+     func_extract_archives_result="$my_oldobjs"
+ }
+ 
+ 
+-
+-# func_emit_wrapper_part1 [arg=no]
+-#
+-# Emit the first part of a libtool wrapper script on stdout.
+-# For more information, see the description associated with
+-# func_emit_wrapper(), below.
+-func_emit_wrapper_part1 ()
+-{
+-	func_emit_wrapper_part1_arg1=no
+-	if test -n "$1" ; then
+-	  func_emit_wrapper_part1_arg1=$1
+-	fi
+-
+-	$ECHO "\
+-#! $SHELL
+-
+-# $output - temporary wrapper script for $objdir/$outputname
+-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+-#
+-# The $output program cannot be directly executed until all the libtool
+-# libraries that it depends on are installed.
+-#
+-# This wrapper script should never be moved out of the build directory.
+-# If it is, it will not operate correctly.
+-
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-Xsed='${SED} -e 1s/^X//'
+-sed_quote_subst='$sed_quote_subst'
+-
+-# Be Bourne compatible
+-if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+-  emulate sh
+-  NULLCMD=:
+-  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+-  # is contrary to our usage.  Disable this feature.
+-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+-  setopt NO_GLOB_SUBST
+-else
+-  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+-fi
+-BIN_SH=xpg4; export BIN_SH # for Tru64
+-DUALCASE=1; export DUALCASE # for MKS sh
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-relink_command=\"$relink_command\"
+-
+-# This environment variable determines our operation mode.
+-if test \"\$libtool_install_magic\" = \"$magic\"; then
+-  # install mode needs the following variables:
+-  generated_by_libtool_version='$macro_version'
+-  notinst_deplibs='$notinst_deplibs'
+-else
+-  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+-    ECHO=\"$qecho\"
+-    file=\"\$0\"
+-    # Make sure echo works.
+-    if test \"X\$1\" = X--no-reexec; then
+-      # Discard the --no-reexec flag, and continue.
+-      shift
+-    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+-      # Yippee, \$ECHO works!
+-      :
+-    else
+-      # Restart under the correct shell, and then maybe \$ECHO will work.
+-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+-    fi
+-  fi\
+-"
+-	$ECHO "\
+-
+-  # Find the directory that this script lives in.
+-  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+-
+-  # Follow symbolic links until we get to the real thisdir.
+-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+-  while test -n \"\$file\"; do
+-    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+-
+-    # If there was a directory component, then change thisdir.
+-    if test \"x\$destdir\" != \"x\$file\"; then
+-      case \"\$destdir\" in
+-      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+-      *) thisdir=\"\$thisdir/\$destdir\" ;;
+-      esac
+-    fi
+-
+-    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+-  done
+-"
+-}
+-# end: func_emit_wrapper_part1
+-
+-# func_emit_wrapper_part2 [arg=no]
+-#
+-# Emit the second part of a libtool wrapper script on stdout.
+-# For more information, see the description associated with
+-# func_emit_wrapper(), below.
+-func_emit_wrapper_part2 ()
+-{
+-	func_emit_wrapper_part2_arg1=no
+-	if test -n "$1" ; then
+-	  func_emit_wrapper_part2_arg1=$1
+-	fi
+-
+-	$ECHO "\
+-
+-  # Usually 'no', except on cygwin/mingw when embedded into
+-  # the cwrapper.
+-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+-  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+-    # special case for '.'
+-    if test \"\$thisdir\" = \".\"; then
+-      thisdir=\`pwd\`
+-    fi
+-    # remove .libs from thisdir
+-    case \"\$thisdir\" in
+-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+-    $objdir )   thisdir=. ;;
+-    esac
+-  fi
+-
+-  # Try to get the absolute directory name.
+-  absdir=\`cd \"\$thisdir\" && pwd\`
+-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+-"
+-
+-	if test "$fast_install" = yes; then
+-	  $ECHO "\
+-  program=lt-'$outputname'$exeext
+-  progdir=\"\$thisdir/$objdir\"
+-
+-  if test ! -f \"\$progdir/\$program\" ||
+-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+-
+-    file=\"\$\$-\$program\"
+-
+-    if test ! -d \"\$progdir\"; then
+-      $MKDIR \"\$progdir\"
+-    else
+-      $RM \"\$progdir/\$file\"
+-    fi"
+-
+-	  $ECHO "\
+-
+-    # relink executable if necessary
+-    if test -n \"\$relink_command\"; then
+-      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+-      else
+-	$ECHO \"\$relink_command_output\" >&2
+-	$RM \"\$progdir/\$file\"
+-	exit 1
+-      fi
+-    fi
+-
+-    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+-    { $RM \"\$progdir/\$program\";
+-      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+-    $RM \"\$progdir/\$file\"
+-  fi"
+-	else
+-	  $ECHO "\
+-  program='$outputname'
+-  progdir=\"\$thisdir/$objdir\"
+-"
+-	fi
+-
+-	$ECHO "\
+-
+-  if test -f \"\$progdir/\$program\"; then"
+-
+-	# Export our shlibpath_var if we have one.
+-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+-	  $ECHO "\
+-    # Add our own library path to $shlibpath_var
+-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+-
+-    # Some systems cannot cope with colon-terminated $shlibpath_var
+-    # The second colon is a workaround for a bug in BeOS R4 sed
+-    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+-
+-    export $shlibpath_var
+-"
+-	fi
+-
+-	# fixup the dll searchpath if we need to.
+-	if test -n "$dllsearchpath"; then
+-	  $ECHO "\
+-    # Add the dll search path components to the executable PATH
+-    PATH=$dllsearchpath:\$PATH
+-"
+-	fi
+-
+-	$ECHO "\
+-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+-      # Run the actual program with our arguments.
+-"
+-	case $host in
+-	# Backslashes separate directories on plain windows
+-	*-*-mingw | *-*-os2* | *-cegcc*)
+-	  $ECHO "\
+-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+-"
+-	  ;;
+-
+-	*)
+-	  $ECHO "\
+-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+-"
+-	  ;;
+-	esac
+-	$ECHO "\
+-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+-      exit 1
+-    fi
+-  else
+-    # The program doesn't exist.
+-    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+-    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+-    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+-    exit 1
+-  fi
+-fi\
+-"
+-}
+-# end: func_emit_wrapper_part2
+-
+-
+ # func_emit_wrapper [arg=no]
+ #
+ # Emit a libtool wrapper script on stdout.
+ # Don't directly open a file because we may want to
+ # incorporate the script contents within a cygwin/mingw
+ # wrapper executable.  Must ONLY be called from within
+ # func_mode_link because it depends on a number of variables
+ # set therein.
+ #
+ # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+ # variable will take.  If 'yes', then the emitted script
+ # will assume that the directory in which it is stored is
+ # the $objdir directory.  This is a cygwin/mingw-specific
+ # behavior.
+ func_emit_wrapper ()
+ {
+-	func_emit_wrapper_arg1=no
+-	if test -n "$1" ; then
+-	  func_emit_wrapper_arg1=$1
+-	fi
+-
+-	# split this up so that func_emit_cwrapperexe_src
+-	# can call each part independently.
+-	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+-	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+-}
+-
+-
+-# func_to_host_path arg
++	func_emit_wrapper_arg1=${1-no}
++
++	$ECHO "\
++#! $SHELL
++
++# $output - temporary wrapper script for $objdir/$outputname
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+ #
+-# Convert paths to host format when used with build tools.
+-# Intended for use with "native" mingw (where libtool itself
+-# is running under the msys shell), or in the following cross-
+-# build environments:
+-#    $build          $host
+-#    mingw (msys)    mingw  [e.g. native]
+-#    cygwin          mingw
+-#    *nix + wine     mingw
+-# where wine is equipped with the `winepath' executable.
+-# In the native mingw case, the (msys) shell automatically
+-# converts paths for any non-msys applications it launches,
+-# but that facility isn't available from inside the cwrapper.
+-# Similar accommodations are necessary for $host mingw and
+-# $build cygwin.  Calling this function does no harm for other
+-# $host/$build combinations not listed above.
++# The $output program cannot be directly executed until all the libtool
++# libraries that it depends on are installed.
+ #
+-# ARG is the path (on $build) that should be converted to
+-# the proper representation for $host. The result is stored
+-# in $func_to_host_path_result.
+-func_to_host_path ()
+-{
+-  func_to_host_path_result="$1"
+-  if test -n "$1" ; then
+-    case $host in
+-      *mingw* )
+-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+-        case $build in
+-          *mingw* ) # actually, msys
+-            # awkward: cmd appends spaces to result
+-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+-            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+-              $SED -e "$lt_sed_naive_backslashify"`
+-            ;;
+-          *cygwin* )
+-            func_to_host_path_tmp1=`cygpath -w "$1"`
+-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+-              $SED -e "$lt_sed_naive_backslashify"`
+-            ;;
+-          * )
+-            # Unfortunately, winepath does not exit with a non-zero
+-            # error code, so we are forced to check the contents of
+-            # stdout. On the other hand, if the command is not
+-            # found, the shell will set an exit code of 127 and print
+-            # *an error message* to stdout. So we must check for both
+-            # error code of zero AND non-empty stdout, which explains
+-            # the odd construction:
+-            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+-              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+-                $SED -e "$lt_sed_naive_backslashify"`
+-            else
+-              # Allow warning below.
+-              func_to_host_path_result=""
+-            fi
+-            ;;
+-        esac
+-        if test -z "$func_to_host_path_result" ; then
+-          func_error "Could not determine host path corresponding to"
+-          func_error "  '$1'"
+-          func_error "Continuing, but uninstalled executables may not work."
+-          # Fallback:
+-          func_to_host_path_result="$1"
+-        fi
+-        ;;
++# This wrapper script should never be moved out of the build directory.
++# If it is, it will not operate correctly.
++
++# Sed substitution that helps us do robust quoting.  It backslashifies
++# metacharacters that are still active within double-quoted strings.
++sed_quote_subst='$sed_quote_subst'
++
++# Be Bourne compatible
++if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '\${1+\"\$@\"}'='\"\$@\"'
++  setopt NO_GLOB_SUBST
++else
++  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
++fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++relink_command=\"$relink_command\"
++
++# This environment variable determines our operation mode.
++if test \"\$libtool_install_magic\" = \"$magic\"; then
++  # install mode needs the following variables:
++  generated_by_libtool_version='$macro_version'
++  notinst_deplibs='$notinst_deplibs'
++else
++  # When we are sourced in execute mode, \$file and \$ECHO are already set.
++  if test \"\$libtool_execute_magic\" != \"$magic\"; then
++    file=\"\$0\""
++
++    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
++    $ECHO "\
++
++# A function that is used when there is no print builtin or printf.
++func_fallback_echo ()
++{
++  eval 'cat <<_LTECHO_EOF
++\$1
++_LTECHO_EOF'
++}
++    ECHO=\"$qECHO\"
++  fi
++
++# Very basic option parsing. These options are (a) specific to
++# the libtool wrapper, (b) are identical between the wrapper
++# /script/ and the wrapper /executable/ which is used only on
++# windows platforms, and (c) all begin with the string "--lt-"
++# (application programs are unlikely to have options which match
++# this pattern).
++#
++# There are only two supported options: --lt-debug and
++# --lt-dump-script. There is, deliberately, no --lt-help.
++#
++# The first argument to this parsing function should be the
++# script's $0 value, followed by "$@".
++lt_option_debug=
++func_parse_lt_options ()
++{
++  lt_script_arg0=\$0
++  shift
++  for lt_opt
++  do
++    case \"\$lt_opt\" in
++    --lt-debug) lt_option_debug=1 ;;
++    --lt-dump-script)
++        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
++        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
++        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
++        cat \"\$lt_dump_D/\$lt_dump_F\"
++        exit 0
++      ;;
++    --lt-*)
++        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
++        exit 1
++      ;;
++    esac
++  done
++
++  # Print the debug banner immediately:
++  if test -n \"\$lt_option_debug\"; then
++    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
++  fi
++}
++
++# Used when --lt-debug. Prints its arguments to stdout
++# (redirection is the responsibility of the caller)
++func_lt_dump_args ()
++{
++  lt_dump_args_N=1;
++  for lt_arg
++  do
++    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
++    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
++  done
++}
++
++# Core function for launching the target application
++func_exec_program_core ()
++{
++"
++  case $host in
++  # Backslashes separate directories on plain windows
++  *-*-mingw | *-*-os2* | *-cegcc*)
++    $ECHO "\
++      if test -n \"\$lt_option_debug\"; then
++        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
++        func_lt_dump_args \${1+\"\$@\"} 1>&2
++      fi
++      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
++"
++    ;;
++
++  *)
++    $ECHO "\
++      if test -n \"\$lt_option_debug\"; then
++        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
++        func_lt_dump_args \${1+\"\$@\"} 1>&2
++      fi
++      exec \"\$progdir/\$program\" \${1+\"\$@\"}
++"
++    ;;
++  esac
++  $ECHO "\
++      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
++      exit 1
++}
++
++# A function to encapsulate launching the target application
++# Strips options in the --lt-* namespace from \$@ and
++# launches target application with the remaining arguments.
++func_exec_program ()
++{
++  case \" \$* \" in
++  *\\ --lt-*)
++    for lt_wr_arg
++    do
++      case \$lt_wr_arg in
++      --lt-*) ;;
++      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
++      esac
++      shift
++    done ;;
++  esac
++  func_exec_program_core \${1+\"\$@\"}
++}
++
++  # Parse options
++  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
++
++  # Find the directory that this script lives in.
++  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
++  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
++
++  # Follow symbolic links until we get to the real thisdir.
++  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
++  while test -n \"\$file\"; do
++    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
++
++    # If there was a directory component, then change thisdir.
++    if test \"x\$destdir\" != \"x\$file\"; then
++      case \"\$destdir\" in
++      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
++      *) thisdir=\"\$thisdir/\$destdir\" ;;
++      esac
++    fi
++
++    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
++    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
++  done
++
++  # Usually 'no', except on cygwin/mingw when embedded into
++  # the cwrapper.
++  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
++  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
++    # special case for '.'
++    if test \"\$thisdir\" = \".\"; then
++      thisdir=\`pwd\`
++    fi
++    # remove .libs from thisdir
++    case \"\$thisdir\" in
++    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
++    $objdir )   thisdir=. ;;
+     esac
+   fi
+-}
+-# end: func_to_host_path
+-
+-# func_to_host_pathlist arg
+-#
+-# Convert pathlists to host format when used with build tools.
+-# See func_to_host_path(), above. This function supports the
+-# following $build/$host combinations (but does no harm for
+-# combinations not listed here):
+-#    $build          $host
+-#    mingw (msys)    mingw  [e.g. native]
+-#    cygwin          mingw
+-#    *nix + wine     mingw
+-#
+-# Path separators are also converted from $build format to
+-# $host format. If ARG begins or ends with a path separator
+-# character, it is preserved (but converted to $host format)
+-# on output.
+-#
+-# ARG is a pathlist (on $build) that should be converted to
+-# the proper representation on $host. The result is stored
+-# in $func_to_host_pathlist_result.
+-func_to_host_pathlist ()
+-{
+-  func_to_host_pathlist_result="$1"
+-  if test -n "$1" ; then
+-    case $host in
+-      *mingw* )
+-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+-        # Remove leading and trailing path separator characters from
+-        # ARG. msys behavior is inconsistent here, cygpath turns them
+-        # into '.;' and ';.', and winepath ignores them completely.
+-        func_to_host_pathlist_tmp2="$1"
+-        # Once set for this call, this variable should not be
+-        # reassigned. It is used in tha fallback case.
+-        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+-          $SED -e 's|^:*||' -e 's|:*$||'`
+-        case $build in
+-          *mingw* ) # Actually, msys.
+-            # Awkward: cmd appends spaces to result.
+-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+-            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+-              $SED -e "$lt_sed_naive_backslashify"`
+-            ;;
+-          *cygwin* )
+-            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+-              $SED -e "$lt_sed_naive_backslashify"`
+-            ;;
+-          * )
+-            # unfortunately, winepath doesn't convert pathlists
+-            func_to_host_pathlist_result=""
+-            func_to_host_pathlist_oldIFS=$IFS
+-            IFS=:
+-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+-              IFS=$func_to_host_pathlist_oldIFS
+-              if test -n "$func_to_host_pathlist_f" ; then
+-                func_to_host_path "$func_to_host_pathlist_f"
+-                if test -n "$func_to_host_path_result" ; then
+-                  if test -z "$func_to_host_pathlist_result" ; then
+-                    func_to_host_pathlist_result="$func_to_host_path_result"
+-                  else
+-                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+-                  fi
+-                fi
+-              fi
+-              IFS=:
+-            done
+-            IFS=$func_to_host_pathlist_oldIFS
+-            ;;
+-        esac
+-        if test -z "$func_to_host_pathlist_result" ; then
+-          func_error "Could not determine the host path(s) corresponding to"
+-          func_error "  '$1'"
+-          func_error "Continuing, but uninstalled executables may not work."
+-          # Fallback. This may break if $1 contains DOS-style drive
+-          # specifications. The fix is not to complicate the expression
+-          # below, but for the user to provide a working wine installation
+-          # with winepath so that path translation in the cross-to-mingw
+-          # case works properly.
+-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+-        fi
+-        # Now, add the leading and trailing path separators back
+-        case "$1" in
+-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+-            ;;
+-        esac
+-        case "$1" in
+-          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+-            ;;
+-        esac
+-        ;;
+-    esac
++
++  # Try to get the absolute directory name.
++  absdir=\`cd \"\$thisdir\" && pwd\`
++  test -n \"\$absdir\" && thisdir=\"\$absdir\"
++"
++
++	if test "$fast_install" = yes; then
++	  $ECHO "\
++  program=lt-'$outputname'$exeext
++  progdir=\"\$thisdir/$objdir\"
++
++  if test ! -f \"\$progdir/\$program\" ||
++     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
++       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
++
++    file=\"\$\$-\$program\"
++
++    if test ! -d \"\$progdir\"; then
++      $MKDIR \"\$progdir\"
++    else
++      $RM \"\$progdir/\$file\"
++    fi"
++
++	  $ECHO "\
++
++    # relink executable if necessary
++    if test -n \"\$relink_command\"; then
++      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
++      else
++	$ECHO \"\$relink_command_output\" >&2
++	$RM \"\$progdir/\$file\"
++	exit 1
++      fi
++    fi
++
++    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
++    { $RM \"\$progdir/\$program\";
++      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
++    $RM \"\$progdir/\$file\"
++  fi"
++	else
++	  $ECHO "\
++  program='$outputname'
++  progdir=\"\$thisdir/$objdir\"
++"
++	fi
++
++	$ECHO "\
++
++  if test -f \"\$progdir/\$program\"; then"
++
++	# fixup the dll searchpath if we need to.
++	#
++	# Fix the DLL searchpath if we need to.  Do this before prepending
++	# to shlibpath, because on Windows, both are PATH and uninstalled
++	# libraries must come first.
++	if test -n "$dllsearchpath"; then
++	  $ECHO "\
++    # Add the dll search path components to the executable PATH
++    PATH=$dllsearchpath:\$PATH
++"
++	fi
++
++	# Export our shlibpath_var if we have one.
++	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
++	  $ECHO "\
++    # Add our own library path to $shlibpath_var
++    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
++
++    # Some systems cannot cope with colon-terminated $shlibpath_var
++    # The second colon is a workaround for a bug in BeOS R4 sed
++    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
++
++    export $shlibpath_var
++"
++	fi
++
++	$ECHO "\
++    if test \"\$libtool_execute_magic\" != \"$magic\"; then
++      # Run the actual program with our arguments.
++      func_exec_program \${1+\"\$@\"}
++    fi
++  else
++    # The program doesn't exist.
++    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
++    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
++    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
++    exit 1
+   fi
+-}
+-# end: func_to_host_pathlist
++fi\
++"
++}
++
+ 
+ # func_emit_cwrapperexe_src
+ # emit the source code for a wrapper executable on stdout
+ # Must ONLY be called from within func_mode_link because
+ # it depends on a number of variable set therein.
+ func_emit_cwrapperexe_src ()
+ {
+ 	cat <<EOF
+@@ -3136,75 +4142,98 @@ func_emit_cwrapperexe_src ()
+ /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+    Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+ 
+    The $output program cannot be directly executed until all the libtool
+    libraries that it depends on are installed.
+ 
+    This wrapper executable should never be moved out of the build directory.
+    If it is, it will not operate correctly.
+-
+-   Currently, it simply execs the wrapper *script* "$SHELL $output",
+-   but could eventually absorb all of the scripts functionality and
+-   exec $objdir/$outputname directly.
+ */
+ EOF
+ 	    cat <<"EOF"
++#ifdef _MSC_VER
++# define _CRT_SECURE_NO_DEPRECATE 1
++#endif
+ #include <stdio.h>
+ #include <stdlib.h>
+ #ifdef _MSC_VER
+ # include <direct.h>
+ # include <process.h>
+ # include <io.h>
+-# define setmode _setmode
+ #else
+ # include <unistd.h>
+ # include <stdint.h>
+ # ifdef __CYGWIN__
+ #  include <io.h>
+-#  define HAVE_SETENV
+-#  ifdef __STRICT_ANSI__
+-char *realpath (const char *, char *);
+-int putenv (char *);
+-int setenv (const char *, const char *, int);
+-#  endif
+ # endif
+ #endif
+ #include <malloc.h>
+ #include <stdarg.h>
+ #include <assert.h>
+ #include <string.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ 
++/* declarations of non-ANSI functions */
++#if defined(__MINGW32__)
++# ifdef __STRICT_ANSI__
++int _putenv (const char *);
++# endif
++#elif defined(__CYGWIN__)
++# ifdef __STRICT_ANSI__
++char *realpath (const char *, char *);
++int putenv (char *);
++int setenv (const char *, const char *, int);
++# endif
++/* #elif defined (other platforms) ... */
++#endif
++
++/* portability defines, excluding path handling macros */
++#if defined(_MSC_VER)
++# define setmode _setmode
++# define stat    _stat
++# define chmod   _chmod
++# define getcwd  _getcwd
++# define putenv  _putenv
++# define S_IXUSR _S_IEXEC
++# ifndef _INTPTR_T_DEFINED
++#  define _INTPTR_T_DEFINED
++#  define intptr_t int
++# endif
++#elif defined(__MINGW32__)
++# define setmode _setmode
++# define stat    _stat
++# define chmod   _chmod
++# define getcwd  _getcwd
++# define putenv  _putenv
++#elif defined(__CYGWIN__)
++# define HAVE_SETENV
++# define FOPEN_WB "wb"
++/* #elif defined (other platforms) ... */
++#endif
++
+ #if defined(PATH_MAX)
+ # define LT_PATHMAX PATH_MAX
+ #elif defined(MAXPATHLEN)
+ # define LT_PATHMAX MAXPATHLEN
+ #else
+ # define LT_PATHMAX 1024
+ #endif
+ 
+ #ifndef S_IXOTH
+ # define S_IXOTH 0
+ #endif
+ #ifndef S_IXGRP
+ # define S_IXGRP 0
+ #endif
+ 
+-#ifdef _MSC_VER
+-# define S_IXUSR _S_IEXEC
+-# define stat _stat
+-# ifndef _INTPTR_T_DEFINED
+-#  define intptr_t int
+-# endif
+-#endif
+-
++/* path handling portability macros */
+ #ifndef DIR_SEPARATOR
+ # define DIR_SEPARATOR '/'
+ # define PATH_SEPARATOR ':'
+ #endif
+ 
+ #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+   defined (__OS2__)
+ # define HAVE_DOS_BASED_FILE_SYSTEM
+@@ -3225,104 +4254,77 @@ int setenv (const char *, const char *, 
+ #endif /* DIR_SEPARATOR_2 */
+ 
+ #ifndef PATH_SEPARATOR_2
+ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+ #else /* PATH_SEPARATOR_2 */
+ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+ #endif /* PATH_SEPARATOR_2 */
+ 
+-#ifdef __CYGWIN__
+-# define FOPEN_WB "wb"
+-#endif
+-
+ #ifndef FOPEN_WB
+ # define FOPEN_WB "w"
+ #endif
+ #ifndef _O_BINARY
+ # define _O_BINARY 0
+ #endif
+ 
+ #define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+ #define XFREE(stale) do { \
+   if (stale) { free ((void *) stale); stale = 0; } \
+ } while (0)
+ 
+-#undef LTWRAPPER_DEBUGPRINTF
+-#if defined DEBUGWRAPPER
+-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+-static void
+-ltwrapper_debugprintf (const char *fmt, ...)
+-{
+-    va_list args;
+-    va_start (args, fmt);
+-    (void) vfprintf (stderr, fmt, args);
+-    va_end (args);
+-}
++#if defined(LT_DEBUGWRAPPER)
++static int lt_debug = 1;
+ #else
+-# define LTWRAPPER_DEBUGPRINTF(args)
++static int lt_debug = 0;
+ #endif
+ 
+-const char *program_name = NULL;
++const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+ 
+ void *xmalloc (size_t num);
+ char *xstrdup (const char *string);
+ const char *base_name (const char *name);
+ char *find_executable (const char *wrapper);
+ char *chase_symlinks (const char *pathspec);
+ int make_executable (const char *path);
+ int check_executable (const char *path);
+ char *strendzap (char *str, const char *pat);
+-void lt_fatal (const char *message, ...);
++void lt_debugprintf (const char *file, int line, const char *fmt, ...);
++void lt_fatal (const char *file, int line, const char *message, ...);
++static const char *nonnull (const char *s);
++static const char *nonempty (const char *s);
+ void lt_setenv (const char *name, const char *value);
+ char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+-void lt_opt_process_env_set (const char *arg);
+-void lt_opt_process_env_prepend (const char *arg);
+-void lt_opt_process_env_append (const char *arg);
+-int lt_split_name_value (const char *arg, char** name, char** value);
+ void lt_update_exe_path (const char *name, const char *value);
+ void lt_update_lib_path (const char *name, const char *value);
+-
+-static const char *script_text_part1 =
++char **prepare_spawn (char **argv);
++void lt_dump_script (FILE *f);
+ EOF
+ 
+-	    func_emit_wrapper_part1 yes |
+-	        $SED -e 's/\([\\"]\)/\\\1/g' \
+-	             -e 's/^/  "/' -e 's/$/\\n"/'
+-	    echo ";"
+ 	    cat <<EOF
+-
+-static const char *script_text_part2 =
+-EOF
+-	    func_emit_wrapper_part2 yes |
+-	        $SED -e 's/\([\\"]\)/\\\1/g' \
+-	             -e 's/^/  "/' -e 's/$/\\n"/'
+-	    echo ";"
+-
+-	    cat <<EOF
+-const char * MAGIC_EXE = "$magic_exe";
++volatile const char * MAGIC_EXE = "$magic_exe";
+ const char * LIB_PATH_VARNAME = "$shlibpath_var";
+ EOF
+ 
+ 	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+-              func_to_host_pathlist "$temp_rpath"
++              func_to_host_path "$temp_rpath"
+ 	      cat <<EOF
+-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
++const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+ EOF
+ 	    else
+ 	      cat <<"EOF"
+ const char * LIB_PATH_VALUE   = "";
+ EOF
+ 	    fi
+ 
+ 	    if test -n "$dllsearchpath"; then
+-              func_to_host_pathlist "$dllsearchpath:"
++              func_to_host_path "$dllsearchpath:"
+ 	      cat <<EOF
+ const char * EXE_PATH_VARNAME = "PATH";
+-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
++const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+ EOF
+ 	    else
+ 	      cat <<"EOF"
+ const char * EXE_PATH_VARNAME = "";
+ const char * EXE_PATH_VALUE   = "";
+ EOF
+ 	    fi
+ 
+@@ -3335,86 +4337,107 @@ EOF
+ const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+ EOF
+ 	    fi
+ 
+ 
+ 	    cat <<"EOF"
+ 
+ #define LTWRAPPER_OPTION_PREFIX         "--lt-"
+-#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+-
+-static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
++
+ static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+-
+ static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+-
+-static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+-static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+-  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+-
+-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+-static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+-  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+-
+-static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+-static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+-  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
++static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   char **newargz;
+   int  newargc;
+   char *tmp_pathspec;
+   char *actual_cwrapper_path;
+   char *actual_cwrapper_name;
+   char *target_name;
+   char *lt_argv_zero;
+   intptr_t rval = 127;
+ 
+   int i;
+ 
+   program_name = (char *) xstrdup (base_name (argv[0]));
+-  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+-  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+-
+-  /* very simple arg parsing; don't want to rely on getopt */
++  newargz = XMALLOC (char *, argc + 1);
++
++  /* very simple arg parsing; don't want to rely on getopt
++   * also, copy all non cwrapper options to newargz, except
++   * argz[0], which is handled differently
++   */
++  newargc=0;
+   for (i = 1; i < argc; i++)
+     {
+       if (strcmp (argv[i], dumpscript_opt) == 0)
+ 	{
+ EOF
+ 	    case "$host" in
+ 	      *mingw* | *cygwin* )
+ 		# make stdout use "unix" line endings
+ 		echo "          setmode(1,_O_BINARY);"
+ 		;;
+ 	      esac
+ 
+ 	    cat <<"EOF"
+-	  printf ("%s", script_text_part1);
+-	  printf ("%s", script_text_part2);
++	  lt_dump_script (stdout);
+ 	  return 0;
+ 	}
++      if (strcmp (argv[i], debug_opt) == 0)
++	{
++          lt_debug = 1;
++          continue;
++	}
++      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
++        {
++          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
++             namespace, but it is not one of the ones we know about and
++             have already dealt with, above (inluding dump-script), then
++             report an error. Otherwise, targets might begin to believe
++             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
++             namespace. The first time any user complains about this, we'll
++             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
++             or a configure.ac-settable value.
++           */
++          lt_fatal (__FILE__, __LINE__,
++		    "unrecognized %s option: '%s'",
++                    ltwrapper_option_prefix, argv[i]);
++        }
++      /* otherwise ... */
++      newargz[++newargc] = xstrdup (argv[i]);
+     }
+-
+-  newargz = XMALLOC (char *, argc + 1);
++  newargz[++newargc] = NULL;
++
++EOF
++	    cat <<EOF
++  /* The GNU banner must be the first non-error debug message */
++  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
++EOF
++	    cat <<"EOF"
++  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
++  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
++
+   tmp_pathspec = find_executable (argv[0]);
+   if (tmp_pathspec == NULL)
+-    lt_fatal ("Couldn't find %s", argv[0]);
+-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+-			  tmp_pathspec));
++    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
++  lt_debugprintf (__FILE__, __LINE__,
++                  "(main) found exe (before symlink chase) at: %s\n",
++		  tmp_pathspec);
+ 
+   actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+-			  actual_cwrapper_path));
++  lt_debugprintf (__FILE__, __LINE__,
++                  "(main) found exe (after symlink chase) at: %s\n",
++		  actual_cwrapper_path);
+   XFREE (tmp_pathspec);
+ 
+-  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
++  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+   strendzap (actual_cwrapper_path, actual_cwrapper_name);
+ 
+   /* wrapper name transforms */
+   strendzap (actual_cwrapper_name, ".exe");
+   tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+   XFREE (actual_cwrapper_name);
+   actual_cwrapper_name = tmp_pathspec;
+   tmp_pathspec = 0;
+@@ -3422,18 +4445,19 @@ EOF
+   /* target_name transforms -- use actual target program name; might have lt- prefix */
+   target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+   strendzap (target_name, ".exe");
+   tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+   XFREE (target_name);
+   target_name = tmp_pathspec;
+   tmp_pathspec = 0;
+ 
+-  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+-			  target_name));
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(main) libtool target name: %s\n",
++		  target_name);
+ EOF
+ 
+ 	    cat <<EOF
+   newargz[0] =
+     XMALLOC (char, (strlen (actual_cwrapper_path) +
+ 		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+   strcpy (newargz[0], actual_cwrapper_path);
+   strcat (newargz[0], "$objdir");
+@@ -3473,103 +4497,45 @@ EOF
+ 
+ 	    cat <<"EOF"
+   XFREE (target_name);
+   XFREE (actual_cwrapper_path);
+   XFREE (actual_cwrapper_name);
+ 
+   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
++  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
++     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
++     because on Windows, both *_VARNAMEs are PATH but uninstalled
++     libraries must come first. */
++  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+   lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+-  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+-
+-  newargc=0;
+-  for (i = 1; i < argc; i++)
+-    {
+-      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+-        {
+-          if (argv[i][env_set_opt_len] == '=')
+-            {
+-              const char *p = argv[i] + env_set_opt_len + 1;
+-              lt_opt_process_env_set (p);
+-            }
+-          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+-            {
+-              lt_opt_process_env_set (argv[++i]); /* don't copy */
+-            }
+-          else
+-            lt_fatal ("%s missing required argument", env_set_opt);
+-          continue;
+-        }
+-      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+-        {
+-          if (argv[i][env_prepend_opt_len] == '=')
+-            {
+-              const char *p = argv[i] + env_prepend_opt_len + 1;
+-              lt_opt_process_env_prepend (p);
+-            }
+-          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+-            {
+-              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+-            }
+-          else
+-            lt_fatal ("%s missing required argument", env_prepend_opt);
+-          continue;
+-        }
+-      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+-        {
+-          if (argv[i][env_append_opt_len] == '=')
+-            {
+-              const char *p = argv[i] + env_append_opt_len + 1;
+-              lt_opt_process_env_append (p);
+-            }
+-          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+-            {
+-              lt_opt_process_env_append (argv[++i]); /* don't copy */
+-            }
+-          else
+-            lt_fatal ("%s missing required argument", env_append_opt);
+-          continue;
+-        }
+-      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+-        {
+-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+-             namespace, but it is not one of the ones we know about and
+-             have already dealt with, above (inluding dump-script), then
+-             report an error. Otherwise, targets might begin to believe
+-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+-             namespace. The first time any user complains about this, we'll
+-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+-             or a configure.ac-settable value.
+-           */
+-          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+-                    ltwrapper_option_prefix, argv[i]);
+-        }
+-      /* otherwise ... */
+-      newargz[++newargc] = xstrdup (argv[i]);
+-    }
+-  newargz[++newargc] = NULL;
+-
+-  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
++
++  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
++		  nonnull (lt_argv_zero));
+   for (i = 0; i < newargc; i++)
+     {
+-      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
++      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
++		      i, nonnull (newargz[i]));
+     }
+ 
+ EOF
+ 
+ 	    case $host_os in
+ 	      mingw*)
+ 		cat <<"EOF"
+   /* execv doesn't actually work on mingw as expected on unix */
++  newargz = prepare_spawn (newargz);
+   rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+   if (rval == -1)
+     {
+       /* failed to start process */
+-      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
++      lt_debugprintf (__FILE__, __LINE__,
++		      "(main) failed to launch target \"%s\": %s\n",
++		      lt_argv_zero, nonnull (strerror (errno)));
+       return 127;
+     }
+   return rval;
+ EOF
+ 		;;
+ 	      *)
+ 		cat <<"EOF"
+   execv (lt_argv_zero, newargz);
+@@ -3581,17 +4547,17 @@ EOF
+ 	    cat <<"EOF"
+ }
+ 
+ void *
+ xmalloc (size_t num)
+ {
+   void *p = (void *) malloc (num);
+   if (!p)
+-    lt_fatal ("Memory exhausted");
++    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+ 
+   return p;
+ }
+ 
+ char *
+ xstrdup (const char *string)
+ {
+   return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+@@ -3615,36 +4581,36 @@ base_name (const char *name)
+   return base;
+ }
+ 
+ int
+ check_executable (const char *path)
+ {
+   struct stat st;
+ 
+-  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
++  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
++                  nonempty (path));
+   if ((!path) || (!*path))
+     return 0;
+ 
+   if ((stat (path, &st) >= 0)
+       && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+     return 1;
+   else
+     return 0;
+ }
+ 
+ int
+ make_executable (const char *path)
+ {
+   int rval = 0;
+   struct stat st;
+ 
+-  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
++  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
++                  nonempty (path));
+   if ((!path) || (!*path))
+     return 0;
+ 
+   if (stat (path, &st) >= 0)
+     {
+       rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+     }
+   return rval;
+@@ -3660,18 +4626,18 @@ find_executable (const char *wrapper)
+   int has_slash = 0;
+   const char *p;
+   const char *p_next;
+   /* static buffer for getcwd */
+   char tmp[LT_PATHMAX + 1];
+   int tmp_len;
+   char *concat_name;
+ 
+-  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+-			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
++  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
++                  nonempty (wrapper));
+ 
+   if ((wrapper == NULL) || (*wrapper == '\0'))
+     return NULL;
+ 
+   /* Absolute path? */
+ #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+   if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+     {
+@@ -3714,17 +4680,18 @@ find_executable (const char *wrapper)
+ 		if (IS_PATH_SEPARATOR (*q))
+ 		  break;
+ 	      p_len = q - p;
+ 	      p_next = (*q == '\0' ? q : q + 1);
+ 	      if (p_len == 0)
+ 		{
+ 		  /* empty path: current directory */
+ 		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+-		    lt_fatal ("getcwd failed");
++		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
++                              nonnull (strerror (errno)));
+ 		  tmp_len = strlen (tmp);
+ 		  concat_name =
+ 		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ 		  memcpy (concat_name, tmp, tmp_len);
+ 		  concat_name[tmp_len] = '/';
+ 		  strcpy (concat_name + tmp_len + 1, wrapper);
+ 		}
+ 	      else
+@@ -3739,17 +4706,18 @@ find_executable (const char *wrapper)
+ 		return concat_name;
+ 	      XFREE (concat_name);
+ 	    }
+ 	}
+       /* not found in PATH; assume curdir */
+     }
+   /* Relative path | not found in path: prepend cwd */
+   if (getcwd (tmp, LT_PATHMAX) == NULL)
+-    lt_fatal ("getcwd failed");
++    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
++              nonnull (strerror (errno)));
+   tmp_len = strlen (tmp);
+   concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+   memcpy (concat_name, tmp, tmp_len);
+   concat_name[tmp_len] = '/';
+   strcpy (concat_name + tmp_len + 1, wrapper);
+ 
+   if (check_executable (concat_name))
+     return concat_name;
+@@ -3765,18 +4733,19 @@ chase_symlinks (const char *pathspec)
+ #else
+   char buf[LT_PATHMAX];
+   struct stat s;
+   char *tmp_pathspec = xstrdup (pathspec);
+   char *p;
+   int has_symlinks = 0;
+   while (strlen (tmp_pathspec) && !has_symlinks)
+     {
+-      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+-			      tmp_pathspec));
++      lt_debugprintf (__FILE__, __LINE__,
++		      "checking path component for symlinks: %s\n",
++		      tmp_pathspec);
+       if (lstat (tmp_pathspec, &s) == 0)
+ 	{
+ 	  if (S_ISLNK (s.st_mode) != 0)
+ 	    {
+ 	      has_symlinks = 1;
+ 	      break;
+ 	    }
+ 
+@@ -3788,31 +4757,33 @@ chase_symlinks (const char *pathspec)
+ 	    {
+ 	      /* no more DIR_SEPARATORS left */
+ 	      break;
+ 	    }
+ 	  *p = '\0';
+ 	}
+       else
+ 	{
+-	  char *errstr = strerror (errno);
+-	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
++	  lt_fatal (__FILE__, __LINE__,
++		    "error accessing file \"%s\": %s",
++		    tmp_pathspec, nonnull (strerror (errno)));
+ 	}
+     }
+   XFREE (tmp_pathspec);
+ 
+   if (!has_symlinks)
+     {
+       return xstrdup (pathspec);
+     }
+ 
+   tmp_pathspec = realpath (pathspec, buf);
+   if (tmp_pathspec == 0)
+     {
+-      lt_fatal ("Could not follow symlinks for %s", pathspec);
++      lt_fatal (__FILE__, __LINE__,
++		"could not follow symlinks for %s", pathspec);
+     }
+   return xstrdup (tmp_pathspec);
+ #endif
+ }
+ 
+ char *
+ strendzap (char *str, const char *pat)
+ {
+@@ -3828,43 +4799,69 @@ strendzap (char *str, const char *pat)
+     {
+       str += len - patlen;
+       if (strcmp (str, pat) == 0)
+ 	*str = '\0';
+     }
+   return str;
+ }
+ 
++void
++lt_debugprintf (const char *file, int line, const char *fmt, ...)
++{
++  va_list args;
++  if (lt_debug)
++    {
++      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
++      va_start (args, fmt);
++      (void) vfprintf (stderr, fmt, args);
++      va_end (args);
++    }
++}
++
+ static void
+-lt_error_core (int exit_status, const char *mode,
++lt_error_core (int exit_status, const char *file,
++	       int line, const char *mode,
+ 	       const char *message, va_list ap)
+ {
+-  fprintf (stderr, "%s: %s: ", program_name, mode);
++  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+   vfprintf (stderr, message, ap);
+   fprintf (stderr, ".\n");
+ 
+   if (exit_status >= 0)
+     exit (exit_status);
+ }
+ 
+ void
+-lt_fatal (const char *message, ...)
++lt_fatal (const char *file, int line, const char *message, ...)
+ {
+   va_list ap;
+   va_start (ap, message);
+-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
++  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+   va_end (ap);
+ }
+ 
++static const char *
++nonnull (const char *s)
++{
++  return s ? s : "(null)";
++}
++
++static const char *
++nonempty (const char *s)
++{
++  return (s && !*s) ? "(empty)" : nonnull (s);
++}
++
+ void
+ lt_setenv (const char *name, const char *value)
+ {
+-  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+-                          (name ? name : "<NULL>"),
+-                          (value ? value : "<NULL>")));
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(lt_setenv) setting '%s' to '%s'\n",
++                  nonnull (name), nonnull (value));
+   {
+ #ifdef HAVE_SETENV
+     /* always make a copy, for consistency with !HAVE_SETENV */
+     char *str = xstrdup (value);
+     setenv (name, str, 1);
+ #else
+     int len = strlen (name) + 1 + strlen (value) + 1;
+     char *str = XMALLOC (char, len);
+@@ -3899,105 +4896,22 @@ lt_extend_str (const char *orig_value, c
+     }
+   else
+     {
+       new_value = xstrdup (add);
+     }
+   return new_value;
+ }
+ 
+-int
+-lt_split_name_value (const char *arg, char** name, char** value)
+-{
+-  const char *p;
+-  int len;
+-  if (!arg || !*arg)
+-    return 1;
+-
+-  p = strchr (arg, (int)'=');
+-
+-  if (!p)
+-    return 1;
+-
+-  *value = xstrdup (++p);
+-
+-  len = strlen (arg) - strlen (*value);
+-  *name = XMALLOC (char, len);
+-  strncpy (*name, arg, len-1);
+-  (*name)[len - 1] = '\0';
+-
+-  return 0;
+-}
+-
+-void
+-lt_opt_process_env_set (const char *arg)
+-{
+-  char *name = NULL;
+-  char *value = NULL;
+-
+-  if (lt_split_name_value (arg, &name, &value) != 0)
+-    {
+-      XFREE (name);
+-      XFREE (value);
+-      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+-    }
+-
+-  lt_setenv (name, value);
+-  XFREE (name);
+-  XFREE (value);
+-}
+-
+-void
+-lt_opt_process_env_prepend (const char *arg)
+-{
+-  char *name = NULL;
+-  char *value = NULL;
+-  char *new_value = NULL;
+-
+-  if (lt_split_name_value (arg, &name, &value) != 0)
+-    {
+-      XFREE (name);
+-      XFREE (value);
+-      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+-    }
+-
+-  new_value = lt_extend_str (getenv (name), value, 0);
+-  lt_setenv (name, new_value);
+-  XFREE (new_value);
+-  XFREE (name);
+-  XFREE (value);
+-}
+-
+-void
+-lt_opt_process_env_append (const char *arg)
+-{
+-  char *name = NULL;
+-  char *value = NULL;
+-  char *new_value = NULL;
+-
+-  if (lt_split_name_value (arg, &name, &value) != 0)
+-    {
+-      XFREE (name);
+-      XFREE (value);
+-      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+-    }
+-
+-  new_value = lt_extend_str (getenv (name), value, 1);
+-  lt_setenv (name, new_value);
+-  XFREE (new_value);
+-  XFREE (name);
+-  XFREE (value);
+-}
+-
+ void
+ lt_update_exe_path (const char *name, const char *value)
+ {
+-  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+-                          (name ? name : "<NULL>"),
+-                          (value ? value : "<NULL>")));
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
++                  nonnull (name), nonnull (value));
+ 
+   if (name && *name && value && *value)
+     {
+       char *new_value = lt_extend_str (getenv (name), value, 0);
+       /* some systems can't cope with a ':'-terminated path #' */
+       int len = strlen (new_value);
+       while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+         {
+@@ -4006,33 +4920,180 @@ lt_update_exe_path (const char *name, co
+       lt_setenv (name, new_value);
+       XFREE (new_value);
+     }
+ }
+ 
+ void
+ lt_update_lib_path (const char *name, const char *value)
+ {
+-  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+-                          (name ? name : "<NULL>"),
+-                          (value ? value : "<NULL>")));
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
++                  nonnull (name), nonnull (value));
+ 
+   if (name && *name && value && *value)
+     {
+       char *new_value = lt_extend_str (getenv (name), value, 0);
+       lt_setenv (name, new_value);
+       XFREE (new_value);
+     }
+ }
+ 
+-
+ EOF
++	    case $host_os in
++	      mingw*)
++		cat <<"EOF"
++
++/* Prepares an argument vector before calling spawn().
++   Note that spawn() does not by itself call the command interpreter
++     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
++      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
++         GetVersionEx(&v);
++         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
++      }) ? "cmd.exe" : "command.com").
++   Instead it simply concatenates the arguments, separated by ' ', and calls
++   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
++   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
++   special way:
++   - Space and tab are interpreted as delimiters. They are not treated as
++     delimiters if they are surrounded by double quotes: "...".
++   - Unescaped double quotes are removed from the input. Their only effect is
++     that within double quotes, space and tab are treated like normal
++     characters.
++   - Backslashes not followed by double quotes are not special.
++   - But 2*n+1 backslashes followed by a double quote become
++     n backslashes followed by a double quote (n >= 0):
++       \" -> "
++       \\\" -> \"
++       \\\\\" -> \\"
++ */
++#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
++#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
++char **
++prepare_spawn (char **argv)
++{
++  size_t argc;
++  char **new_argv;
++  size_t i;
++
++  /* Count number of arguments.  */
++  for (argc = 0; argv[argc] != NULL; argc++)
++    ;
++
++  /* Allocate new argument vector.  */
++  new_argv = XMALLOC (char *, argc + 1);
++
++  /* Put quoted arguments into the new argument vector.  */
++  for (i = 0; i < argc; i++)
++    {
++      const char *string = argv[i];
++
++      if (string[0] == '\0')
++	new_argv[i] = xstrdup ("\"\"");
++      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
++	{
++	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
++	  size_t length;
++	  unsigned int backslashes;
++	  const char *s;
++	  char *quoted_string;
++	  char *p;
++
++	  length = 0;
++	  backslashes = 0;
++	  if (quote_around)
++	    length++;
++	  for (s = string; *s != '\0'; s++)
++	    {
++	      char c = *s;
++	      if (c == '"')
++		length += backslashes + 1;
++	      length++;
++	      if (c == '\\')
++		backslashes++;
++	      else
++		backslashes = 0;
++	    }
++	  if (quote_around)
++	    length += backslashes + 1;
++
++	  quoted_string = XMALLOC (char, length + 1);
++
++	  p = quoted_string;
++	  backslashes = 0;
++	  if (quote_around)
++	    *p++ = '"';
++	  for (s = string; *s != '\0'; s++)
++	    {
++	      char c = *s;
++	      if (c == '"')
++		{
++		  unsigned int j;
++		  for (j = backslashes + 1; j > 0; j--)
++		    *p++ = '\\';
++		}
++	      *p++ = c;
++	      if (c == '\\')
++		backslashes++;
++	      else
++		backslashes = 0;
++	    }
++	  if (quote_around)
++	    {
++	      unsigned int j;
++	      for (j = backslashes; j > 0; j--)
++		*p++ = '\\';
++	      *p++ = '"';
++	    }
++	  *p = '\0';
++
++	  new_argv[i] = quoted_string;
++	}
++      else
++	new_argv[i] = (char *) string;
++    }
++  new_argv[argc] = NULL;
++
++  return new_argv;
++}
++EOF
++		;;
++	    esac
++
++            cat <<"EOF"
++void lt_dump_script (FILE* f)
++{
++EOF
++	    func_emit_wrapper yes |
++	      $SED -n -e '
++s/^\(.\{79\}\)\(..*\)/\1\
++\2/
++h
++s/\([\\"]\)/\\\1/g
++s/$/\\n/
++s/\([^\n]*\).*/  fputs ("\1", f);/p
++g
++D'
++            cat <<"EOF"
++}
++EOF
+ }
+ # end: func_emit_cwrapperexe_src
+ 
++# func_win32_import_lib_p ARG
++# True if ARG is an import lib, as indicated by $file_magic_cmd
++func_win32_import_lib_p ()
++{
++    $opt_debug
++    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
++    *import*) : ;;
++    *) false ;;
++    esac
++}
++
+ # func_mode_link arg...
+ func_mode_link ()
+ {
+     $opt_debug
+     case $host in
+     *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+       # It is impossible to link a dll without this setting, and
+       # we shouldn't force the makefile maintainer to figure out
+@@ -4067,16 +5128,17 @@ func_mode_link ()
+     compiler_flags=
+     linker_flags=
+     dllsearchpath=
+     lib_search_path=`pwd`
+     inst_prefix_dir=
+     new_inherited_linker_flags=
+ 
+     avoid_version=no
++    bindir=
+     dlfiles=
+     dlprefiles=
+     dlself=no
+     export_dynamic=no
+     export_symbols=
+     export_symbols_regex=
+     generated=
+     libobjs=
+@@ -4159,16 +5221,21 @@ func_mode_link ()
+ 	case $prev in
+ 	output)
+ 	  func_append compile_command " @OUTPUT@"
+ 	  func_append finalize_command " @OUTPUT@"
+ 	  ;;
+ 	esac
+ 
+ 	case $prev in
++	bindir)
++	  bindir="$arg"
++	  prev=
++	  continue
++	  ;;
+ 	dlfiles|dlprefiles)
+ 	  if test "$preload" = no; then
+ 	    # Add the symbol object into the linking commands.
+ 	    func_append compile_command " @SYMFILE@"
+ 	    func_append finalize_command " @SYMFILE@"
+ 	    preload=yes
+ 	  fi
+ 	  case $arg in
+@@ -4190,19 +5257,19 @@ func_mode_link ()
+ 	      dlself=needless
+ 	      export_dynamic=yes
+ 	    fi
+ 	    prev=
+ 	    continue
+ 	    ;;
+ 	  *)
+ 	    if test "$prev" = dlfiles; then
+-	      dlfiles="$dlfiles $arg"
++	      func_append dlfiles " $arg"
+ 	    else
+-	      dlprefiles="$dlprefiles $arg"
++	      func_append dlprefiles " $arg"
+ 	    fi
+ 	    prev=
+ 	    continue
+ 	    ;;
+ 	  esac
+ 	  ;;
+ 	expsyms)
+ 	  export_symbols="$arg"
+@@ -4216,17 +5283,17 @@ func_mode_link ()
+ 	  prev=
+ 	  continue
+ 	  ;;
+ 	framework)
+ 	  case $host in
+ 	    *-*-darwin*)
+ 	      case "$deplibs " in
+ 		*" $qarg.ltframework "*) ;;
+-		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
++		*) func_append deplibs " $qarg.ltframework" # this is fixed later
+ 		   ;;
+ 	      esac
+ 	      ;;
+ 	  esac
+ 	  prev=
+ 	  continue
+ 	  ;;
+ 	inst_prefix)
+@@ -4235,17 +5302,17 @@ func_mode_link ()
+ 	  continue
+ 	  ;;
+ 	objectlist)
+ 	  if test -f "$arg"; then
+ 	    save_arg=$arg
+ 	    moreargs=
+ 	    for fil in `cat "$save_arg"`
+ 	    do
+-#	      moreargs="$moreargs $fil"
++#	      func_append moreargs " $fil"
+ 	      arg=$fil
+ 	      # A libtool-controlled object.
+ 
+ 	      # Check to see that this really is a libtool object.
+ 	      if func_lalib_unsafe_p "$arg"; then
+ 		pic_object=
+ 		non_pic_object=
+ 
+@@ -4264,29 +5331,29 @@ func_mode_link ()
+ 		xdir="$func_dirname_result"
+ 
+ 		if test "$pic_object" != none; then
+ 		  # Prepend the subdirectory the object is found in.
+ 		  pic_object="$xdir$pic_object"
+ 
+ 		  if test "$prev" = dlfiles; then
+ 		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+-		      dlfiles="$dlfiles $pic_object"
++		      func_append dlfiles " $pic_object"
+ 		      prev=
+ 		      continue
+ 		    else
+ 		      # If libtool objects are unsupported, then we need to preload.
+ 		      prev=dlprefiles
+ 		    fi
+ 		  fi
+ 
+ 		  # CHECK ME:  I think I busted this.  -Ossama
+ 		  if test "$prev" = dlprefiles; then
+ 		    # Preload the old-style object.
+-		    dlprefiles="$dlprefiles $pic_object"
++		    func_append dlprefiles " $pic_object"
+ 		    prev=
+ 		  fi
+ 
+ 		  # A PIC object.
+ 		  func_append libobjs " $pic_object"
+ 		  arg="$pic_object"
+ 		fi
+ 
+@@ -4346,55 +5413,55 @@ func_mode_link ()
+ 	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+ 	  *)
+ 	    func_fatal_error "only absolute run-paths are allowed"
+ 	    ;;
+ 	  esac
+ 	  if test "$prev" = rpath; then
+ 	    case "$rpath " in
+ 	    *" $arg "*) ;;
+-	    *) rpath="$rpath $arg" ;;
++	    *) func_append rpath " $arg" ;;
+ 	    esac
+ 	  else
+ 	    case "$xrpath " in
+ 	    *" $arg "*) ;;
+-	    *) xrpath="$xrpath $arg" ;;
++	    *) func_append xrpath " $arg" ;;
+ 	    esac
+ 	  fi
+ 	  prev=
+ 	  continue
+ 	  ;;
+ 	shrext)
+ 	  shrext_cmds="$arg"
+ 	  prev=
+ 	  continue
+ 	  ;;
+ 	weak)
+-	  weak_libs="$weak_libs $arg"
++	  func_append weak_libs " $arg"
+ 	  prev=
+ 	  continue
+ 	  ;;
+ 	xcclinker)
+-	  linker_flags="$linker_flags $qarg"
+-	  compiler_flags="$compiler_flags $qarg"
++	  func_append linker_flags " $qarg"
++	  func_append compiler_flags " $qarg"
+ 	  prev=
+ 	  func_append compile_command " $qarg"
+ 	  func_append finalize_command " $qarg"
+ 	  continue
+ 	  ;;
+ 	xcompiler)
+-	  compiler_flags="$compiler_flags $qarg"
++	  func_append compiler_flags " $qarg"
+ 	  prev=
+ 	  func_append compile_command " $qarg"
+ 	  func_append finalize_command " $qarg"
+ 	  continue
+ 	  ;;
+ 	xlinker)
+-	  linker_flags="$linker_flags $qarg"
+-	  compiler_flags="$compiler_flags $wl$qarg"
++	  func_append linker_flags " $qarg"
++	  func_append compiler_flags " $wl$qarg"
+ 	  prev=
+ 	  func_append compile_command " $wl$qarg"
+ 	  func_append finalize_command " $wl$qarg"
+ 	  continue
+ 	  ;;
+ 	*)
+ 	  eval "$prev=\"\$arg\""
+ 	  prev=
+@@ -4420,16 +5487,21 @@ func_mode_link ()
+ 	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ 	;;
+ 
+       -avoid-version)
+ 	avoid_version=yes
+ 	continue
+ 	;;
+ 
++      -bindir)
++	prev=bindir
++	continue
++	;;
++
+       -dlopen)
+ 	prev=dlfiles
+ 	continue
+ 	;;
+ 
+       -dlpreopen)
+ 	prev=dlprefiles
+ 	continue
+@@ -4470,78 +5542,85 @@ func_mode_link ()
+ 	  func_append compile_command " $arg"
+ 	  func_append finalize_command " $arg"
+ 	  ;;
+ 	esac
+ 	continue
+ 	;;
+ 
+       -L*)
+-	func_stripname '-L' '' "$arg"
+-	dir=$func_stripname_result
+-	if test -z "$dir"; then
++	func_stripname "-L" '' "$arg"
++	if test -z "$func_stripname_result"; then
+ 	  if test "$#" -gt 0; then
+ 	    func_fatal_error "require no space between \`-L' and \`$1'"
+ 	  else
+ 	    func_fatal_error "need path for \`-L' option"
+ 	  fi
+ 	fi
++	func_resolve_sysroot "$func_stripname_result"
++	dir=$func_resolve_sysroot_result
+ 	# We need an absolute path.
+ 	case $dir in
+ 	[\\/]* | [A-Za-z]:[\\/]*) ;;
+ 	*)
+ 	  absdir=`cd "$dir" && pwd`
+ 	  test -z "$absdir" && \
+ 	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ 	  dir="$absdir"
+ 	  ;;
+ 	esac
+ 	case "$deplibs " in
+-	*" -L$dir "*) ;;
++	*" -L$dir "* | *" $arg "*)
++	  # Will only happen for absolute or sysroot arguments
++	  ;;
+ 	*)
+-	  deplibs="$deplibs -L$dir"
+-	  lib_search_path="$lib_search_path $dir"
++	  # Preserve sysroot, but never include relative directories
++	  case $dir in
++	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
++	    *) func_append deplibs " -L$dir" ;;
++	  esac
++	  func_append lib_search_path " $dir"
+ 	  ;;
+ 	esac
+ 	case $host in
+ 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+-	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
++	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$dir:"*) ;;
+ 	  ::) dllsearchpath=$dir;;
+-	  *) dllsearchpath="$dllsearchpath:$dir";;
++	  *) func_append dllsearchpath ":$dir";;
+ 	  esac
+ 	  case :$dllsearchpath: in
+ 	  *":$testbindir:"*) ;;
+ 	  ::) dllsearchpath=$testbindir;;
+-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
++	  *) func_append dllsearchpath ":$testbindir";;
+ 	  esac
+ 	  ;;
+ 	esac
+ 	continue
+ 	;;
+ 
+       -l*)
+ 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
++	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # These systems don't actually have a C or math library (as such)
+ 	    continue
+ 	    ;;
+ 	  *-*-os2*)
+ 	    # These systems don't actually have a C library (as such)
+ 	    test "X$arg" = "X-lc" && continue
+ 	    ;;
+ 	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ 	    # Do not include libc due to us having libc/libc_r.
+ 	    test "X$arg" = "X-lc" && continue
+ 	    ;;
+ 	  *-*-rhapsody* | *-*-darwin1.[012])
+ 	    # Rhapsody C and math libraries are in the System framework
+-	    deplibs="$deplibs System.ltframework"
++	    func_append deplibs " System.ltframework"
+ 	    continue
+ 	    ;;
+ 	  *-*-sco3.2v5* | *-*-sco5v6*)
+ 	    # Causes problems with __ctype
+ 	    test "X$arg" = "X-lc" && continue
+ 	    ;;
+ 	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ 	    # Compiler inserts libc in the correct place for threads to work
+@@ -4551,43 +5630,44 @@ func_mode_link ()
+ 	elif test "X$arg" = "X-lc_r"; then
+ 	 case $host in
+ 	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ 	   # Do not include libc_r directly, use -pthread flag.
+ 	   continue
+ 	   ;;
+ 	 esac
+ 	fi
+-	deplibs="$deplibs $arg"
++	func_append deplibs " $arg"
+ 	continue
+ 	;;
+ 
+       -module)
+ 	module=yes
+ 	continue
+ 	;;
+ 
+       # Tru64 UNIX uses -model [arg] to determine the layout of C++
+       # classes, name mangling, and exception handling.
+       # Darwin uses the -arch flag to determine output architecture.
+-      -model|-arch|-isysroot)
+-	compiler_flags="$compiler_flags $arg"
++      -model|-arch|-isysroot|--sysroot)
++	func_append compiler_flags " $arg"
+ 	func_append compile_command " $arg"
+ 	func_append finalize_command " $arg"
+ 	prev=xcompiler
+ 	continue
+ 	;;
+ 
+-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+-	compiler_flags="$compiler_flags $arg"
++      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
++      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
++	func_append compiler_flags " $arg"
+ 	func_append compile_command " $arg"
+ 	func_append finalize_command " $arg"
+ 	case "$new_inherited_linker_flags " in
+ 	    *" $arg "*) ;;
+-	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
++	    * ) func_append new_inherited_linker_flags " $arg" ;;
+ 	esac
+ 	continue
+ 	;;
+ 
+       -multi_module)
+ 	single_module="${wl}-multi_module"
+ 	continue
+ 	;;
+@@ -4644,23 +5724,27 @@ func_mode_link ()
+ 	;;
+ 
+       -R*)
+ 	func_stripname '-R' '' "$arg"
+ 	dir=$func_stripname_result
+ 	# We need an absolute path.
+ 	case $dir in
+ 	[\\/]* | [A-Za-z]:[\\/]*) ;;
++	=*)
++	  func_stripname '=' '' "$dir"
++	  dir=$lt_sysroot$func_stripname_result
++	  ;;
+ 	*)
+ 	  func_fatal_error "only absolute run-paths are allowed"
+ 	  ;;
+ 	esac
+ 	case "$xrpath " in
+ 	*" $dir "*) ;;
+-	*) xrpath="$xrpath $dir" ;;
++	*) func_append xrpath " $dir" ;;
+ 	esac
+ 	continue
+ 	;;
+ 
+       -shared)
+ 	# The effects of -shared are defined in a previous loop.
+ 	continue
+ 	;;
+@@ -4703,35 +5787,35 @@ func_mode_link ()
+       -Wc,*)
+ 	func_stripname '-Wc,' '' "$arg"
+ 	args=$func_stripname_result
+ 	arg=
+ 	save_ifs="$IFS"; IFS=','
+ 	for flag in $args; do
+ 	  IFS="$save_ifs"
+           func_quote_for_eval "$flag"
+-	  arg="$arg $wl$func_quote_for_eval_result"
+-	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
++	  func_append arg " $func_quote_for_eval_result"
++	  func_append compiler_flags " $func_quote_for_eval_result"
+ 	done
+ 	IFS="$save_ifs"
+ 	func_stripname ' ' '' "$arg"
+ 	arg=$func_stripname_result
+ 	;;
+ 
+       -Wl,*)
+ 	func_stripname '-Wl,' '' "$arg"
+ 	args=$func_stripname_result
+ 	arg=
+ 	save_ifs="$IFS"; IFS=','
+ 	for flag in $args; do
+ 	  IFS="$save_ifs"
+           func_quote_for_eval "$flag"
+-	  arg="$arg $wl$func_quote_for_eval_result"
+-	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+-	  linker_flags="$linker_flags $func_quote_for_eval_result"
++	  func_append arg " $wl$func_quote_for_eval_result"
++	  func_append compiler_flags " $wl$func_quote_for_eval_result"
++	  func_append linker_flags " $func_quote_for_eval_result"
+ 	done
+ 	IFS="$save_ifs"
+ 	func_stripname ' ' '' "$arg"
+ 	arg=$func_stripname_result
+ 	;;
+ 
+       -Xcompiler)
+ 	prev=xcompiler
+@@ -4749,45 +5833,49 @@ func_mode_link ()
+ 	;;
+ 
+       # -msg_* for osf cc
+       -msg_*)
+ 	func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+ 	;;
+ 
+-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+-      # +DA*, +DD* enable 64-bit mode on the HP compiler
+-      # -q* pass through compiler args for the IBM compiler
+-      # -m*, -t[45]*, -txscale* pass through architecture-specific
+-      # compiler args for GCC
+-      # -F/path gives path to uninstalled frameworks, gcc on darwin
+-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+-      # @file GCC response files
++      # Flags to be passed through unchanged, with rationale:
++      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
++      # -r[0-9][0-9]*        specify processor for the SGI compiler
++      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
++      # +DA*, +DD*           enable 64-bit mode for the HP compiler
++      # -q*                  compiler args for the IBM compiler
++      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
++      # -F/path              path to uninstalled frameworks, gcc on darwin
++      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
++      # @file                GCC response files
++      # -tp=*                Portland pgcc target processor selection
++      # --sysroot=*          for sysroot support
++      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
++      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+-        compiler_flags="$compiler_flags $arg"
++        func_append compiler_flags " $arg"
+         continue
+         ;;
+ 
+       # Some other compiler flag.
+       -* | +*)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+ 	;;
+ 
+       *.$objext)
+ 	# A standard object.
+-	objs="$objs $arg"
++	func_append objs " $arg"
+ 	;;
+ 
+       *.lo)
+ 	# A libtool-controlled object.
+ 
+ 	# Check to see that this really is a libtool object.
+ 	if func_lalib_unsafe_p "$arg"; then
+ 	  pic_object=
+@@ -4808,29 +5896,29 @@ func_mode_link ()
+ 	  xdir="$func_dirname_result"
+ 
+ 	  if test "$pic_object" != none; then
+ 	    # Prepend the subdirectory the object is found in.
+ 	    pic_object="$xdir$pic_object"
+ 
+ 	    if test "$prev" = dlfiles; then
+ 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+-		dlfiles="$dlfiles $pic_object"
++		func_append dlfiles " $pic_object"
+ 		prev=
+ 		continue
+ 	      else
+ 		# If libtool objects are unsupported, then we need to preload.
+ 		prev=dlprefiles
+ 	      fi
+ 	    fi
+ 
+ 	    # CHECK ME:  I think I busted this.  -Ossama
+ 	    if test "$prev" = dlprefiles; then
+ 	      # Preload the old-style object.
+-	      dlprefiles="$dlprefiles $pic_object"
++	      func_append dlprefiles " $pic_object"
+ 	      prev=
+ 	    fi
+ 
+ 	    # A PIC object.
+ 	    func_append libobjs " $pic_object"
+ 	    arg="$pic_object"
+ 	  fi
+ 
+@@ -4865,34 +5953,35 @@ func_mode_link ()
+ 	  else
+ 	    func_fatal_error "\`$arg' is not a valid libtool object"
+ 	  fi
+ 	fi
+ 	;;
+ 
+       *.$libext)
+ 	# An archive.
+-	deplibs="$deplibs $arg"
+-	old_deplibs="$old_deplibs $arg"
++	func_append deplibs " $arg"
++	func_append old_deplibs " $arg"
+ 	continue
+ 	;;
+ 
+       *.la)
+ 	# A libtool-controlled library.
+ 
++	func_resolve_sysroot "$arg"
+ 	if test "$prev" = dlfiles; then
+ 	  # This library was specified with -dlopen.
+-	  dlfiles="$dlfiles $arg"
++	  func_append dlfiles " $func_resolve_sysroot_result"
+ 	  prev=
+ 	elif test "$prev" = dlprefiles; then
+ 	  # The library was specified with -dlpreopen.
+-	  dlprefiles="$dlprefiles $arg"
++	  func_append dlprefiles " $func_resolve_sysroot_result"
+ 	  prev=
+ 	else
+-	  deplibs="$deplibs $arg"
++	  func_append deplibs " $func_resolve_sysroot_result"
+ 	fi
+ 	continue
+ 	;;
+ 
+       # Some other compiler argument.
+       *)
+ 	# Unknown arguments in both finalize_command and compile_command need
+ 	# to be aesthetically quoted because they are evaled later.
+@@ -4920,25 +6009,27 @@ func_mode_link ()
+     oldlibs=
+     # calculate the name of the file, without its directory
+     func_basename "$output"
+     outputname="$func_basename_result"
+     libobjs_save="$libobjs"
+ 
+     if test -n "$shlibpath_var"; then
+       # get the directories listed in $shlibpath_var
+-      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
++      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+     else
+       shlib_search_path=
+     fi
+     eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+ 
+     func_dirname "$output" "/" ""
+     output_objdir="$func_dirname_result$objdir"
++    func_to_tool_file "$output_objdir/"
++    tool_output_objdir=$func_to_tool_file_result
+     # Create the object directory.
+     func_mkdir_p "$output_objdir"
+ 
+     # Determine the type of output
+     case $output in
+     "")
+       func_fatal_help "you must specify an output file"
+       ;;
+@@ -4949,37 +6040,37 @@ func_mode_link ()
+     esac
+ 
+     specialdeplibs=
+ 
+     libs=
+     # Find all interdependent deplibs by searching for libraries
+     # that are linked more than once (e.g. -la -lb -la)
+     for deplib in $deplibs; do
+-      if $opt_duplicate_deps ; then
++      if $opt_preserve_dup_deps ; then
+ 	case "$libs " in
+-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ 	esac
+       fi
+-      libs="$libs $deplib"
++      func_append libs " $deplib"
+     done
+ 
+     if test "$linkmode" = lib; then
+       libs="$predeps $libs $compiler_lib_search_path $postdeps"
+ 
+       # Compute libraries that are listed more than once in $predeps
+       # $postdeps and mark them as special (i.e., whose duplicates are
+       # not to be eliminated).
+       pre_post_deps=
+       if $opt_duplicate_compiler_generated_deps; then
+ 	for pre_post_dep in $predeps $postdeps; do
+ 	  case "$pre_post_deps " in
+-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
++	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ 	  esac
+-	  pre_post_deps="$pre_post_deps $pre_post_dep"
++	  func_append pre_post_deps " $pre_post_dep"
+ 	done
+       fi
+       pre_post_deps=
+     fi
+ 
+     deplibs=
+     newdependency_libs=
+     newlib_search_path=
+@@ -5036,52 +6127,55 @@ func_mode_link ()
+ 	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ 	esac
+       fi
+       if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ 	# Collect and forward deplibs of preopened libtool libs
+ 	for lib in $dlprefiles; do
+ 	  # Ignore non-libtool-libs
+ 	  dependency_libs=
++	  func_resolve_sysroot "$lib"
+ 	  case $lib in
+-	  *.la)	func_source "$lib" ;;
++	  *.la)	func_source "$func_resolve_sysroot_result" ;;
+ 	  esac
+ 
+ 	  # Collect preopened libtool deplibs, except any this library
+ 	  # has declared as weak libs
+ 	  for deplib in $dependency_libs; do
+-            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
++	    func_basename "$deplib"
++            deplib_base=$func_basename_result
+ 	    case " $weak_libs " in
+ 	    *" $deplib_base "*) ;;
+-	    *) deplibs="$deplibs $deplib" ;;
++	    *) func_append deplibs " $deplib" ;;
+ 	    esac
+ 	  done
+ 	done
+ 	libs="$dlprefiles"
+       fi
+       if test "$pass" = dlopen; then
+ 	# Collect dlpreopened libraries
+ 	save_deplibs="$deplibs"
+ 	deplibs=
+       fi
+ 
+       for deplib in $libs; do
+ 	lib=
+ 	found=no
+ 	case $deplib in
+-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
++        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ 	  if test "$linkmode,$pass" = "prog,link"; then
+ 	    compile_deplibs="$deplib $compile_deplibs"
+ 	    finalize_deplibs="$deplib $finalize_deplibs"
+ 	  else
+-	    compiler_flags="$compiler_flags $deplib"
++	    func_append compiler_flags " $deplib"
+ 	    if test "$linkmode" = lib ; then
+ 		case "$new_inherited_linker_flags " in
+ 		    *" $deplib "*) ;;
+-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
++		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+ 		esac
+ 	    fi
+ 	  fi
+ 	  continue
+ 	  ;;
+ 	-l*)
+ 	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+ 	    func_warning "\`-l' is ignored for archives/objects"
+@@ -5156,65 +6250,71 @@ func_mode_link ()
+ 	  if test "$linkmode,$pass" = "prog,link"; then
+ 	    compile_deplibs="$deplib $compile_deplibs"
+ 	    finalize_deplibs="$deplib $finalize_deplibs"
+ 	  else
+ 	    deplibs="$deplib $deplibs"
+ 	    if test "$linkmode" = lib ; then
+ 		case "$new_inherited_linker_flags " in
+ 		    *" $deplib "*) ;;
+-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
++		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+ 		esac
+ 	    fi
+ 	  fi
+ 	  continue
+ 	  ;;
+ 	-L*)
+ 	  case $linkmode in
+ 	  lib)
+ 	    deplibs="$deplib $deplibs"
+ 	    test "$pass" = conv && continue
+ 	    newdependency_libs="$deplib $newdependency_libs"
+ 	    func_stripname '-L' '' "$deplib"
+-	    newlib_search_path="$newlib_search_path $func_stripname_result"
++	    func_resolve_sysroot "$func_stripname_result"
++	    func_append newlib_search_path " $func_resolve_sysroot_result"
+ 	    ;;
+ 	  prog)
+ 	    if test "$pass" = conv; then
+ 	      deplibs="$deplib $deplibs"
+ 	      continue
+ 	    fi
+ 	    if test "$pass" = scan; then
+ 	      deplibs="$deplib $deplibs"
+ 	    else
+ 	      compile_deplibs="$deplib $compile_deplibs"
+ 	      finalize_deplibs="$deplib $finalize_deplibs"
+ 	    fi
+ 	    func_stripname '-L' '' "$deplib"
+-	    newlib_search_path="$newlib_search_path $func_stripname_result"
++	    func_resolve_sysroot "$func_stripname_result"
++	    func_append newlib_search_path " $func_resolve_sysroot_result"
+ 	    ;;
+ 	  *)
+ 	    func_warning "\`-L' is ignored for archives/objects"
+ 	    ;;
+ 	  esac # linkmode
+ 	  continue
+ 	  ;; # -L
+ 	-R*)
+ 	  if test "$pass" = link; then
+ 	    func_stripname '-R' '' "$deplib"
+-	    dir=$func_stripname_result
++	    func_resolve_sysroot "$func_stripname_result"
++	    dir=$func_resolve_sysroot_result
+ 	    # Make sure the xrpath contains only unique directories.
+ 	    case "$xrpath " in
+ 	    *" $dir "*) ;;
+-	    *) xrpath="$xrpath $dir" ;;
++	    *) func_append xrpath " $dir" ;;
+ 	    esac
+ 	  fi
+ 	  deplibs="$deplib $deplibs"
+ 	  continue
+ 	  ;;
+-	*.la) lib="$deplib" ;;
++	*.la)
++	  func_resolve_sysroot "$deplib"
++	  lib=$func_resolve_sysroot_result
++	  ;;
+ 	*.$libext)
+ 	  if test "$pass" = conv; then
+ 	    deplibs="$deplib $deplibs"
+ 	    continue
+ 	  fi
+ 	  case $linkmode in
+ 	  lib)
+ 	    # Linking convenience modules into shared libraries is allowed,
+@@ -5222,35 +6322,35 @@ func_mode_link ()
+ 	    case " $dlpreconveniencelibs " in
+ 	    *" $deplib "*) ;;
+ 	    *)
+ 	      valid_a_lib=no
+ 	      case $deplibs_check_method in
+ 		match_pattern*)
+ 		  set dummy $deplibs_check_method; shift
+ 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+-		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
++		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ 		    | $EGREP "$match_pattern_regex" > /dev/null; then
+ 		    valid_a_lib=yes
+ 		  fi
+ 		;;
+ 		pass_all)
+ 		  valid_a_lib=yes
+ 		;;
+ 	      esac
+ 	      if test "$valid_a_lib" != yes; then
+-		$ECHO
++		echo
+ 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+-		$ECHO "*** I have the capability to make that library automatically link in when"
+-		$ECHO "*** you link to this library.  But I can only do this if you have a"
+-		$ECHO "*** shared version of the library, which you do not appear to have"
+-		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
+-		$ECHO "*** that it is just a static archive that I should not use here."
++		echo "*** I have the capability to make that library automatically link in when"
++		echo "*** you link to this library.  But I can only do this if you have a"
++		echo "*** shared version of the library, which you do not appear to have"
++		echo "*** because the file extensions .$libext of this argument makes me believe"
++		echo "*** that it is just a static archive that I should not use here."
+ 	      else
+-		$ECHO
++		echo
+ 		$ECHO "*** Warning: Linking the shared library $output against the"
+ 		$ECHO "*** static library $deplib is not portable!"
+ 		deplibs="$deplib $deplibs"
+ 	      fi
+ 	      ;;
+ 	    esac
+ 	    continue
+ 	    ;;
+@@ -5267,21 +6367,21 @@ func_mode_link ()
+ 	  ;; # *.$libext
+ 	*.lo | *.$objext)
+ 	  if test "$pass" = conv; then
+ 	    deplibs="$deplib $deplibs"
+ 	  elif test "$linkmode" = prog; then
+ 	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ 	      # If there is no dlopen support or we're linking statically,
+ 	      # we need to preload.
+-	      newdlprefiles="$newdlprefiles $deplib"
++	      func_append newdlprefiles " $deplib"
+ 	      compile_deplibs="$deplib $compile_deplibs"
+ 	      finalize_deplibs="$deplib $finalize_deplibs"
+ 	    else
+-	      newdlfiles="$newdlfiles $deplib"
++	      func_append newdlfiles " $deplib"
+ 	    fi
+ 	  fi
+ 	  continue
+ 	  ;;
+ 	%DEPLIBS%)
+ 	  alldeplibs=yes
+ 	  continue
+ 	  ;;
+@@ -5313,83 +6413,89 @@ func_mode_link ()
+ 	avoidtemprpath=
+ 
+ 
+ 	# Read the .la file
+ 	func_source "$lib"
+ 
+ 	# Convert "-framework foo" to "foo.ltframework"
+ 	if test -n "$inherited_linker_flags"; then
+-	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
++	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ 	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ 	    case " $new_inherited_linker_flags " in
+ 	      *" $tmp_inherited_linker_flag "*) ;;
+-	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
++	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ 	    esac
+ 	  done
+ 	fi
+-	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 	if test "$linkmode,$pass" = "lib,link" ||
+ 	   test "$linkmode,$pass" = "prog,scan" ||
+ 	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
++	  test -n "$dlopen" && func_append dlfiles " $dlopen"
++	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ 	fi
+ 
+ 	if test "$pass" = conv; then
+ 	  # Only check for convenience libraries
+ 	  deplibs="$lib $deplibs"
+ 	  if test -z "$libdir"; then
+ 	    if test -z "$old_library"; then
+ 	      func_fatal_error "cannot find name of link library for \`$lib'"
+ 	    fi
+ 	    # It is a libtool convenience library, so add in its objects.
+-	    convenience="$convenience $ladir/$objdir/$old_library"
+-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
++	    func_append convenience " $ladir/$objdir/$old_library"
++	    func_append old_convenience " $ladir/$objdir/$old_library"
+ 	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ 	    func_fatal_error "\`$lib' is not a convenience library"
+ 	  fi
+ 	  tmp_libs=
+ 	  for deplib in $dependency_libs; do
+ 	    deplibs="$deplib $deplibs"
+-	    if $opt_duplicate_deps ; then
++	    if $opt_preserve_dup_deps ; then
+ 	      case "$tmp_libs " in
+-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ 	      esac
+ 	    fi
+-	    tmp_libs="$tmp_libs $deplib"
++	    func_append tmp_libs " $deplib"
+ 	  done
+ 	  continue
+ 	fi # $pass = conv
+ 
+ 
+ 	# Get the name of the library we link against.
+ 	linklib=
+-	for l in $old_library $library_names; do
+-	  linklib="$l"
+-	done
++	if test -n "$old_library" &&
++	   { test "$prefer_static_libs" = yes ||
++	     test "$prefer_static_libs,$installed" = "built,no"; }; then
++	  linklib=$old_library
++	else
++	  for l in $old_library $library_names; do
++	    linklib="$l"
++	  done
++	fi
+ 	if test -z "$linklib"; then
+ 	  func_fatal_error "cannot find name of link library for \`$lib'"
+ 	fi
+ 
+ 	# This library was specified with -dlopen.
+ 	if test "$pass" = dlopen; then
+ 	  if test -z "$libdir"; then
+ 	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ 	  fi
+ 	  if test -z "$dlname" ||
+ 	     test "$dlopen_support" != yes ||
+ 	     test "$build_libtool_libs" = no; then
+ 	    # If there is no dlname, no dlopen support or we're linking
+ 	    # statically, we need to preload.  We also need to preload any
+ 	    # dependent libraries so libltdl's deplib preloader doesn't
+ 	    # bomb out in the load deplibs phase.
+-	    dlprefiles="$dlprefiles $lib $dependency_libs"
++	    func_append dlprefiles " $lib $dependency_libs"
+ 	  else
+-	    newdlfiles="$newdlfiles $lib"
++	    func_append newdlfiles " $lib"
+ 	  fi
+ 	  continue
+ 	fi # $pass = dlopen
+ 
+ 	# We need an absolute path.
+ 	case $ladir in
+ 	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ 	*)
+@@ -5401,61 +6507,87 @@ func_mode_link ()
+ 	  fi
+ 	  ;;
+ 	esac
+ 	func_basename "$lib"
+ 	laname="$func_basename_result"
+ 
+ 	# Find the relevant object directory and library name.
+ 	if test "X$installed" = Xyes; then
+-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
++	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ 	    func_warning "library \`$lib' was moved."
+ 	    dir="$ladir"
+ 	    absdir="$abs_ladir"
+ 	    libdir="$abs_ladir"
+ 	  else
+-	    dir="$libdir"
+-	    absdir="$libdir"
++	    dir="$lt_sysroot$libdir"
++	    absdir="$lt_sysroot$libdir"
+ 	  fi
+ 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ 	else
+ 	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ 	    dir="$ladir"
+ 	    absdir="$abs_ladir"
+ 	    # Remove this search path later
+-	    notinst_path="$notinst_path $abs_ladir"
++	    func_append notinst_path " $abs_ladir"
+ 	  else
+ 	    dir="$ladir/$objdir"
+ 	    absdir="$abs_ladir/$objdir"
+ 	    # Remove this search path later
+-	    notinst_path="$notinst_path $abs_ladir"
++	    func_append notinst_path " $abs_ladir"
+ 	  fi
+ 	fi # $installed = yes
+ 	func_stripname 'lib' '.la' "$laname"
+ 	name=$func_stripname_result
+ 
+ 	# This library was specified with -dlpreopen.
+ 	if test "$pass" = dlpreopen; then
+ 	  if test -z "$libdir" && test "$linkmode" = prog; then
+ 	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ 	  fi
+-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+-	  # are required to link).
+-	  if test -n "$old_library"; then
+-	    newdlprefiles="$newdlprefiles $dir/$old_library"
+-	    # Keep a list of preopened convenience libraries to check
+-	    # that they are being used correctly in the link pass.
+-	    test -z "$libdir" && \
+-		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+-	  elif test -n "$dlname"; then
+-	    newdlprefiles="$newdlprefiles $dir/$dlname"
+-	  else
+-	    newdlprefiles="$newdlprefiles $dir/$linklib"
+-	  fi
++	  case "$host" in
++	    # special handling for platforms with PE-DLLs.
++	    *cygwin* | *mingw* | *cegcc* )
++	      # Linker will automatically link against shared library if both
++	      # static and shared are present.  Therefore, ensure we extract
++	      # symbols from the import library if a shared library is present
++	      # (otherwise, the dlopen module name will be incorrect).  We do
++	      # this by putting the import library name into $newdlprefiles.
++	      # We recover the dlopen module name by 'saving' the la file
++	      # name in a special purpose variable, and (later) extracting the
++	      # dlname from the la file.
++	      if test -n "$dlname"; then
++	        func_tr_sh "$dir/$linklib"
++	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
++	        func_append newdlprefiles " $dir/$linklib"
++	      else
++	        func_append newdlprefiles " $dir/$old_library"
++	        # Keep a list of preopened convenience libraries to check
++	        # that they are being used correctly in the link pass.
++	        test -z "$libdir" && \
++	          func_append dlpreconveniencelibs " $dir/$old_library"
++	      fi
++	    ;;
++	    * )
++	      # Prefer using a static library (so that no silly _DYNAMIC symbols
++	      # are required to link).
++	      if test -n "$old_library"; then
++	        func_append newdlprefiles " $dir/$old_library"
++	        # Keep a list of preopened convenience libraries to check
++	        # that they are being used correctly in the link pass.
++	        test -z "$libdir" && \
++	          func_append dlpreconveniencelibs " $dir/$old_library"
++	      # Otherwise, use the dlname, so that lt_dlopen finds it.
++	      elif test -n "$dlname"; then
++	        func_append newdlprefiles " $dir/$dlname"
++	      else
++	        func_append newdlprefiles " $dir/$linklib"
++	      fi
++	    ;;
++	  esac
+ 	fi # $pass = dlpreopen
+ 
+ 	if test -z "$libdir"; then
+ 	  # Link the convenience library
+ 	  if test "$linkmode" = lib; then
+ 	    deplibs="$dir/$old_library $deplibs"
+ 	  elif test "$linkmode,$pass" = "prog,link"; then
+ 	    compile_deplibs="$dir/$old_library $compile_deplibs"
+@@ -5463,82 +6595,83 @@ func_mode_link ()
+ 	  else
+ 	    deplibs="$lib $deplibs" # used for prog,scan pass
+ 	  fi
+ 	  continue
+ 	fi
+ 
+ 
+ 	if test "$linkmode" = prog && test "$pass" != link; then
+-	  newlib_search_path="$newlib_search_path $ladir"
++	  func_append newlib_search_path " $ladir"
+ 	  deplibs="$lib $deplibs"
+ 
+ 	  linkalldeplibs=no
+ 	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ 	     test "$build_libtool_libs" = no; then
+ 	    linkalldeplibs=yes
+ 	  fi
+ 
+ 	  tmp_libs=
+ 	  for deplib in $dependency_libs; do
+ 	    case $deplib in
+ 	    -L*) func_stripname '-L' '' "$deplib"
+-	         newlib_search_path="$newlib_search_path $func_stripname_result"
++	         func_resolve_sysroot "$func_stripname_result"
++	         func_append newlib_search_path " $func_resolve_sysroot_result"
+ 		 ;;
+ 	    esac
+ 	    # Need to link against all dependency_libs?
+ 	    if test "$linkalldeplibs" = yes; then
+ 	      deplibs="$deplib $deplibs"
+ 	    else
+ 	      # Need to hardcode shared library paths
+ 	      # or/and link against static libraries
+ 	      newdependency_libs="$deplib $newdependency_libs"
+ 	    fi
+-	    if $opt_duplicate_deps ; then
++	    if $opt_preserve_dup_deps ; then
+ 	      case "$tmp_libs " in
+-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ 	      esac
+ 	    fi
+-	    tmp_libs="$tmp_libs $deplib"
++	    func_append tmp_libs " $deplib"
+ 	  done # for deplib
+ 	  continue
+ 	fi # $linkmode = prog...
+ 
+ 	if test "$linkmode,$pass" = "prog,link"; then
+ 	  if test -n "$library_names" &&
+ 	     { { test "$prefer_static_libs" = no ||
+ 	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ 	       test -z "$old_library"; }; then
+ 	    # We need to hardcode the library path
+ 	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ 	      # Make sure the rpath contains only unique directories.
+ 	      case "$temp_rpath:" in
+ 	      *"$absdir:"*) ;;
+-	      *) temp_rpath="$temp_rpath$absdir:" ;;
++	      *) func_append temp_rpath "$absdir:" ;;
+ 	      esac
+ 	    fi
+ 
+ 	    # Hardcode the library path.
+ 	    # Skip directories that are in the system default run-time
+ 	    # search path.
+ 	    case " $sys_lib_dlsearch_path " in
+ 	    *" $absdir "*) ;;
+ 	    *)
+ 	      case "$compile_rpath " in
+ 	      *" $absdir "*) ;;
+-	      *) compile_rpath="$compile_rpath $absdir"
++	      *) func_append compile_rpath " $absdir" ;;
+ 	      esac
+ 	      ;;
+ 	    esac
+ 	    case " $sys_lib_dlsearch_path " in
+ 	    *" $libdir "*) ;;
+ 	    *)
+ 	      case "$finalize_rpath " in
+ 	      *" $libdir "*) ;;
+-	      *) finalize_rpath="$finalize_rpath $libdir"
++	      *) func_append finalize_rpath " $libdir" ;;
+ 	      esac
+ 	      ;;
+ 	    esac
+ 	  fi # $linkmode,$pass = prog,link...
+ 
+ 	  if test "$alldeplibs" = yes &&
+ 	     { test "$deplibs_check_method" = pass_all ||
+ 	       { test "$build_libtool_libs" = yes &&
+@@ -5553,39 +6686,39 @@ func_mode_link ()
+ 	if test "$use_static_libs" = built && test "$installed" = yes; then
+ 	  use_static_libs=no
+ 	fi
+ 	if test -n "$library_names" &&
+ 	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ 	  case $host in
+ 	  *cygwin* | *mingw* | *cegcc*)
+ 	      # No point in relinking DLLs because paths are not encoded
+-	      notinst_deplibs="$notinst_deplibs $lib"
++	      func_append notinst_deplibs " $lib"
+ 	      need_relink=no
+ 	    ;;
+ 	  *)
+ 	    if test "$installed" = no; then
+-	      notinst_deplibs="$notinst_deplibs $lib"
++	      func_append notinst_deplibs " $lib"
+ 	      need_relink=yes
+ 	    fi
+ 	    ;;
+ 	  esac
+ 	  # This is a shared library
+ 
+ 	  # Warn about portability, can't link against -module's on some
+ 	  # systems (darwin).  Don't bleat about dlopened modules though!
+ 	  dlopenmodule=""
+ 	  for dlpremoduletest in $dlprefiles; do
+ 	    if test "X$dlpremoduletest" = "X$lib"; then
+ 	      dlopenmodule="$dlpremoduletest"
+ 	      break
+ 	    fi
+ 	  done
+ 	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+-	    $ECHO
++	    echo
+ 	    if test "$linkmode" = prog; then
+ 	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ 	    else
+ 	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ 	    fi
+ 	    $ECHO "*** $linklib is not portable!"
+ 	  fi
+ 	  if test "$linkmode" = lib &&
+@@ -5593,26 +6726,26 @@ func_mode_link ()
+ 	    # Hardcode the library path.
+ 	    # Skip directories that are in the system default run-time
+ 	    # search path.
+ 	    case " $sys_lib_dlsearch_path " in
+ 	    *" $absdir "*) ;;
+ 	    *)
+ 	      case "$compile_rpath " in
+ 	      *" $absdir "*) ;;
+-	      *) compile_rpath="$compile_rpath $absdir"
++	      *) func_append compile_rpath " $absdir" ;;
+ 	      esac
+ 	      ;;
+ 	    esac
+ 	    case " $sys_lib_dlsearch_path " in
+ 	    *" $libdir "*) ;;
+ 	    *)
+ 	      case "$finalize_rpath " in
+ 	      *" $libdir "*) ;;
+-	      *) finalize_rpath="$finalize_rpath $libdir"
++	      *) func_append finalize_rpath " $libdir" ;;
+ 	      esac
+ 	      ;;
+ 	    esac
+ 	  fi
+ 
+ 	  if test -n "$old_archive_from_expsyms_cmds"; then
+ 	    # figure out the soname
+ 	    set dummy $library_names
+@@ -5656,17 +6789,17 @@ func_mode_link ()
+ 	      func_verbose "generating import library for \`$soname'"
+ 	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ 	    fi
+ 	    # make sure the library variables are pointing to the new library
+ 	    dir=$output_objdir
+ 	    linklib=$newlib
+ 	  fi # test -n "$old_archive_from_expsyms_cmds"
+ 
+-	  if test "$linkmode" = prog || test "$mode" != relink; then
++	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+ 	    add_shlibpath=
+ 	    add_dir=
+ 	    add=
+ 	    lib_linked=yes
+ 	    case $hardcode_action in
+ 	    immediate | unsupported)
+ 	      if test "$hardcode_direct" = no; then
+ 		add="$dir/$linklib"
+@@ -5678,19 +6811,19 @@ func_mode_link ()
+ 		  *-*-darwin* )
+ 		    # if the lib is a (non-dlopened) module then we can not
+ 		    # link against it, someone is ignoring the earlier warnings
+ 		    if /usr/bin/file -L $add 2> /dev/null |
+ 			 $GREP ": [^:]* bundle" >/dev/null ; then
+ 		      if test "X$dlopenmodule" != "X$lib"; then
+ 			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ 			if test -z "$old_library" ; then
+-			  $ECHO
+-			  $ECHO "*** And there doesn't seem to be a static archive available"
+-			  $ECHO "*** The link will probably fail, sorry"
++			  echo
++			  echo "*** And there doesn't seem to be a static archive available"
++			  echo "*** The link will probably fail, sorry"
+ 			else
+ 			  add="$dir/$old_library"
+ 			fi
+ 		      elif test -n "$old_library"; then
+ 			add="$dir/$old_library"
+ 		      fi
+ 		    fi
+ 		esac
+@@ -5707,22 +6840,22 @@ func_mode_link ()
+ 		lib_linked=no
+ 	      fi
+ 	      ;;
+ 	    relink)
+ 	      if test "$hardcode_direct" = yes &&
+ 	         test "$hardcode_direct_absolute" = no; then
+ 		add="$dir/$linklib"
+ 	      elif test "$hardcode_minus_L" = yes; then
+-		add_dir="-L$dir"
++		add_dir="-L$absdir"
+ 		# Try looking first in the location we're being installed to.
+ 		if test -n "$inst_prefix_dir"; then
+ 		  case $libdir in
+ 		    [\\/]*)
+-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
++		      func_append add_dir " -L$inst_prefix_dir$libdir"
+ 		      ;;
+ 		  esac
+ 		fi
+ 		add="-l$name"
+ 	      elif test "$hardcode_shlibpath_var" = yes; then
+ 		add_shlibpath="$dir"
+ 		add="-l$name"
+ 	      else
+@@ -5734,68 +6867,68 @@ func_mode_link ()
+ 
+ 	    if test "$lib_linked" != yes; then
+ 	      func_fatal_configuration "unsupported hardcode properties"
+ 	    fi
+ 
+ 	    if test -n "$add_shlibpath"; then
+ 	      case :$compile_shlibpath: in
+ 	      *":$add_shlibpath:"*) ;;
+-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
++	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ 	      esac
+ 	    fi
+ 	    if test "$linkmode" = prog; then
+ 	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ 	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ 	    else
+ 	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ 	      test -n "$add" && deplibs="$add $deplibs"
+ 	      if test "$hardcode_direct" != yes &&
+ 		 test "$hardcode_minus_L" != yes &&
+ 		 test "$hardcode_shlibpath_var" = yes; then
+ 		case :$finalize_shlibpath: in
+ 		*":$libdir:"*) ;;
+-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++		*) func_append finalize_shlibpath "$libdir:" ;;
+ 		esac
+ 	      fi
+ 	    fi
+ 	  fi
+ 
+-	  if test "$linkmode" = prog || test "$mode" = relink; then
++	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+ 	    add_shlibpath=
+ 	    add_dir=
+ 	    add=
+ 	    # Finalize command for both is simple: just hardcode it.
+ 	    if test "$hardcode_direct" = yes &&
+ 	       test "$hardcode_direct_absolute" = no; then
+ 	      add="$libdir/$linklib"
+ 	    elif test "$hardcode_minus_L" = yes; then
+ 	      add_dir="-L$libdir"
+ 	      add="-l$name"
+ 	    elif test "$hardcode_shlibpath_var" = yes; then
+ 	      case :$finalize_shlibpath: in
+ 	      *":$libdir:"*) ;;
+-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++	      *) func_append finalize_shlibpath "$libdir:" ;;
+ 	      esac
+ 	      add="-l$name"
+ 	    elif test "$hardcode_automatic" = yes; then
+ 	      if test -n "$inst_prefix_dir" &&
+ 		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ 		add="$inst_prefix_dir$libdir/$linklib"
+ 	      else
+ 		add="$libdir/$linklib"
+ 	      fi
+ 	    else
+ 	      # We cannot seem to hardcode it, guess we'll fake it.
+ 	      add_dir="-L$libdir"
+ 	      # Try looking first in the location we're being installed to.
+ 	      if test -n "$inst_prefix_dir"; then
+ 		case $libdir in
+ 		  [\\/]*)
+-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
++		    func_append add_dir " -L$inst_prefix_dir$libdir"
+ 		    ;;
+ 		esac
+ 	      fi
+ 	      add="-l$name"
+ 	    fi
+ 
+ 	    if test "$linkmode" = prog; then
+ 	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+@@ -5820,31 +6953,31 @@ func_mode_link ()
+ 	elif test "$build_libtool_libs" = yes; then
+ 	  # Not a shared library
+ 	  if test "$deplibs_check_method" != pass_all; then
+ 	    # We're trying link a shared library against a static one
+ 	    # but the system doesn't support it.
+ 
+ 	    # Just print a warning and add the library to dependency_libs so
+ 	    # that the program can be linked against the static library.
+-	    $ECHO
++	    echo
+ 	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+-	    $ECHO "*** I have the capability to make that library automatically link in when"
+-	    $ECHO "*** you link to this library.  But I can only do this if you have a"
+-	    $ECHO "*** shared version of the library, which you do not appear to have."
++	    echo "*** I have the capability to make that library automatically link in when"
++	    echo "*** you link to this library.  But I can only do this if you have a"
++	    echo "*** shared version of the library, which you do not appear to have."
+ 	    if test "$module" = yes; then
+-	      $ECHO "*** But as you try to build a module library, libtool will still create "
+-	      $ECHO "*** a static module, that should work as long as the dlopening application"
+-	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
++	      echo "*** But as you try to build a module library, libtool will still create "
++	      echo "*** a static module, that should work as long as the dlopening application"
++	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ 	      if test -z "$global_symbol_pipe"; then
+-		$ECHO
+-		$ECHO "*** However, this would only work if libtool was able to extract symbol"
+-		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+-		$ECHO "*** not find such a program.  So, this module is probably useless."
+-		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
++		echo
++		echo "*** However, this would only work if libtool was able to extract symbol"
++		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
++		echo "*** not find such a program.  So, this module is probably useless."
++		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ 	      fi
+ 	      if test "$build_old_libs" = no; then
+ 		build_libtool_libs=module
+ 		build_old_libs=yes
+ 	      else
+ 		build_libtool_libs=no
+ 	      fi
+ 	    fi
+@@ -5862,47 +6995,56 @@ func_mode_link ()
+ 	    # Extract -R from dependency_libs
+ 	    temp_deplibs=
+ 	    for libdir in $dependency_libs; do
+ 	      case $libdir in
+ 	      -R*) func_stripname '-R' '' "$libdir"
+ 	           temp_xrpath=$func_stripname_result
+ 		   case " $xrpath " in
+ 		   *" $temp_xrpath "*) ;;
+-		   *) xrpath="$xrpath $temp_xrpath";;
++		   *) func_append xrpath " $temp_xrpath";;
+ 		   esac;;
+-	      *) temp_deplibs="$temp_deplibs $libdir";;
++	      *) func_append temp_deplibs " $libdir";;
+ 	      esac
+ 	    done
+ 	    dependency_libs="$temp_deplibs"
+ 	  fi
+ 
+-	  newlib_search_path="$newlib_search_path $absdir"
++	  func_append newlib_search_path " $absdir"
+ 	  # Link against this library
+ 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ 	  # ... and its dependency_libs
+ 	  tmp_libs=
+ 	  for deplib in $dependency_libs; do
+ 	    newdependency_libs="$deplib $newdependency_libs"
+-	    if $opt_duplicate_deps ; then
++	    case $deplib in
++              -L*) func_stripname '-L' '' "$deplib"
++                   func_resolve_sysroot "$func_stripname_result";;
++              *) func_resolve_sysroot "$deplib" ;;
++            esac
++	    if $opt_preserve_dup_deps ; then
+ 	      case "$tmp_libs " in
+-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++	      *" $func_resolve_sysroot_result "*)
++                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ 	      esac
+ 	    fi
+-	    tmp_libs="$tmp_libs $deplib"
++	    func_append tmp_libs " $func_resolve_sysroot_result"
+ 	  done
+ 
+ 	  if test "$link_all_deplibs" != no; then
+ 	    # Add the search paths of all dependency libraries
+ 	    for deplib in $dependency_libs; do
++	      path=
+ 	      case $deplib in
+ 	      -L*) path="$deplib" ;;
+ 	      *.la)
++	        func_resolve_sysroot "$deplib"
++	        deplib=$func_resolve_sysroot_result
+ 	        func_dirname "$deplib" "" "."
+-		dir="$func_dirname_result"
++		dir=$func_dirname_result
+ 		# We need an absolute path.
+ 		case $dir in
+ 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ 		*)
+ 		  absdir=`cd "$dir" && pwd`
+ 		  if test -z "$absdir"; then
+ 		    func_warning "cannot determine absolute directory name of \`$dir'"
+ 		    absdir="$dir"
+@@ -5919,18 +7061,18 @@ func_mode_link ()
+ 		      depdepl=$tmp
+ 		    done
+ 		    if test -f "$absdir/$objdir/$depdepl" ; then
+ 		      depdepl="$absdir/$objdir/$depdepl"
+ 		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                       if test -z "$darwin_install_name"; then
+                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                       fi
+-		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+-		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
++		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
++		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+ 		      path=
+ 		    fi
+ 		  fi
+ 		  ;;
+ 		*)
+ 		  path="-L$absdir/$objdir"
+ 		  ;;
+ 		esac
+@@ -5953,34 +7095,34 @@ func_mode_link ()
+ 	  fi # link_all_deplibs != no
+ 	fi # linkmode = lib
+       done # for deplib in $libs
+       if test "$pass" = link; then
+ 	if test "$linkmode" = "prog"; then
+ 	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ 	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ 	else
+-	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 	fi
+       fi
+       dependency_libs="$newdependency_libs"
+       if test "$pass" = dlpreopen; then
+ 	# Link the dlpreopened libraries before other libraries
+ 	for deplib in $save_deplibs; do
+ 	  deplibs="$deplib $deplibs"
+ 	done
+       fi
+       if test "$pass" != dlopen; then
+ 	if test "$pass" != conv; then
+ 	  # Make sure lib_search_path contains only unique directories.
+ 	  lib_search_path=
+ 	  for dir in $newlib_search_path; do
+ 	    case "$lib_search_path " in
+ 	    *" $dir "*) ;;
+-	    *) lib_search_path="$lib_search_path $dir" ;;
++	    *) func_append lib_search_path " $dir" ;;
+ 	    esac
+ 	  done
+ 	  newlib_search_path=
+ 	fi
+ 
+ 	if test "$linkmode,$pass" != "prog,link"; then
+ 	  vars="deplibs"
+ 	else
+@@ -6028,36 +7170,36 @@ func_mode_link ()
+ 	    esac
+ 	  done
+ 	  tmp_libs=
+ 	  for deplib in $new_libs; do
+ 	    case $deplib in
+ 	    -L*)
+ 	      case " $tmp_libs " in
+ 	      *" $deplib "*) ;;
+-	      *) tmp_libs="$tmp_libs $deplib" ;;
++	      *) func_append tmp_libs " $deplib" ;;
+ 	      esac
+ 	      ;;
+-	    *) tmp_libs="$tmp_libs $deplib" ;;
++	    *) func_append tmp_libs " $deplib" ;;
+ 	    esac
+ 	  done
+ 	  eval $var=\"$tmp_libs\"
+ 	done # for var
+       fi
+       # Last step: remove runtime libs from dependency_libs
+       # (they stay in deplibs)
+       tmp_libs=
+       for i in $dependency_libs ; do
+ 	case " $predeps $postdeps $compiler_lib_search_path " in
+ 	*" $i "*)
+ 	  i=""
+ 	  ;;
+ 	esac
+ 	if test -n "$i" ; then
+-	  tmp_libs="$tmp_libs $i"
++	  func_append tmp_libs " $i"
+ 	fi
+       done
+       dependency_libs=$tmp_libs
+     done # for pass
+     if test "$linkmode" = prog; then
+       dlfiles="$newdlfiles"
+     fi
+     if test "$linkmode" = prog || test "$linkmode" = lib; then
+@@ -6088,17 +7230,17 @@ func_mode_link ()
+ 	func_warning "\`-release' is ignored for archives"
+ 
+       test -n "$export_symbols$export_symbols_regex" && \
+ 	func_warning "\`-export-symbols' is ignored for archives"
+ 
+       # Now set the variables for building old libraries.
+       build_libtool_libs=no
+       oldlibs="$output"
+-      objs="$objs$old_deplibs"
++      func_append objs "$old_deplibs"
+       ;;
+ 
+     lib)
+       # Make sure we only generate libraries of the form `libNAME.la'.
+       case $outputname in
+       lib*)
+ 	func_stripname 'lib' '.la' "$outputname"
+ 	name=$func_stripname_result
+@@ -6121,20 +7263,20 @@ func_mode_link ()
+ 	fi
+ 	;;
+       esac
+ 
+       if test -n "$objs"; then
+ 	if test "$deplibs_check_method" != pass_all; then
+ 	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ 	else
+-	  $ECHO
++	  echo
+ 	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ 	  $ECHO "*** objects $objs is not portable!"
+-	  libobjs="$libobjs $objs"
++	  func_append libobjs " $objs"
+ 	fi
+       fi
+ 
+       test "$dlself" != no && \
+ 	func_warning "\`-dlopen self' is ignored for libtool libraries"
+ 
+       set dummy $rpath
+       shift
+@@ -6183,23 +7325,24 @@ func_mode_link ()
+ 	  #
+ 	  # There are really only two kinds -- those that
+ 	  # use the current revision as the major version
+ 	  # and those that subtract age and use age as
+ 	  # a minor version.  But, then there is irix
+ 	  # which has an extra 1 added just for fun
+ 	  #
+ 	  case $version_type in
++	  # correct linux to gnu/linux during the next big refactor
+ 	  darwin|linux|osf|windows|none)
+ 	    func_arith $number_major + $number_minor
+ 	    current=$func_arith_result
+ 	    age="$number_minor"
+ 	    revision="$number_revision"
+ 	    ;;
+-	  freebsd-aout|freebsd-elf|sunos)
++	  freebsd-aout|freebsd-elf|qnx|sunos)
+ 	    current="$number_major"
+ 	    revision="$number_minor"
+ 	    age="0"
+ 	    ;;
+ 	  irix|nonstopux)
+ 	    func_arith $number_major + $number_minor
+ 	    current=$func_arith_result
+ 	    age="$number_minor"
+@@ -6299,17 +7442,17 @@ func_mode_link ()
+ 	    verstring="$verstring_prefix$major.$iface:$verstring"
+ 	  done
+ 
+ 	  # Before this point, $major must not contain `.'.
+ 	  major=.$major
+ 	  versuffix="$major.$revision"
+ 	  ;;
+ 
+-	linux)
++	linux) # correct to gnu/linux during the next big refactor
+ 	  func_arith $current - $age
+ 	  major=.$func_arith_result
+ 	  versuffix="$major.$age.$revision"
+ 	  ;;
+ 
+ 	osf)
+ 	  func_arith $current - $age
+ 	  major=.$func_arith_result
+@@ -6322,17 +7465,17 @@ func_mode_link ()
+ 	    func_arith $current - $loop
+ 	    iface=$func_arith_result
+ 	    func_arith $loop - 1
+ 	    loop=$func_arith_result
+ 	    verstring="$verstring:${iface}.0"
+ 	  done
+ 
+ 	  # Make executables depend on our current version.
+-	  verstring="$verstring:${current}.0"
++	  func_append verstring ":${current}.0"
+ 	  ;;
+ 
+ 	qnx)
+ 	  major=".$current"
+ 	  versuffix=".$current"
+ 	  ;;
+ 
+ 	sunos)
+@@ -6390,120 +7533,121 @@ func_mode_link ()
+ 	else
+ 	  # Don't allow undefined symbols.
+ 	  allow_undefined_flag="$no_undefined_flag"
+ 	fi
+ 
+       fi
+ 
+       func_generate_dlsyms "$libname" "$libname" "yes"
+-      libobjs="$libobjs $symfileobj"
++      func_append libobjs " $symfileobj"
+       test "X$libobjs" = "X " && libobjs=
+ 
+-      if test "$mode" != relink; then
++      if test "$opt_mode" != relink; then
+ 	# Remove our outputs, but don't remove object files since they
+ 	# may have been created when compiling PIC objects.
+ 	removelist=
+ 	tempremovelist=`$ECHO "$output_objdir/*"`
+ 	for p in $tempremovelist; do
+ 	  case $p in
+ 	    *.$objext | *.gcno)
+ 	       ;;
+ 	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ 	       if test "X$precious_files_regex" != "X"; then
+ 		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ 		 then
+ 		   continue
+ 		 fi
+ 	       fi
+-	       removelist="$removelist $p"
++	       func_append removelist " $p"
+ 	       ;;
+ 	    *) ;;
+ 	  esac
+ 	done
+ 	test -n "$removelist" && \
+ 	  func_show_eval "${RM}r \$removelist"
+       fi
+ 
+       # Now set the variables for building old libraries.
+       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
++	func_append oldlibs " $output_objdir/$libname.$libext"
+ 
+ 	# Transform .lo files to .o files.
+-	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
++	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+       fi
+ 
+       # Eliminate all temporary directories.
+       #for path in $notinst_path; do
+-      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+-      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+-      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
++      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
++      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
++      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+       #done
+ 
+       if test -n "$xrpath"; then
+ 	# If the user specified any rpath flags, then add them.
+ 	temp_xrpath=
+ 	for libdir in $xrpath; do
+-	  temp_xrpath="$temp_xrpath -R$libdir"
++	  func_replace_sysroot "$libdir"
++	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+ 	  case "$finalize_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
++	  *) func_append finalize_rpath " $libdir" ;;
+ 	  esac
+ 	done
+ 	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ 	  dependency_libs="$temp_xrpath $dependency_libs"
+ 	fi
+       fi
+ 
+       # Make sure dlfiles contains only unique files that won't be dlpreopened
+       old_dlfiles="$dlfiles"
+       dlfiles=
+       for lib in $old_dlfiles; do
+ 	case " $dlprefiles $dlfiles " in
+ 	*" $lib "*) ;;
+-	*) dlfiles="$dlfiles $lib" ;;
++	*) func_append dlfiles " $lib" ;;
+ 	esac
+       done
+ 
+       # Make sure dlprefiles contains only unique files
+       old_dlprefiles="$dlprefiles"
+       dlprefiles=
+       for lib in $old_dlprefiles; do
+ 	case "$dlprefiles " in
+ 	*" $lib "*) ;;
+-	*) dlprefiles="$dlprefiles $lib" ;;
++	*) func_append dlprefiles " $lib" ;;
+ 	esac
+       done
+ 
+       if test "$build_libtool_libs" = yes; then
+ 	if test -n "$rpath"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
++	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # these systems don't actually have a c library (as such)!
+ 	    ;;
+ 	  *-*-rhapsody* | *-*-darwin1.[012])
+ 	    # Rhapsody C library is in the System framework
+-	    deplibs="$deplibs System.ltframework"
++	    func_append deplibs " System.ltframework"
+ 	    ;;
+ 	  *-*-netbsd*)
+ 	    # Don't link with libc until the a.out ld.so is fixed.
+ 	    ;;
+ 	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ 	    # Do not include libc due to us having libc/libc_r.
+ 	    ;;
+ 	  *-*-sco3.2v5* | *-*-sco5v6*)
+ 	    # Causes problems with __ctype
+ 	    ;;
+ 	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ 	    # Compiler inserts libc in the correct place for threads to work
+ 	    ;;
+ 	  *)
+ 	    # Add libc to deplibs on all other systems if necessary.
+ 	    if test "$build_libtool_need_lc" = "yes"; then
+-	      deplibs="$deplibs -lc"
++	      func_append deplibs " -lc"
+ 	    fi
+ 	    ;;
+ 	  esac
+ 	fi
+ 
+ 	# Transform deplibs into only deplibs that can be linked in shared.
+ 	name_save=$name
+ 	libname_save=$libname
+@@ -6542,42 +7686,42 @@ EOF
+ 	    for i in $deplibs; do
+ 	      case $i in
+ 	      -l*)
+ 		func_stripname -l '' "$i"
+ 		name=$func_stripname_result
+ 		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ 		  case " $predeps $postdeps " in
+ 		  *" $i "*)
+-		    newdeplibs="$newdeplibs $i"
++		    func_append newdeplibs " $i"
+ 		    i=""
+ 		    ;;
+ 		  esac
+ 		fi
+ 		if test -n "$i" ; then
+ 		  libname=`eval "\\$ECHO \"$libname_spec\""`
+ 		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ 		  set dummy $deplib_matches; shift
+ 		  deplib_match=$1
+ 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+-		    newdeplibs="$newdeplibs $i"
++		    func_append newdeplibs " $i"
+ 		  else
+ 		    droppeddeps=yes
+-		    $ECHO
++		    echo
+ 		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+-		    $ECHO "*** I have the capability to make that library automatically link in when"
+-		    $ECHO "*** you link to this library.  But I can only do this if you have a"
+-		    $ECHO "*** shared version of the library, which I believe you do not have"
+-		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+-		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
++		    echo "*** I have the capability to make that library automatically link in when"
++		    echo "*** you link to this library.  But I can only do this if you have a"
++		    echo "*** shared version of the library, which I believe you do not have"
++		    echo "*** because a test_compile did reveal that the linker did not use it for"
++		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ 		  fi
+ 		fi
+ 		;;
+ 	      *)
+-		newdeplibs="$newdeplibs $i"
++		func_append newdeplibs " $i"
+ 		;;
+ 	      esac
+ 	    done
+ 	  else
+ 	    # Error occurred in the first compile.  Let's try to salvage
+ 	    # the situation: Compile a separate program for each library.
+ 	    for i in $deplibs; do
+ 	      case $i in
+@@ -6585,360 +7729,375 @@ EOF
+ 		func_stripname -l '' "$i"
+ 		name=$func_stripname_result
+ 		$opt_dry_run || $RM conftest
+ 		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ 		  ldd_output=`ldd conftest`
+ 		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ 		    case " $predeps $postdeps " in
+ 		    *" $i "*)
+-		      newdeplibs="$newdeplibs $i"
++		      func_append newdeplibs " $i"
+ 		      i=""
+ 		      ;;
+ 		    esac
+ 		  fi
+ 		  if test -n "$i" ; then
+ 		    libname=`eval "\\$ECHO \"$libname_spec\""`
+ 		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ 		    set dummy $deplib_matches; shift
+ 		    deplib_match=$1
+ 		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+-		      newdeplibs="$newdeplibs $i"
++		      func_append newdeplibs " $i"
+ 		    else
+ 		      droppeddeps=yes
+-		      $ECHO
++		      echo
+ 		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+-		      $ECHO "*** I have the capability to make that library automatically link in when"
+-		      $ECHO "*** you link to this library.  But I can only do this if you have a"
+-		      $ECHO "*** shared version of the library, which you do not appear to have"
+-		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+-		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
++		      echo "*** I have the capability to make that library automatically link in when"
++		      echo "*** you link to this library.  But I can only do this if you have a"
++		      echo "*** shared version of the library, which you do not appear to have"
++		      echo "*** because a test_compile did reveal that the linker did not use this one"
++		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ 		    fi
+ 		  fi
+ 		else
+ 		  droppeddeps=yes
+-		  $ECHO
++		  echo
+ 		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+-		  $ECHO "*** make it link in!  You will probably need to install it or some"
+-		  $ECHO "*** library that it depends on before this library will be fully"
+-		  $ECHO "*** functional.  Installing it before continuing would be even better."
++		  echo "*** make it link in!  You will probably need to install it or some"
++		  echo "*** library that it depends on before this library will be fully"
++		  echo "*** functional.  Installing it before continuing would be even better."
+ 		fi
+ 		;;
+ 	      *)
+-		newdeplibs="$newdeplibs $i"
++		func_append newdeplibs " $i"
+ 		;;
+ 	      esac
+ 	    done
+ 	  fi
+ 	  ;;
+ 	file_magic*)
+ 	  set dummy $deplibs_check_method; shift
+ 	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ 	  for a_deplib in $deplibs; do
+ 	    case $a_deplib in
+ 	    -l*)
+ 	      func_stripname -l '' "$a_deplib"
+ 	      name=$func_stripname_result
+ 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ 		case " $predeps $postdeps " in
+ 		*" $a_deplib "*)
+-		  newdeplibs="$newdeplibs $a_deplib"
++		  func_append newdeplibs " $a_deplib"
+ 		  a_deplib=""
+ 		  ;;
+ 		esac
+ 	      fi
+ 	      if test -n "$a_deplib" ; then
+ 		libname=`eval "\\$ECHO \"$libname_spec\""`
++		if test -n "$file_magic_glob"; then
++		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
++		else
++		  libnameglob=$libname
++		fi
++		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+ 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
++		  if test "$want_nocaseglob" = yes; then
++		    shopt -s nocaseglob
++		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++		    $nocaseglob
++		  else
++		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++		  fi
+ 		  for potent_lib in $potential_libs; do
+ 		      # Follow soft links.
+ 		      if ls -lLd "$potent_lib" 2>/dev/null |
+ 			 $GREP " -> " >/dev/null; then
+ 			continue
+ 		      fi
+ 		      # The statement above tries to avoid entering an
+ 		      # endless loop below, in case of cyclic links.
+ 		      # We might still enter an endless loop, since a link
+ 		      # loop can be closed while we follow links,
+ 		      # but so what?
+ 		      potlib="$potent_lib"
+ 		      while test -h "$potlib" 2>/dev/null; do
+ 			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ 			case $potliblink in
+ 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+-			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
++			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+ 			esac
+ 		      done
+ 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ 			 $SED -e 10q |
+ 			 $EGREP "$file_magic_regex" > /dev/null; then
+-			newdeplibs="$newdeplibs $a_deplib"
++			func_append newdeplibs " $a_deplib"
+ 			a_deplib=""
+ 			break 2
+ 		      fi
+ 		  done
+ 		done
+ 	      fi
+ 	      if test -n "$a_deplib" ; then
+ 		droppeddeps=yes
+-		$ECHO
++		echo
+ 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+-		$ECHO "*** I have the capability to make that library automatically link in when"
+-		$ECHO "*** you link to this library.  But I can only do this if you have a"
+-		$ECHO "*** shared version of the library, which you do not appear to have"
+-		$ECHO "*** because I did check the linker path looking for a file starting"
++		echo "*** I have the capability to make that library automatically link in when"
++		echo "*** you link to this library.  But I can only do this if you have a"
++		echo "*** shared version of the library, which you do not appear to have"
++		echo "*** because I did check the linker path looking for a file starting"
+ 		if test -z "$potlib" ; then
+ 		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ 		else
+ 		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+ 		  $ECHO "*** using a file magic. Last file checked: $potlib"
+ 		fi
+ 	      fi
+ 	      ;;
+ 	    *)
+ 	      # Add a -L argument.
+-	      newdeplibs="$newdeplibs $a_deplib"
++	      func_append newdeplibs " $a_deplib"
+ 	      ;;
+ 	    esac
+ 	  done # Gone through all deplibs.
+ 	  ;;
+ 	match_pattern*)
+ 	  set dummy $deplibs_check_method; shift
+ 	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ 	  for a_deplib in $deplibs; do
+ 	    case $a_deplib in
+ 	    -l*)
+ 	      func_stripname -l '' "$a_deplib"
+ 	      name=$func_stripname_result
+ 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ 		case " $predeps $postdeps " in
+ 		*" $a_deplib "*)
+-		  newdeplibs="$newdeplibs $a_deplib"
++		  func_append newdeplibs " $a_deplib"
+ 		  a_deplib=""
+ 		  ;;
+ 		esac
+ 	      fi
+ 	      if test -n "$a_deplib" ; then
+ 		libname=`eval "\\$ECHO \"$libname_spec\""`
+ 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ 		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ 		  for potent_lib in $potential_libs; do
+ 		    potlib="$potent_lib" # see symlink-check above in file_magic test
+-		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
++		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ 		       $EGREP "$match_pattern_regex" > /dev/null; then
+-		      newdeplibs="$newdeplibs $a_deplib"
++		      func_append newdeplibs " $a_deplib"
+ 		      a_deplib=""
+ 		      break 2
+ 		    fi
+ 		  done
+ 		done
+ 	      fi
+ 	      if test -n "$a_deplib" ; then
+ 		droppeddeps=yes
+-		$ECHO
++		echo
+ 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+-		$ECHO "*** I have the capability to make that library automatically link in when"
+-		$ECHO "*** you link to this library.  But I can only do this if you have a"
+-		$ECHO "*** shared version of the library, which you do not appear to have"
+-		$ECHO "*** because I did check the linker path looking for a file starting"
++		echo "*** I have the capability to make that library automatically link in when"
++		echo "*** you link to this library.  But I can only do this if you have a"
++		echo "*** shared version of the library, which you do not appear to have"
++		echo "*** because I did check the linker path looking for a file starting"
+ 		if test -z "$potlib" ; then
+ 		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ 		else
+ 		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+ 		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ 		fi
+ 	      fi
+ 	      ;;
+ 	    *)
+ 	      # Add a -L argument.
+-	      newdeplibs="$newdeplibs $a_deplib"
++	      func_append newdeplibs " $a_deplib"
+ 	      ;;
+ 	    esac
+ 	  done # Gone through all deplibs.
+ 	  ;;
+ 	none | unknown | *)
+ 	  newdeplibs=""
+-	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+-	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
++	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ 	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ 	    for i in $predeps $postdeps ; do
+ 	      # can't use Xsed below, because $i might contain '/'
+-	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
++	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+ 	    done
+ 	  fi
+-	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
+-	     $GREP . >/dev/null; then
+-	    $ECHO
++	  case $tmp_deplibs in
++	  *[!\	\ ]*)
++	    echo
+ 	    if test "X$deplibs_check_method" = "Xnone"; then
+-	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
++	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+ 	    else
+-	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
++	      echo "*** Warning: inter-library dependencies are not known to be supported."
+ 	    fi
+-	    $ECHO "*** All declared inter-library dependencies are being dropped."
++	    echo "*** All declared inter-library dependencies are being dropped."
+ 	    droppeddeps=yes
+-	  fi
++	    ;;
++	  esac
+ 	  ;;
+ 	esac
+ 	versuffix=$versuffix_save
+ 	major=$major_save
+ 	release=$release_save
+ 	libname=$libname_save
+ 	name=$name_save
+ 
+ 	case $host in
+ 	*-*-rhapsody* | *-*-darwin1.[012])
+ 	  # On Rhapsody replace the C library with the System framework
+-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
++	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ 	  ;;
+ 	esac
+ 
+ 	if test "$droppeddeps" = yes; then
+ 	  if test "$module" = yes; then
+-	    $ECHO
+-	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
++	    echo
++	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+ 	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+-	    $ECHO "*** a static module, that should work as long as the dlopening"
+-	    $ECHO "*** application is linked with the -dlopen flag."
++	    echo "*** a static module, that should work as long as the dlopening"
++	    echo "*** application is linked with the -dlopen flag."
+ 	    if test -z "$global_symbol_pipe"; then
+-	      $ECHO
+-	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
+-	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+-	      $ECHO "*** not find such a program.  So, this module is probably useless."
+-	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
++	      echo
++	      echo "*** However, this would only work if libtool was able to extract symbol"
++	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
++	      echo "*** not find such a program.  So, this module is probably useless."
++	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ 	    fi
+ 	    if test "$build_old_libs" = no; then
+ 	      oldlibs="$output_objdir/$libname.$libext"
+ 	      build_libtool_libs=module
+ 	      build_old_libs=yes
+ 	    else
+ 	      build_libtool_libs=no
+ 	    fi
+ 	  else
+-	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
+-	    $ECHO "*** automatically added whenever a program is linked with this library"
+-	    $ECHO "*** or is declared to -dlopen it."
++	    echo "*** The inter-library dependencies that have been dropped here will be"
++	    echo "*** automatically added whenever a program is linked with this library"
++	    echo "*** or is declared to -dlopen it."
+ 
+ 	    if test "$allow_undefined" = no; then
+-	      $ECHO
+-	      $ECHO "*** Since this library must not contain undefined symbols,"
+-	      $ECHO "*** because either the platform does not support them or"
+-	      $ECHO "*** it was explicitly requested with -no-undefined,"
+-	      $ECHO "*** libtool will only create a static version of it."
++	      echo
++	      echo "*** Since this library must not contain undefined symbols,"
++	      echo "*** because either the platform does not support them or"
++	      echo "*** it was explicitly requested with -no-undefined,"
++	      echo "*** libtool will only create a static version of it."
+ 	      if test "$build_old_libs" = no; then
+ 		oldlibs="$output_objdir/$libname.$libext"
+ 		build_libtool_libs=module
+ 		build_old_libs=yes
+ 	      else
+ 		build_libtool_libs=no
+ 	      fi
+ 	    fi
+ 	  fi
+ 	fi
+ 	# Done checking deplibs!
+ 	deplibs=$newdeplibs
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       case $host in
+ 	*-*-darwin*)
+-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+-	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+-	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 	  ;;
+       esac
+ 
+       # move library search paths that coincide with paths to not yet
+       # installed libraries to the beginning of the library search list
+       new_libs=
+       for path in $notinst_path; do
+ 	case " $new_libs " in
+ 	*" -L$path/$objdir "*) ;;
+ 	*)
+ 	  case " $deplibs " in
+ 	  *" -L$path/$objdir "*)
+-	    new_libs="$new_libs -L$path/$objdir" ;;
++	    func_append new_libs " -L$path/$objdir" ;;
+ 	  esac
+ 	  ;;
+ 	esac
+       done
+       for deplib in $deplibs; do
+ 	case $deplib in
+ 	-L*)
+ 	  case " $new_libs " in
+ 	  *" $deplib "*) ;;
+-	  *) new_libs="$new_libs $deplib" ;;
++	  *) func_append new_libs " $deplib" ;;
+ 	  esac
+ 	  ;;
+-	*) new_libs="$new_libs $deplib" ;;
++	*) func_append new_libs " $deplib" ;;
+ 	esac
+       done
+       deplibs="$new_libs"
+ 
+       # All the library-specific variables (install_libdir is set above).
+       library_names=
+       old_library=
+       dlname=
+ 
+       # Test again, we may have decided not to build it any more
+       if test "$build_libtool_libs" = yes; then
++	# Remove ${wl} instances when linking with ld.
++	# FIXME: should test the right _cmds variable.
++	case $archive_cmds in
++	  *\$LD\ *) wl= ;;
++        esac
+ 	if test "$hardcode_into_libs" = yes; then
+ 	  # Hardcode the library paths
+ 	  hardcode_libdirs=
+ 	  dep_rpath=
+ 	  rpath="$finalize_rpath"
+-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
++	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+ 	  for libdir in $rpath; do
+ 	    if test -n "$hardcode_libdir_flag_spec"; then
+ 	      if test -n "$hardcode_libdir_separator"; then
++		func_replace_sysroot "$libdir"
++		libdir=$func_replace_sysroot_result
+ 		if test -z "$hardcode_libdirs"; then
+ 		  hardcode_libdirs="$libdir"
+ 		else
+ 		  # Just accumulate the unique libdirs.
+ 		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ 		    ;;
+ 		  *)
+-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ 		    ;;
+ 		  esac
+ 		fi
+ 	      else
+ 		eval flag=\"$hardcode_libdir_flag_spec\"
+-		dep_rpath="$dep_rpath $flag"
++		func_append dep_rpath " $flag"
+ 	      fi
+ 	    elif test -n "$runpath_var"; then
+ 	      case "$perm_rpath " in
+ 	      *" $libdir "*) ;;
+-	      *) perm_rpath="$perm_rpath $libdir" ;;
++	      *) func_append perm_rpath " $libdir" ;;
+ 	      esac
+ 	    fi
+ 	  done
+ 	  # Substitute the hardcoded libdirs into the rpath.
+ 	  if test -n "$hardcode_libdir_separator" &&
+ 	     test -n "$hardcode_libdirs"; then
+ 	    libdir="$hardcode_libdirs"
+-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+-	    else
+-	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+-	    fi
++	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ 	  fi
+ 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ 	    # We should set the runpath_var.
+ 	    rpath=
+ 	    for dir in $perm_rpath; do
+-	      rpath="$rpath$dir:"
++	      func_append rpath "$dir:"
+ 	    done
+ 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ 	  fi
+ 	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ 	fi
+ 
+ 	shlibpath="$finalize_shlibpath"
+-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
++	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ 	if test -n "$shlibpath"; then
+ 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ 	fi
+ 
+ 	# Get the real and link names of the library.
+ 	eval shared_ext=\"$shrext_cmds\"
+ 	eval library_names=\"$library_names_spec\"
+ 	set dummy $library_names
+@@ -6954,28 +8113,28 @@ EOF
+ 	if test -z "$dlname"; then
+ 	  dlname=$soname
+ 	fi
+ 
+ 	lib="$output_objdir/$realname"
+ 	linknames=
+ 	for link
+ 	do
+-	  linknames="$linknames $link"
++	  func_append linknames " $link"
+ 	done
+ 
+ 	# Use standard objects if they are pic
+-	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ 	test "X$libobjs" = "X " && libobjs=
+ 
+ 	delfiles=
+ 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ 	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ 	  export_symbols="$output_objdir/$libname.uexp"
+-	  delfiles="$delfiles $export_symbols"
++	  func_append delfiles " $export_symbols"
+ 	fi
+ 
+ 	orig_export_symbols=
+ 	case $host_os in
+ 	cygwin* | mingw* | cegcc*)
+ 	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ 	    # exporting using user supplied symfile
+ 	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+@@ -6996,24 +8155,56 @@ EOF
+ 	# Prepare the list of exported symbols
+ 	if test -z "$export_symbols"; then
+ 	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ 	    func_verbose "generating symbol list for \`$libname.la'"
+ 	    export_symbols="$output_objdir/$libname.exp"
+ 	    $opt_dry_run || $RM $export_symbols
+ 	    cmds=$export_symbols_cmds
+ 	    save_ifs="$IFS"; IFS='~'
+-	    for cmd in $cmds; do
++	    for cmd1 in $cmds; do
+ 	      IFS="$save_ifs"
+-	      eval cmd=\"$cmd\"
+-	      func_len " $cmd"
+-	      len=$func_len_result
+-	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++	      # Take the normal branch if the nm_file_list_spec branch
++	      # doesn't work or if tool conversion is not needed.
++	      case $nm_file_list_spec~$to_tool_file_cmd in
++		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
++		  try_normal_branch=yes
++		  eval cmd=\"$cmd1\"
++		  func_len " $cmd"
++		  len=$func_len_result
++		  ;;
++		*)
++		  try_normal_branch=no
++		  ;;
++	      esac
++	      if test "$try_normal_branch" = yes \
++		 && { test "$len" -lt "$max_cmd_len" \
++		      || test "$max_cmd_len" -le -1; }
++	      then
+ 		func_show_eval "$cmd" 'exit $?'
+ 		skipped_export=false
++	      elif test -n "$nm_file_list_spec"; then
++		func_basename "$output"
++		output_la=$func_basename_result
++		save_libobjs=$libobjs
++		save_output=$output
++		output=${output_objdir}/${output_la}.nm
++		func_to_tool_file "$output"
++		libobjs=$nm_file_list_spec$func_to_tool_file_result
++		func_append delfiles " $output"
++		func_verbose "creating $NM input file list: $output"
++		for obj in $save_libobjs; do
++		  func_to_tool_file "$obj"
++		  $ECHO "$func_to_tool_file_result"
++		done > "$output"
++		eval cmd=\"$cmd1\"
++		func_show_eval "$cmd" 'exit $?'
++		output=$save_output
++		libobjs=$save_libobjs
++		skipped_export=false
+ 	      else
+ 		# The command line is too long to execute in one step.
+ 		func_verbose "using reloadable object file for export list..."
+ 		skipped_export=:
+ 		# Break out early, otherwise skipped_export may be
+ 		# set to false by a later but shorter cmd.
+ 		break
+ 	      fi
+@@ -7024,39 +8215,39 @@ EOF
+ 	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ 	    fi
+ 	  fi
+ 	fi
+ 
+ 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ 	  tmp_export_symbols="$export_symbols"
+ 	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+-	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
++	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ 	fi
+ 
+ 	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ 	  # The given exports_symbols file has to be filtered, so filter it.
+ 	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ 	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ 	  # 's' commands which not all seds can handle. GNU sed should be fine
+ 	  # though. Also, the filter scales superlinearly with the number of
+ 	  # global variables. join(1) would be nice here, but unfortunately
+ 	  # isn't a blessed tool.
+ 	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+-	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
++	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ 	  export_symbols=$output_objdir/$libname.def
+ 	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ 	fi
+ 
+ 	tmp_deplibs=
+ 	for test_deplib in $deplibs; do
+ 	  case " $convenience " in
+ 	  *" $test_deplib "*) ;;
+ 	  *)
+-	    tmp_deplibs="$tmp_deplibs $test_deplib"
++	    func_append tmp_deplibs " $test_deplib"
+ 	    ;;
+ 	  esac
+ 	done
+ 	deplibs="$tmp_deplibs"
+ 
+ 	if test -n "$convenience"; then
+ 	  if test -n "$whole_archive_flag_spec" &&
+ 	    test "$compiler_needs_object" = yes &&
+@@ -7066,31 +8257,31 @@ EOF
+ 	    whole_archive_flag_spec=
+ 	  fi
+ 	  if test -n "$whole_archive_flag_spec"; then
+ 	    save_libobjs=$libobjs
+ 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ 	    test "X$libobjs" = "X " && libobjs=
+ 	  else
+ 	    gentop="$output_objdir/${outputname}x"
+-	    generated="$generated $gentop"
++	    func_append generated " $gentop"
+ 
+ 	    func_extract_archives $gentop $convenience
+-	    libobjs="$libobjs $func_extract_archives_result"
++	    func_append libobjs " $func_extract_archives_result"
+ 	    test "X$libobjs" = "X " && libobjs=
+ 	  fi
+ 	fi
+ 
+ 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ 	  eval flag=\"$thread_safe_flag_spec\"
+-	  linker_flags="$linker_flags $flag"
++	  func_append linker_flags " $flag"
+ 	fi
+ 
+ 	# Make a backup of the uninstalled library when relinking
+-	if test "$mode" = relink; then
++	if test "$opt_mode" = relink; then
+ 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ 	fi
+ 
+ 	# Do each of the archive commands.
+ 	if test "$module" = yes && test -n "$module_cmds" ; then
+ 	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ 	    eval test_cmds=\"$module_expsym_cmds\"
+ 	    cmds=$module_expsym_cmds
+@@ -7125,53 +8316,59 @@ EOF
+ 	  # assume the linker understands whole_archive_flag_spec.
+ 	  # This may have to be revisited, in case too many
+ 	  # convenience libraries get linked in and end up exceeding
+ 	  # the spec.
+ 	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ 	    save_libobjs=$libobjs
+ 	  fi
+ 	  save_output=$output
+-	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
++	  func_basename "$output"
++	  output_la=$func_basename_result
+ 
+ 	  # Clear the reloadable object creation command queue and
+ 	  # initialize k to one.
+ 	  test_cmds=
+ 	  concat_cmds=
+ 	  objlist=
+ 	  last_robj=
+ 	  k=1
+ 
+ 	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ 	    output=${output_objdir}/${output_la}.lnkscript
+ 	    func_verbose "creating GNU ld script: $output"
+-	    $ECHO 'INPUT (' > $output
++	    echo 'INPUT (' > $output
+ 	    for obj in $save_libobjs
+ 	    do
+-	      $ECHO "$obj" >> $output
++	      func_to_tool_file "$obj"
++	      $ECHO "$func_to_tool_file_result" >> $output
+ 	    done
+-	    $ECHO ')' >> $output
+-	    delfiles="$delfiles $output"
++	    echo ')' >> $output
++	    func_append delfiles " $output"
++	    func_to_tool_file "$output"
++	    output=$func_to_tool_file_result
+ 	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ 	    output=${output_objdir}/${output_la}.lnk
+ 	    func_verbose "creating linker input file list: $output"
+ 	    : > $output
+ 	    set x $save_libobjs
+ 	    shift
+ 	    firstobj=
+ 	    if test "$compiler_needs_object" = yes; then
+ 	      firstobj="$1 "
+ 	      shift
+ 	    fi
+ 	    for obj
+ 	    do
+-	      $ECHO "$obj" >> $output
++	      func_to_tool_file "$obj"
++	      $ECHO "$func_to_tool_file_result" >> $output
+ 	    done
+-	    delfiles="$delfiles $output"
+-	    output=$firstobj\"$file_list_spec$output\"
++	    func_append delfiles " $output"
++	    func_to_tool_file "$output"
++	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ 	  else
+ 	    if test -n "$save_libobjs"; then
+ 	      func_verbose "creating reloadable object files..."
+ 	      output=$output_objdir/$output_la-${k}.$objext
+ 	      eval test_cmds=\"$reload_cmds\"
+ 	      func_len " $test_cmds"
+ 	      len0=$func_len_result
+ 	      len=$len0
+@@ -7185,41 +8382,44 @@ EOF
+ 		if test "X$objlist" = X ||
+ 		   test "$len" -lt "$max_cmd_len"; then
+ 		  func_append objlist " $obj"
+ 		else
+ 		  # The command $test_cmds is almost too long, add a
+ 		  # command to the queue.
+ 		  if test "$k" -eq 1 ; then
+ 		    # The first file doesn't have a previous command to add.
+-		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
++		    reload_objs=$objlist
++		    eval concat_cmds=\"$reload_cmds\"
+ 		  else
+ 		    # All subsequent reloadable object files will link in
+ 		    # the last one created.
+-		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
++		    reload_objs="$objlist $last_robj"
++		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ 		  fi
+ 		  last_robj=$output_objdir/$output_la-${k}.$objext
+ 		  func_arith $k + 1
+ 		  k=$func_arith_result
+ 		  output=$output_objdir/$output_la-${k}.$objext
+-		  objlist=$obj
++		  objlist=" $obj"
+ 		  func_len " $last_robj"
+ 		  func_arith $len0 + $func_len_result
+ 		  len=$func_arith_result
+ 		fi
+ 	      done
+ 	      # Handle the remaining objects by creating one last
+ 	      # reloadable object file.  All subsequent reloadable object
+ 	      # files will link in the last one created.
+ 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
++	      reload_objs="$objlist $last_robj"
++	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+ 	      if test -n "$last_robj"; then
+ 	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ 	      fi
+-	      delfiles="$delfiles $output"
++	      func_append delfiles " $output"
+ 
+ 	    else
+ 	      output=
+ 	    fi
+ 
+ 	    if ${skipped_export-false}; then
+ 	      func_verbose "generating symbol list for \`$libname.la'"
+ 	      export_symbols="$output_objdir/$libname.exp"
+@@ -7243,17 +8443,17 @@ EOF
+ 	      $opt_silent || {
+ 		  func_quote_for_expand "$cmd"
+ 		  eval "func_echo $func_quote_for_expand_result"
+ 	      }
+ 	      $opt_dry_run || eval "$cmd" || {
+ 		lt_exit=$?
+ 
+ 		# Restore the uninstalled library and exit
+-		if test "$mode" = relink; then
++		if test "$opt_mode" = relink; then
+ 		  ( cd "$output_objdir" && \
+ 		    $RM "${realname}T" && \
+ 		    $MV "${realname}U" "$realname" )
+ 		fi
+ 
+ 		exit $lt_exit
+ 	      }
+ 	    done
+@@ -7264,29 +8464,29 @@ EOF
+ 	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ 	    fi
+ 	  fi
+ 
+           if ${skipped_export-false}; then
+ 	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ 	      tmp_export_symbols="$export_symbols"
+ 	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+-	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
++	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ 	    fi
+ 
+ 	    if test -n "$orig_export_symbols"; then
+ 	      # The given exports_symbols file has to be filtered, so filter it.
+ 	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ 	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ 	      # 's' commands which not all seds can handle. GNU sed should be fine
+ 	      # though. Also, the filter scales superlinearly with the number of
+ 	      # global variables. join(1) would be nice here, but unfortunately
+ 	      # isn't a blessed tool.
+ 	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+-	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
++	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ 	      export_symbols=$output_objdir/$libname.def
+ 	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ 	    fi
+ 	  fi
+ 
+ 	  libobjs=$output
+ 	  # Restore the value of output.
+ 	  output=$save_output
+@@ -7317,48 +8517,48 @@ EOF
+ 	if test -n "$delfiles"; then
+ 	  # Append the command to remove temporary files to $cmds.
+ 	  eval cmds=\"\$cmds~\$RM $delfiles\"
+ 	fi
+ 
+ 	# Add any objects from preloaded convenience libraries
+ 	if test -n "$dlprefiles"; then
+ 	  gentop="$output_objdir/${outputname}x"
+-	  generated="$generated $gentop"
++	  func_append generated " $gentop"
+ 
+ 	  func_extract_archives $gentop $dlprefiles
+-	  libobjs="$libobjs $func_extract_archives_result"
++	  func_append libobjs " $func_extract_archives_result"
+ 	  test "X$libobjs" = "X " && libobjs=
+ 	fi
+ 
+ 	save_ifs="$IFS"; IFS='~'
+ 	for cmd in $cmds; do
+ 	  IFS="$save_ifs"
+ 	  eval cmd=\"$cmd\"
+ 	  $opt_silent || {
+ 	    func_quote_for_expand "$cmd"
+ 	    eval "func_echo $func_quote_for_expand_result"
+ 	  }
+ 	  $opt_dry_run || eval "$cmd" || {
+ 	    lt_exit=$?
+ 
+ 	    # Restore the uninstalled library and exit
+-	    if test "$mode" = relink; then
++	    if test "$opt_mode" = relink; then
+ 	      ( cd "$output_objdir" && \
+ 	        $RM "${realname}T" && \
+ 		$MV "${realname}U" "$realname" )
+ 	    fi
+ 
+ 	    exit $lt_exit
+ 	  }
+ 	done
+ 	IFS="$save_ifs"
+ 
+ 	# Restore the uninstalled library and exit
+-	if test "$mode" = relink; then
++	if test "$opt_mode" = relink; then
+ 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+ 
+ 	  if test -n "$convenience"; then
+ 	    if test -z "$whole_archive_flag_spec"; then
+ 	      func_show_eval '${RM}r "$gentop"'
+ 	    fi
+ 	  fi
+ 
+@@ -7429,28 +8629,31 @@ EOF
+       # reload_cmds runs $LD directly, so let us get rid of
+       # -Wl from whole_archive_flag_spec and hope we can get by with
+       # turning comma into space..
+       wl=
+ 
+       if test -n "$convenience"; then
+ 	if test -n "$whole_archive_flag_spec"; then
+ 	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+-	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
++	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ 	else
+ 	  gentop="$output_objdir/${obj}x"
+-	  generated="$generated $gentop"
++	  func_append generated " $gentop"
+ 
+ 	  func_extract_archives $gentop $convenience
+ 	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+ 	fi
+       fi
+ 
++      # If we're not building shared, we need to use non_pic_objs
++      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
++
+       # Create the old-style object.
+-      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
++      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+ 
+       output="$obj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+ 
+       # Exit if we aren't doing a library object file.
+       if test -z "$libobj"; then
+ 	if test -n "$gentop"; then
+ 	  func_show_eval '${RM}r "$gentop"'
+@@ -7500,78 +8703,78 @@ EOF
+         && test "$dlopen_support" = unknown \
+ 	&& test "$dlopen_self" = unknown \
+ 	&& test "$dlopen_self_static" = unknown && \
+ 	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+ 
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+ 	# On Rhapsody replace the C library is the System framework
+-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
++	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
++	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ 	;;
+       esac
+ 
+       case $host in
+       *-*-darwin*)
+ 	# Don't allow lazy linking, it breaks C++ global constructors
+ 	# But is supposedly fixed on 10.4 or later (yay!).
+ 	if test "$tagname" = CXX ; then
+ 	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 	    10.[0123])
+-	      compile_command="$compile_command ${wl}-bind_at_load"
+-	      finalize_command="$finalize_command ${wl}-bind_at_load"
++	      func_append compile_command " ${wl}-bind_at_load"
++	      func_append finalize_command " ${wl}-bind_at_load"
+ 	    ;;
+ 	  esac
+ 	fi
+ 	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 	;;
+       esac
+ 
+ 
+       # move library search paths that coincide with paths to not yet
+       # installed libraries to the beginning of the library search list
+       new_libs=
+       for path in $notinst_path; do
+ 	case " $new_libs " in
+ 	*" -L$path/$objdir "*) ;;
+ 	*)
+ 	  case " $compile_deplibs " in
+ 	  *" -L$path/$objdir "*)
+-	    new_libs="$new_libs -L$path/$objdir" ;;
++	    func_append new_libs " -L$path/$objdir" ;;
+ 	  esac
+ 	  ;;
+ 	esac
+       done
+       for deplib in $compile_deplibs; do
+ 	case $deplib in
+ 	-L*)
+ 	  case " $new_libs " in
+ 	  *" $deplib "*) ;;
+-	  *) new_libs="$new_libs $deplib" ;;
++	  *) func_append new_libs " $deplib" ;;
+ 	  esac
+ 	  ;;
+-	*) new_libs="$new_libs $deplib" ;;
++	*) func_append new_libs " $deplib" ;;
+ 	esac
+       done
+       compile_deplibs="$new_libs"
+ 
+ 
+-      compile_command="$compile_command $compile_deplibs"
+-      finalize_command="$finalize_command $finalize_deplibs"
++      func_append compile_command " $compile_deplibs"
++      func_append finalize_command " $finalize_deplibs"
+ 
+       if test -n "$rpath$xrpath"; then
+ 	# If the user specified any rpath flags, then add them.
+ 	for libdir in $rpath $xrpath; do
+ 	  # This is the magic to use -rpath.
+ 	  case "$finalize_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
++	  *) func_append finalize_rpath " $libdir" ;;
+ 	  esac
+ 	done
+       fi
+ 
+       # Now hardcode the library paths
+       rpath=
+       hardcode_libdirs=
+       for libdir in $compile_rpath $finalize_rpath; do
+@@ -7580,42 +8783,42 @@ EOF
+ 	    if test -z "$hardcode_libdirs"; then
+ 	      hardcode_libdirs="$libdir"
+ 	    else
+ 	      # Just accumulate the unique libdirs.
+ 	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ 		;;
+ 	      *)
+-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ 		;;
+ 	      esac
+ 	    fi
+ 	  else
+ 	    eval flag=\"$hardcode_libdir_flag_spec\"
+-	    rpath="$rpath $flag"
++	    func_append rpath " $flag"
+ 	  fi
+ 	elif test -n "$runpath_var"; then
+ 	  case "$perm_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) perm_rpath="$perm_rpath $libdir" ;;
++	  *) func_append perm_rpath " $libdir" ;;
+ 	  esac
+ 	fi
+ 	case $host in
+ 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ 	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$libdir:"*) ;;
+ 	  ::) dllsearchpath=$libdir;;
+-	  *) dllsearchpath="$dllsearchpath:$libdir";;
++	  *) func_append dllsearchpath ":$libdir";;
+ 	  esac
+ 	  case :$dllsearchpath: in
+ 	  *":$testbindir:"*) ;;
+ 	  ::) dllsearchpath=$testbindir;;
+-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
++	  *) func_append dllsearchpath ":$testbindir";;
+ 	  esac
+ 	  ;;
+ 	esac
+       done
+       # Substitute the hardcoded libdirs into the rpath.
+       if test -n "$hardcode_libdir_separator" &&
+ 	 test -n "$hardcode_libdirs"; then
+ 	libdir="$hardcode_libdirs"
+@@ -7631,78 +8834,84 @@ EOF
+ 	    if test -z "$hardcode_libdirs"; then
+ 	      hardcode_libdirs="$libdir"
+ 	    else
+ 	      # Just accumulate the unique libdirs.
+ 	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ 		;;
+ 	      *)
+-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ 		;;
+ 	      esac
+ 	    fi
+ 	  else
+ 	    eval flag=\"$hardcode_libdir_flag_spec\"
+-	    rpath="$rpath $flag"
++	    func_append rpath " $flag"
+ 	  fi
+ 	elif test -n "$runpath_var"; then
+ 	  case "$finalize_perm_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
++	  *) func_append finalize_perm_rpath " $libdir" ;;
+ 	  esac
+ 	fi
+       done
+       # Substitute the hardcoded libdirs into the rpath.
+       if test -n "$hardcode_libdir_separator" &&
+ 	 test -n "$hardcode_libdirs"; then
+ 	libdir="$hardcode_libdirs"
+ 	eval rpath=\" $hardcode_libdir_flag_spec\"
+       fi
+       finalize_rpath="$rpath"
+ 
+       if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ 	# Transform all the library objects into standard objects.
+-	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+-	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
++	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       fi
+ 
+       func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+ 
+       # template prelinking step
+       if test -n "$prelink_cmds"; then
+ 	func_execute_cmds "$prelink_cmds" 'exit $?'
+       fi
+ 
+       wrappers_required=yes
+       case $host in
++      *cegcc* | *mingw32ce*)
++        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
++        wrappers_required=no
++        ;;
+       *cygwin* | *mingw* )
+         if test "$build_libtool_libs" != yes; then
+           wrappers_required=no
+         fi
+         ;;
+-      *cegcc)
+-        # Disable wrappers for cegcc, we are cross compiling anyway.
+-        wrappers_required=no
+-        ;;
+       *)
+         if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+           wrappers_required=no
+         fi
+         ;;
+       esac
+       if test "$wrappers_required" = no; then
+ 	# Replace the output file specification.
+-	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ 	link_command="$compile_command$compile_rpath"
+ 
+ 	# We have no uninstalled library dependencies, so finalize right now.
+ 	exit_status=0
+ 	func_show_eval "$link_command" 'exit_status=$?'
+ 
++	if test -n "$postlink_cmds"; then
++	  func_to_tool_file "$output"
++	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++	  func_execute_cmds "$postlink_cmds" 'exit $?'
++	fi
++
+ 	# Delete the generated files.
+ 	if test -f "$output_objdir/${outputname}S.${objext}"; then
+ 	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+ 	fi
+ 
+ 	exit $exit_status
+       fi
+ 
+@@ -7715,72 +8924,85 @@ EOF
+ 
+       compile_var=
+       finalize_var=
+       if test -n "$runpath_var"; then
+ 	if test -n "$perm_rpath"; then
+ 	  # We should set the runpath_var.
+ 	  rpath=
+ 	  for dir in $perm_rpath; do
+-	    rpath="$rpath$dir:"
++	    func_append rpath "$dir:"
+ 	  done
+ 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ 	fi
+ 	if test -n "$finalize_perm_rpath"; then
+ 	  # We should set the runpath_var.
+ 	  rpath=
+ 	  for dir in $finalize_perm_rpath; do
+-	    rpath="$rpath$dir:"
++	    func_append rpath "$dir:"
+ 	  done
+ 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ 	fi
+       fi
+ 
+       if test "$no_install" = yes; then
+ 	# We don't need to create a wrapper script.
+ 	link_command="$compile_var$compile_command$compile_rpath"
+ 	# Replace the output file specification.
+-	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ 	# Delete the old output file.
+ 	$opt_dry_run || $RM $output
+ 	# Link the executable and exit
+ 	func_show_eval "$link_command" 'exit $?'
++
++	if test -n "$postlink_cmds"; then
++	  func_to_tool_file "$output"
++	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++	  func_execute_cmds "$postlink_cmds" 'exit $?'
++	fi
++
+ 	exit $EXIT_SUCCESS
+       fi
+ 
+       if test "$hardcode_action" = relink; then
+ 	# Fast installation is not supported
+ 	link_command="$compile_var$compile_command$compile_rpath"
+ 	relink_command="$finalize_var$finalize_command$finalize_rpath"
+ 
+ 	func_warning "this platform does not like uninstalled shared libraries"
+ 	func_warning "\`$output' will be relinked during installation"
+       else
+ 	if test "$fast_install" != no; then
+ 	  link_command="$finalize_var$compile_command$finalize_rpath"
+ 	  if test "$fast_install" = yes; then
+-	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
++	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ 	  else
+ 	    # fast_install is set to needless
+ 	    relink_command=
+ 	  fi
+ 	else
+ 	  link_command="$compile_var$compile_command$compile_rpath"
+ 	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+ 	fi
+       fi
+ 
+       # Replace the output file specification.
+-      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
++      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+ 
+       # Delete the old output files.
+       $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+ 
+       func_show_eval "$link_command" 'exit $?'
+ 
++      if test -n "$postlink_cmds"; then
++	func_to_tool_file "$output_objdir/$outputname"
++	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++	func_execute_cmds "$postlink_cmds" 'exit $?'
++      fi
++
+       # Now create the wrapper script.
+       func_verbose "creating $output"
+ 
+       # Quote the relink command for shipping.
+       if test -n "$relink_command"; then
+ 	# Preserve any variables that may affect compiler behavior
+ 	for var in $variables_saved_for_relink; do
+ 	  if eval test -z \"\${$var+set}\"; then
+@@ -7788,28 +9010,17 @@ EOF
+ 	  elif eval var_value=\$$var; test -z "$var_value"; then
+ 	    relink_command="$var=; export $var; $relink_command"
+ 	  else
+ 	    func_quote_for_eval "$var_value"
+ 	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ 	  fi
+ 	done
+ 	relink_command="(cd `pwd`; $relink_command)"
+-	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+-      fi
+-
+-      # Quote $ECHO for shipping.
+-      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+-	case $progpath in
+-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+-	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+-	esac
+-	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+-      else
+-	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
++	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+       fi
+ 
+       # Only actually do things if not in dry run mode.
+       $opt_dry_run || {
+ 	# win32 will think the script is a binary if it has
+ 	# a .exe suffix, so we strip it off here.
+ 	case $output in
+ 	  *.exe) func_stripname '' '.exe' "$output"
+@@ -7879,60 +9090,60 @@ EOF
+ 	build_libtool_libs=no
+       else
+ 	if test "$build_libtool_libs" = module; then
+ 	  oldobjs="$libobjs_save"
+ 	  build_libtool_libs=no
+ 	else
+ 	  oldobjs="$old_deplibs $non_pic_objects"
+ 	  if test "$preload" = yes && test -f "$symfileobj"; then
+-	    oldobjs="$oldobjs $symfileobj"
++	    func_append oldobjs " $symfileobj"
+ 	  fi
+ 	fi
+ 	addlibs="$old_convenience"
+       fi
+ 
+       if test -n "$addlibs"; then
+ 	gentop="$output_objdir/${outputname}x"
+-	generated="$generated $gentop"
++	func_append generated " $gentop"
+ 
+ 	func_extract_archives $gentop $addlibs
+-	oldobjs="$oldobjs $func_extract_archives_result"
++	func_append oldobjs " $func_extract_archives_result"
+       fi
+ 
+       # Do each command in the archive commands.
+       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ 	cmds=$old_archive_from_new_cmds
+       else
+ 
+ 	# Add any objects from preloaded convenience libraries
+ 	if test -n "$dlprefiles"; then
+ 	  gentop="$output_objdir/${outputname}x"
+-	  generated="$generated $gentop"
++	  func_append generated " $gentop"
+ 
+ 	  func_extract_archives $gentop $dlprefiles
+-	  oldobjs="$oldobjs $func_extract_archives_result"
++	  func_append oldobjs " $func_extract_archives_result"
+ 	fi
+ 
+ 	# POSIX demands no paths to be encoded in archives.  We have
+ 	# to avoid creating archives with duplicate basenames if we
+ 	# might have to extract them afterwards, e.g., when creating a
+ 	# static archive out of a convenience library, or when linking
+ 	# the entirety of a libtool archive into another (currently
+ 	# not supported by libtool).
+ 	if (for obj in $oldobjs
+ 	    do
+ 	      func_basename "$obj"
+ 	      $ECHO "$func_basename_result"
+ 	    done | sort | sort -uc >/dev/null 2>&1); then
+ 	  :
+ 	else
+-	  $ECHO "copying selected object files to avoid basename conflicts..."
++	  echo "copying selected object files to avoid basename conflicts..."
+ 	  gentop="$output_objdir/${outputname}x"
+-	  generated="$generated $gentop"
++	  func_append generated " $gentop"
+ 	  func_mkdir_p "$gentop"
+ 	  save_oldobjs=$oldobjs
+ 	  oldobjs=
+ 	  counter=1
+ 	  for obj in $save_oldobjs
+ 	  do
+ 	    func_basename "$obj"
+ 	    objbase="$func_basename_result"
+@@ -7946,28 +9157,40 @@ EOF
+ 		func_arith $counter + 1
+ 		counter=$func_arith_result
+ 		case " $oldobjs " in
+ 		*[\ /]"$newobj "*) ;;
+ 		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ 		esac
+ 	      done
+ 	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+-	      oldobjs="$oldobjs $gentop/$newobj"
++	      func_append oldobjs " $gentop/$newobj"
+ 	      ;;
+-	    *) oldobjs="$oldobjs $obj" ;;
++	    *) func_append oldobjs " $obj" ;;
+ 	    esac
+ 	  done
+ 	fi
++	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
++	tool_oldlib=$func_to_tool_file_result
+ 	eval cmds=\"$old_archive_cmds\"
+ 
+ 	func_len " $cmds"
+ 	len=$func_len_result
+ 	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ 	  cmds=$old_archive_cmds
++	elif test -n "$archiver_list_spec"; then
++	  func_verbose "using command file archive linking..."
++	  for obj in $oldobjs
++	  do
++	    func_to_tool_file "$obj"
++	    $ECHO "$func_to_tool_file_result"
++	  done > $output_objdir/$libname.libcmd
++	  func_to_tool_file "$output_objdir/$libname.libcmd"
++	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
++	  cmds=$old_archive_cmds
+ 	else
+ 	  # the command line is too long to link in one step, link in parts
+ 	  func_verbose "using piecewise archive linking..."
+ 	  save_RANLIB=$RANLIB
+ 	  RANLIB=:
+ 	  objlist=
+ 	  concat_cmds=
+ 	  save_oldobjs=$oldobjs
+@@ -8031,17 +9254,17 @@ EOF
+ 	  relink_command="$var=; export $var; $relink_command"
+ 	else
+ 	  func_quote_for_eval "$var_value"
+ 	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ 	fi
+       done
+       # Quote the link command for shipping.
+       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+-      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+       if test "$hardcode_automatic" = yes ; then
+ 	relink_command=
+       fi
+ 
+       # Only create the output if not a dry run.
+       $opt_dry_run || {
+ 	for installed in no yes; do
+ 	  if test "$installed" = yes; then
+@@ -8051,84 +9274,113 @@ EOF
+ 	    output="$output_objdir/$outputname"i
+ 	    # Replace all uninstalled libtool libraries with the installed ones
+ 	    newdependency_libs=
+ 	    for deplib in $dependency_libs; do
+ 	      case $deplib in
+ 	      *.la)
+ 		func_basename "$deplib"
+ 		name="$func_basename_result"
+-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++		func_resolve_sysroot "$deplib"
++		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ 		test -z "$libdir" && \
+ 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+-		newdependency_libs="$newdependency_libs $libdir/$name"
++		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ 		;;
+-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
++	      -L*)
++		func_stripname -L '' "$deplib"
++		func_replace_sysroot "$func_stripname_result"
++		func_append newdependency_libs " -L$func_replace_sysroot_result"
++		;;
++	      -R*)
++		func_stripname -R '' "$deplib"
++		func_replace_sysroot "$func_stripname_result"
++		func_append newdependency_libs " -R$func_replace_sysroot_result"
++		;;
++	      *) func_append newdependency_libs " $deplib" ;;
+ 	      esac
+ 	    done
+ 	    dependency_libs="$newdependency_libs"
+ 	    newdlfiles=
+ 
+ 	    for lib in $dlfiles; do
+ 	      case $lib in
+ 	      *.la)
+ 	        func_basename "$lib"
+ 		name="$func_basename_result"
+ 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ 		test -z "$libdir" && \
+ 		  func_fatal_error "\`$lib' is not a valid libtool archive"
+-		newdlfiles="$newdlfiles $libdir/$name"
++		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ 		;;
+-	      *) newdlfiles="$newdlfiles $lib" ;;
++	      *) func_append newdlfiles " $lib" ;;
+ 	      esac
+ 	    done
+ 	    dlfiles="$newdlfiles"
+ 	    newdlprefiles=
+ 	    for lib in $dlprefiles; do
+ 	      case $lib in
+ 	      *.la)
+ 		# Only pass preopened files to the pseudo-archive (for
+ 		# eventual linking with the app. that links it) if we
+ 		# didn't already link the preopened objects directly into
+ 		# the library:
+ 		func_basename "$lib"
+ 		name="$func_basename_result"
+ 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ 		test -z "$libdir" && \
+ 		  func_fatal_error "\`$lib' is not a valid libtool archive"
+-		newdlprefiles="$newdlprefiles $libdir/$name"
++		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ 		;;
+ 	      esac
+ 	    done
+ 	    dlprefiles="$newdlprefiles"
+ 	  else
+ 	    newdlfiles=
+ 	    for lib in $dlfiles; do
+ 	      case $lib in
+ 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ 		*) abs=`pwd`"/$lib" ;;
+ 	      esac
+-	      newdlfiles="$newdlfiles $abs"
++	      func_append newdlfiles " $abs"
+ 	    done
+ 	    dlfiles="$newdlfiles"
+ 	    newdlprefiles=
+ 	    for lib in $dlprefiles; do
+ 	      case $lib in
+ 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ 		*) abs=`pwd`"/$lib" ;;
+ 	      esac
+-	      newdlprefiles="$newdlprefiles $abs"
++	      func_append newdlprefiles " $abs"
+ 	    done
+ 	    dlprefiles="$newdlprefiles"
+ 	  fi
+ 	  $RM $output
+ 	  # place dlname in correct position for cygwin
++	  # In fact, it would be nice if we could use this code for all target
++	  # systems that can't hard-code library paths into their executables
++	  # and that have no shared library path variable independent of PATH,
++	  # but it turns out we can't easily determine that from inspecting
++	  # libtool variables, so we have to hard-code the OSs to which it
++	  # applies here; at the moment, that means platforms that use the PE
++	  # object format with DLL files.  See the long comment at the top of
++	  # tests/bindir.at for full details.
+ 	  tdlname=$dlname
+ 	  case $host,$output,$installed,$module,$dlname in
+-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
++	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
++	      # If a -bindir argument was supplied, place the dll there.
++	      if test "x$bindir" != x ;
++	      then
++		func_relative_path "$install_libdir" "$bindir"
++		tdlname=$func_relative_path_result$dlname
++	      else
++		# Otherwise fall back on heuristic.
++		tdlname=../bin/$dlname
++	      fi
++	      ;;
+ 	  esac
+ 	  $ECHO > $output "\
+ # $outputname - a libtool library file
+ # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+ #
+ # Please DO NOT delete this file!
+ # It is necessary for linking the library.
+ 
+@@ -8177,17 +9429,17 @@ relink_command=\"$relink_command\""
+       # Do a symbolic link so that the libtool archive can be found in
+       # LD_LIBRARY_PATH before the program is installed.
+       func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+       ;;
+     esac
+     exit $EXIT_SUCCESS
+ }
+ 
+-{ test "$mode" = link || test "$mode" = relink; } &&
++{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+     func_mode_link ${1+"$@"}
+ 
+ 
+ # func_mode_uninstall arg...
+ func_mode_uninstall ()
+ {
+     $opt_debug
+     RM="$nonopt"
+@@ -8197,45 +9449,44 @@ func_mode_uninstall ()
+ 
+     # This variable tells wrapper scripts just to set variables rather
+     # than running their programs.
+     libtool_install_magic="$magic"
+ 
+     for arg
+     do
+       case $arg in
+-      -f) RM="$RM $arg"; rmforce=yes ;;
+-      -*) RM="$RM $arg" ;;
+-      *) files="$files $arg" ;;
++      -f) func_append RM " $arg"; rmforce=yes ;;
++      -*) func_append RM " $arg" ;;
++      *) func_append files " $arg" ;;
+       esac
+     done
+ 
+     test -z "$RM" && \
+       func_fatal_help "you must specify an RM program"
+ 
+     rmdirs=
+ 
+-    origobjdir="$objdir"
+     for file in $files; do
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       if test "X$dir" = X.; then
+-	objdir="$origobjdir"
++	odir="$objdir"
+       else
+-	objdir="$dir/$origobjdir"
++	odir="$dir/$objdir"
+       fi
+       func_basename "$file"
+       name="$func_basename_result"
+-      test "$mode" = uninstall && objdir="$dir"
+-
+-      # Remember objdir for removal later, being careful to avoid duplicates
+-      if test "$mode" = clean; then
++      test "$opt_mode" = uninstall && odir="$dir"
++
++      # Remember odir for removal later, being careful to avoid duplicates
++      if test "$opt_mode" = clean; then
+ 	case " $rmdirs " in
+-	  *" $objdir "*) ;;
+-	  *) rmdirs="$rmdirs $objdir" ;;
++	  *" $odir "*) ;;
++	  *) func_append rmdirs " $odir" ;;
+ 	esac
+       fi
+ 
+       # Don't error if the file doesn't exist and rm -f was used.
+       if { test -L "$file"; } >/dev/null 2>&1 ||
+ 	 { test -h "$file"; } >/dev/null 2>&1 ||
+ 	 test -f "$file"; then
+ 	:
+@@ -8251,28 +9502,27 @@ func_mode_uninstall ()
+       case $name in
+       *.la)
+ 	# Possibly a libtool archive, so verify it.
+ 	if func_lalib_p "$file"; then
+ 	  func_source $dir/$name
+ 
+ 	  # Delete the libtool libraries and symlinks.
+ 	  for n in $library_names; do
+-	    rmfiles="$rmfiles $objdir/$n"
++	    func_append rmfiles " $odir/$n"
+ 	  done
+-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+-
+-	  case "$mode" in
++	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
++
++	  case "$opt_mode" in
+ 	  clean)
+-	    case "  $library_names " in
+-	    # "  " in the beginning catches empty $dlname
++	    case " $library_names " in
+ 	    *" $dlname "*) ;;
+-	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
++	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ 	    esac
+-	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
++	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ 	    ;;
+ 	  uninstall)
+ 	    if test -n "$library_names"; then
+ 	      # Do each command in the postuninstall commands.
+ 	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ 	    fi
+ 
+ 	    if test -n "$old_library"; then
+@@ -8290,90 +9540,89 @@ func_mode_uninstall ()
+ 	if func_lalib_p "$file"; then
+ 
+ 	  # Read the .lo file
+ 	  func_source $dir/$name
+ 
+ 	  # Add PIC object to the list of files to remove.
+ 	  if test -n "$pic_object" &&
+ 	     test "$pic_object" != none; then
+-	    rmfiles="$rmfiles $dir/$pic_object"
++	    func_append rmfiles " $dir/$pic_object"
+ 	  fi
+ 
+ 	  # Add non-PIC object to the list of files to remove.
+ 	  if test -n "$non_pic_object" &&
+ 	     test "$non_pic_object" != none; then
+-	    rmfiles="$rmfiles $dir/$non_pic_object"
++	    func_append rmfiles " $dir/$non_pic_object"
+ 	  fi
+ 	fi
+ 	;;
+ 
+       *)
+-	if test "$mode" = clean ; then
++	if test "$opt_mode" = clean ; then
+ 	  noexename=$name
+ 	  case $file in
+ 	  *.exe)
+ 	    func_stripname '' '.exe' "$file"
+ 	    file=$func_stripname_result
+ 	    func_stripname '' '.exe' "$name"
+ 	    noexename=$func_stripname_result
+ 	    # $file with .exe has already been added to rmfiles,
+ 	    # add $file without .exe
+-	    rmfiles="$rmfiles $file"
++	    func_append rmfiles " $file"
+ 	    ;;
+ 	  esac
+ 	  # Do a test to see if this is a libtool program.
+ 	  if func_ltwrapper_p "$file"; then
+ 	    if func_ltwrapper_executable_p "$file"; then
+ 	      func_ltwrapper_scriptname "$file"
+ 	      relink_command=
+ 	      func_source $func_ltwrapper_scriptname_result
+-	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
++	      func_append rmfiles " $func_ltwrapper_scriptname_result"
+ 	    else
+ 	      relink_command=
+ 	      func_source $dir/$noexename
+ 	    fi
+ 
+ 	    # note $name still contains .exe if it was in $file originally
+ 	    # as does the version of $file that was added into $rmfiles
+-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
++	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+ 	    if test "$fast_install" = yes && test -n "$relink_command"; then
+-	      rmfiles="$rmfiles $objdir/lt-$name"
++	      func_append rmfiles " $odir/lt-$name"
+ 	    fi
+ 	    if test "X$noexename" != "X$name" ; then
+-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
++	      func_append rmfiles " $odir/lt-${noexename}.c"
+ 	    fi
+ 	  fi
+ 	fi
+ 	;;
+       esac
+       func_show_eval "$RM $rmfiles" 'exit_status=1'
+     done
+-    objdir="$origobjdir"
+ 
+     # Try to remove the ${objdir}s in the directories where we deleted files
+     for dir in $rmdirs; do
+       if test -d "$dir"; then
+ 	func_show_eval "rmdir $dir >/dev/null 2>&1"
+       fi
+     done
+ 
+     exit $exit_status
+ }
+ 
+-{ test "$mode" = uninstall || test "$mode" = clean; } &&
++{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+     func_mode_uninstall ${1+"$@"}
+ 
+-test -z "$mode" && {
++test -z "$opt_mode" && {
+   help="$generic_help"
+   func_fatal_help "you must specify a MODE"
+ }
+ 
+ test -z "$exec_cmd" && \
+-  func_fatal_help "invalid operation mode \`$mode'"
++  func_fatal_help "invalid operation mode \`$opt_mode'"
+ 
+ if test -n "$exec_cmd"; then
+   eval exec "$exec_cmd"
+   exit $EXIT_FAILURE
+ fi
+ 
+ exit $exit_status
+ 
+diff --git a/js/src/ctypes/libffi/m4/asmcfi.m4 b/js/src/ctypes/libffi/m4/asmcfi.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/asmcfi.m4
+@@ -0,0 +1,13 @@
++AC_DEFUN([GCC_AS_CFI_PSEUDO_OP],
++[AC_CACHE_CHECK([assembler .cfi pseudo-op support],
++    gcc_cv_as_cfi_pseudo_op, [
++    gcc_cv_as_cfi_pseudo_op=unknown
++    AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
++		   [gcc_cv_as_cfi_pseudo_op=yes],
++		   [gcc_cv_as_cfi_pseudo_op=no])
++ ])
++ if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then
++    AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
++	      [Define if your assembler supports .cfi_* directives.])
++ fi
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_append_flag.m4 b/js/src/ctypes/libffi/m4/ax_append_flag.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_append_flag.m4
+@@ -0,0 +1,69 @@
++# ===========================================================================
++#      http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
++#
++# DESCRIPTION
++#
++#   FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
++#   added in between.
++#
++#   If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
++#   CFLAGS) is used.  FLAGS-VARIABLE is not changed if it already contains
++#   FLAG.  If FLAGS-VARIABLE is unset in the shell, it is set to exactly
++#   FLAG.
++#
++#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
++#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 2
++
++AC_DEFUN([AX_APPEND_FLAG],
++[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
++AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])dnl
++AS_VAR_SET_IF(FLAGS,
++  [case " AS_VAR_GET(FLAGS) " in
++    *" $1 "*)
++      AC_RUN_LOG([: FLAGS already contains $1])
++      ;;
++    *)
++      AC_RUN_LOG([: FLAGS="$FLAGS $1"])
++      AS_VAR_SET(FLAGS, ["AS_VAR_GET(FLAGS) $1"])
++      ;;
++   esac],
++  [AS_VAR_SET(FLAGS,["$1"])])
++AS_VAR_POPDEF([FLAGS])dnl
++])dnl AX_APPEND_FLAG
+diff --git a/js/src/ctypes/libffi/m4/ax_cc_maxopt.m4 b/js/src/ctypes/libffi/m4/ax_cc_maxopt.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_cc_maxopt.m4
+@@ -0,0 +1,181 @@
++# ===========================================================================
++#       http://www.gnu.org/software/autoconf-archive/ax_cc_maxopt.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CC_MAXOPT
++#
++# DESCRIPTION
++#
++#   Try to turn on "good" C optimization flags for various compilers and
++#   architectures, for some definition of "good". (In our case, good for
++#   FFTW and hopefully for other scientific codes. Modify as needed.)
++#
++#   The user can override the flags by setting the CFLAGS environment
++#   variable. The user can also specify --enable-portable-binary in order to
++#   disable any optimization flags that might result in a binary that only
++#   runs on the host architecture.
++#
++#   Note also that the flags assume that ANSI C aliasing rules are followed
++#   by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point
++#   computations can be re-ordered as needed.
++#
++#   Requires macros: AX_CHECK_COMPILE_FLAG, AX_COMPILER_VENDOR,
++#   AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
++#   Copyright (c) 2008 Matteo Frigo
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 13
++
++AC_DEFUN([AX_CC_MAXOPT],
++[
++AC_REQUIRE([AC_PROG_CC])
++AC_REQUIRE([AX_COMPILER_VENDOR])
++AC_REQUIRE([AC_CANONICAL_HOST])
++
++AC_ARG_ENABLE(portable-binary, [AS_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])],
++	acx_maxopt_portable=$enableval, acx_maxopt_portable=no)
++
++# Try to determine "good" native compiler flags if none specified via CFLAGS
++if test "$ac_test_CFLAGS" != "set"; then
++  CFLAGS=""
++  case $ax_cv_c_compiler_vendor in
++    dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
++	 if test "x$acx_maxopt_portable" = xno; then
++           CFLAGS="$CFLAGS -arch host"
++         fi;;
++
++    sun) CFLAGS="-native -fast -xO5 -dalign"
++	 if test "x$acx_maxopt_portable" = xyes; then
++	   CFLAGS="$CFLAGS -xarch=generic"
++         fi;;
++
++    hp)  CFLAGS="+Oall +Optrs_ansi +DSnative"
++	 if test "x$acx_maxopt_portable" = xyes; then
++	   CFLAGS="$CFLAGS +DAportable"
++	 fi;;
++
++    ibm) if test "x$acx_maxopt_portable" = xno; then
++           xlc_opt="-qarch=auto -qtune=auto"
++	 else
++           xlc_opt="-qtune=auto"
++	 fi
++         AX_CHECK_COMPILE_FLAG($xlc_opt,
++		CFLAGS="-O3 -qansialias -w $xlc_opt",
++               [CFLAGS="-O3 -qansialias -w"
++                echo "******************************************************"
++                echo "*  You seem to have the IBM  C compiler.  It is      *"
++                echo "*  recommended for best performance that you use:    *"
++                echo "*                                                    *"
++                echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
++                echo "*                      ^^^        ^^^                *"
++                echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
++                echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
++                echo "*  and re-run configure.)  For more info, man cc.    *"
++                echo "******************************************************"])
++         ;;
++
++    intel) CFLAGS="-O3 -ansi_alias"
++	if test "x$acx_maxopt_portable" = xno; then
++	  icc_archflag=unknown
++	  icc_flags=""
++	  case $host_cpu in
++	    i686*|x86_64*)
++              # icc accepts gcc assembly syntax, so these should work:
++	      AX_GCC_X86_CPUID(0)
++              AX_GCC_X86_CPUID(1)
++	      case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
++                *:756e6547:*:*) # Intel
++                  case $ax_cv_gcc_x86_cpuid_1 in
++                    *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";;
++                    *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";;
++                    *f??:*:*:*) icc_flags="-xN -xW -xK";;
++                  esac ;;
++              esac ;;
++          esac
++          if test "x$icc_flags" != x; then
++            for flag in $icc_flags; do
++              AX_CHECK_COMPILE_FLAG($flag, [icc_archflag=$flag; break])
++            done
++          fi
++          AC_MSG_CHECKING([for icc architecture flag])
++	  AC_MSG_RESULT($icc_archflag)
++          if test "x$icc_archflag" != xunknown; then
++            CFLAGS="$CFLAGS $icc_archflag"
++          fi
++        fi
++	;;
++
++    gnu)
++     # default optimization flags for gcc on all systems
++     CFLAGS="-O3 -fomit-frame-pointer"
++
++     # -malign-double for x86 systems
++     # 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,
++	CFLAGS="$CFLAGS -fstrict-aliasing")
++
++     # note that we enable "unsafe" fp optimization with other compilers, too
++     AX_CHECK_COMPILE_FLAG(-ffast-math, CFLAGS="$CFLAGS -ffast-math")
++
++     AX_GCC_ARCHFLAG($acx_maxopt_portable)
++     ;;
++  esac
++
++  if test -z "$CFLAGS"; then
++	echo ""
++	echo "********************************************************"
++        echo "* WARNING: Don't know the best CFLAGS for this system  *"
++        echo "* Use ./configure CFLAGS=... to specify your own flags *"
++	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
++	echo "********************************************************"
++	echo ""
++        CFLAGS="-O3"
++  fi
++
++  AX_CHECK_COMPILE_FLAG($CFLAGS, [], [
++	echo ""
++        echo "********************************************************"
++        echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
++        echo "* your compiler.                                       *"
++        echo "* Use ./configure CFLAGS=... to specify your own flags *"
++        echo "********************************************************"
++        echo ""
++        CFLAGS=""
++  ])
++
++fi
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_cflags_warn_all.m4 b/js/src/ctypes/libffi/m4/ax_cflags_warn_all.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_cflags_warn_all.m4
+@@ -0,0 +1,122 @@
++# ===========================================================================
++#    http://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CFLAGS_WARN_ALL   [(shellvar [,default, [A/NA]])]
++#   AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])]
++#   AX_FCFLAGS_WARN_ALL  [(shellvar [,default, [A/NA]])]
++#
++# DESCRIPTION
++#
++#   Try to find a compiler option that enables most reasonable warnings.
++#
++#   For the GNU compiler it will be -Wall (and -ansi -pedantic) The result
++#   is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default.
++#
++#   Currently this macro knows about the GCC, Solaris, Digital Unix, AIX,
++#   HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and
++#   Intel compilers.  For a given compiler, the Fortran flags are much more
++#   experimental than their C equivalents.
++#
++#    - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS
++#    - $2 add-value-if-not-found : nothing
++#    - $3 action-if-found : add value to shellvariable
++#    - $4 action-if-not-found : nothing
++#
++#   NOTE: These macros depend on AX_APPEND_FLAG.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
++#   Copyright (c) 2010 Rhys Ulerich <rhys.ulerich@gmail.com>
++#
++#   This program is free software; you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation; either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 14
++
++AC_DEFUN([AX_FLAGS_WARN_ALL],[dnl
++AS_VAR_PUSHDEF([FLAGS],[_AC_LANG_PREFIX[]FLAGS])dnl
++AS_VAR_PUSHDEF([VAR],[ac_cv_[]_AC_LANG_ABBREV[]flags_warn_all])dnl
++AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings],
++VAR,[VAR="no, unknown"
++ac_save_[]FLAGS="$[]FLAGS"
++for ac_arg dnl
++in "-warn all  % -warn all"   dnl Intel
++   "-pedantic  % -Wall"       dnl GCC
++   "-xstrconst % -v"          dnl Solaris C
++   "-std1      % -verbose -w0 -warnprotos" dnl Digital Unix
++   "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
++   "-ansi -ansiE % -fullwarn" dnl IRIX
++   "+ESlit     % +w1"         dnl HP-UX C
++   "-Xc        % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10)
++   "-h conform % -h msglevel 2" dnl Cray C (Unicos)
++   #
++do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
++   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
++                     [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
++done
++FLAGS="$ac_save_[]FLAGS"
++])
++AS_VAR_POPDEF([FLAGS])dnl
++AC_REQUIRE([AX_APPEND_FLAG])
++case ".$VAR" in
++     .ok|.ok,*) m4_ifvaln($3,$3) ;;
++   .|.no|.no,*) m4_default($4,[m4_ifval($2,[AX_APPEND_FLAG([$2], [$1])])]) ;;
++   *) m4_default($3,[AX_APPEND_FLAG([$VAR], [$1])]) ;;
++esac
++AS_VAR_POPDEF([VAR])dnl
++])dnl AX_FLAGS_WARN_ALL
++dnl  implementation tactics:
++dnl   the for-argument contains a list of options. The first part of
++dnl   these does only exist to detect the compiler - usually it is
++dnl   a global option to enable -ansi or -extrawarnings. All other
++dnl   compilers will fail about it. That was needed since a lot of
++dnl   compilers will give false positives for some option-syntax
++dnl   like -Woption or -Xoption as they think of it is a pass-through
++dnl   to later compile stages or something. The "%" is used as a
++dnl   delimiter. A non-option comment can be given after "%%" marks
++dnl   which will be shown but not added to the respective C/CXXFLAGS.
++
++AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl
++AC_LANG_PUSH([C])
++AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4])
++AC_LANG_POP([C])
++])
++
++AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl
++AC_LANG_PUSH([C++])
++AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4])
++AC_LANG_POP([C++])
++])
++
++AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl
++AC_LANG_PUSH([Fortran])
++AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4])
++AC_LANG_POP([Fortran])
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_check_compile_flag.m4 b/js/src/ctypes/libffi/m4/ax_check_compile_flag.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_check_compile_flag.m4
+@@ -0,0 +1,72 @@
++# ===========================================================================
++#   http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
++#
++# DESCRIPTION
++#
++#   Check whether the given FLAG works with the current language's compiler
++#   or gives an error.  (Warnings, however, are ignored)
++#
++#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
++#   success/failure.
++#
++#   If EXTRA-FLAGS is defined, it is added to the current language's default
++#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
++#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
++#   force the compiler to issue an error when a bad flag is given.
++#
++#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
++#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
++#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 2
++
++AC_DEFUN([AX_CHECK_COMPILE_FLAG],
++[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
++AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
++AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
++  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
++  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
++  AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
++    [AS_VAR_SET(CACHEVAR,[yes])],
++    [AS_VAR_SET(CACHEVAR,[no])])
++  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
++AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
++  [m4_default([$2], :)],
++  [m4_default([$3], :)])
++AS_VAR_POPDEF([CACHEVAR])dnl
++])dnl AX_CHECK_COMPILE_FLAGS
+diff --git a/js/src/ctypes/libffi/m4/ax_compiler_vendor.m4 b/js/src/ctypes/libffi/m4/ax_compiler_vendor.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_compiler_vendor.m4
+@@ -0,0 +1,84 @@
++# ===========================================================================
++#    http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_COMPILER_VENDOR
++#
++# DESCRIPTION
++#
++#   Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun,
++#   hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft,
++#   watcom, etc. The vendor is returned in the cache variable
++#   $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
++#   Copyright (c) 2008 Matteo Frigo
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 11
++
++AC_DEFUN([AX_COMPILER_VENDOR],
++[AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
++  [# note: don't check for gcc first since some other compilers define __GNUC__
++  vendors="intel:     __ICC,__ECC,__INTEL_COMPILER
++           ibm:       __xlc__,__xlC__,__IBMC__,__IBMCPP__
++           pathscale: __PATHCC__,__PATHSCALE__
++           clang:     __clang__
++           gnu:       __GNUC__
++           sun:       __SUNPRO_C,__SUNPRO_CC
++           hp:        __HP_cc,__HP_aCC
++           dec:       __DECC,__DECCXX,__DECC_VER,__DECCXX_VER
++           borland:   __BORLANDC__,__TURBOC__
++           comeau:    __COMO__
++           cray:      _CRAYC
++           kai:       __KCC
++           lcc:       __LCC__
++           sgi:       __sgi,sgi
++           microsoft: _MSC_VER
++           metrowerks: __MWERKS__
++           watcom:    __WATCOMC__
++           portland:  __PGI
++           unknown:   UNKNOWN"
++  for ventest in $vendors; do
++    case $ventest in
++      *:) vendor=$ventest; continue ;;
++      *)  vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;;
++    esac
++    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
++      #if !($vencpp)
++        thisisanerror;
++      #endif
++    ])], [break])
++  done
++  ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=`echo $vendor | cut -d: -f1`
++ ])
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_configure_args.m4 b/js/src/ctypes/libffi/m4/ax_configure_args.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_configure_args.m4
+@@ -0,0 +1,70 @@
++# ===========================================================================
++#     http://www.gnu.org/software/autoconf-archive/ax_configure_args.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CONFIGURE_ARGS
++#
++# DESCRIPTION
++#
++#   Helper macro for AX_ENABLE_BUILDDIR.
++#
++#   The traditional way of starting a subdir-configure is running the script
++#   with ${1+"$@"} but since autoconf 2.60 this is broken. Instead we have
++#   to rely on eval'ing $ac_configure_args however some old autoconf
++#   versions do not provide that. To ensure maximum portability of autoconf
++#   extension macros this helper can be AC_REQUIRE'd so that
++#   $ac_configure_args will alsways be present.
++#
++#   Sadly, the traditional "exec $SHELL" of the enable_builddir macros is
++#   spoiled now and must be replaced by "eval + exit $?".
++#
++#   Example:
++#
++#     AC_DEFUN([AX_ENABLE_SUBDIR],[dnl
++#       AC_REQUIRE([AX_CONFIGURE_ARGS])dnl
++#       eval $SHELL $ac_configure_args || exit $?
++#       ...])
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
++#
++#   This program is free software; you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation; either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 9
++
++AC_DEFUN([AX_CONFIGURE_ARGS],[
++   # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args
++   if test "${ac_configure_args+set}" != "set" ; then
++      ac_configure_args=
++      for ac_arg in ${1+"[$]@"}; do
++         ac_configure_args="$ac_configure_args '$ac_arg'"
++      done
++   fi
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_enable_builddir.m4 b/js/src/ctypes/libffi/m4/ax_enable_builddir.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_enable_builddir.m4
+@@ -0,0 +1,300 @@
++# ===========================================================================
++#    http://www.gnu.org/software/autoconf-archive/ax_enable_builddir.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_ENABLE_BUILDDIR [(dirstring-or-command [,Makefile.mk [,-all]])]
++#
++# DESCRIPTION
++#
++#   If the current configure was run within the srcdir then we move all
++#   configure-files into a subdir and let the configure steps continue
++#   there. We provide an option --disable-builddir to suppress the move into
++#   a separate builddir.
++#
++#   Defaults:
++#
++#     $1 = $host (overridden with $HOST)
++#     $2 = Makefile.mk
++#     $3 = -all
++#
++#   This macro must be called before AM_INIT_AUTOMAKE. It creates a default
++#   toplevel srcdir Makefile from the information found in the created
++#   toplevel builddir Makefile. It just copies the variables and
++#   rule-targets, each extended with a default rule-execution that recurses
++#   into the build directory of the current "HOST". You can override the
++#   auto-dection through `config.guess` and build-time of course, as in
++#
++#     make HOST=i386-mingw-cross
++#
++#   which can of course set at configure time as well using
++#
++#     configure --host=i386-mingw-cross
++#
++#   After the default has been created, additional rules can be appended
++#   that will not just recurse into the subdirectories and only ever exist
++#   in the srcdir toplevel makefile - these parts are read from the $2 =
++#   Makefile.mk file
++#
++#   The automatic rules are usually scanning the toplevel Makefile for lines
++#   like '#### $host |$builddir' to recognize the place where to recurse
++#   into. Usually, the last one is the only one used. However, almost all
++#   targets have an additional "*-all" rule which makes the script to
++#   recurse into _all_ variants of the current HOST (!!) setting. The "-all"
++#   suffix can be overriden for the macro as well.
++#
++#   a special rule is only given for things like "dist" that will copy the
++#   tarball from the builddir to the sourcedir (or $(PUB)) for reason of
++#   convenience.
++#
++# LICENSE
++#
++#   Copyright (c) 2009 Guido U. Draheim <guidod@gmx.de>
++#   Copyright (c) 2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
++#
++#   This program is free software; you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation; either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 23
++
++AC_DEFUN([AX_ENABLE_BUILDDIR],[
++AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
++AC_REQUIRE([AX_CONFIGURE_ARGS])[]dnl
++AC_REQUIRE([AM_AUX_DIR_EXPAND])[]dnl
++AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl
++AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl
++AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl
++AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl
++SUB="."
++AC_ARG_ENABLE([builddir], AS_HELP_STRING(
++  [--disable-builddir],[disable automatic build in subdir of sources])
++  ,[SUB="$enableval"], [SUB="auto"])
++if test ".$ac_srcdir_defaulted" != ".no" ; then
++if test ".$srcdir" = ".." ; then
++  if test -f config.status ; then
++    AC_MSG_NOTICE(toplevel srcdir already configured... skipping subdir build)
++  else
++    test ".$SUB" = "."  && SUB="."
++    test ".$SUB" = ".no"  && SUB="."
++    test ".$TARGET" = "." && TARGET="$target"
++    test ".$SUB" = ".auto" && SUB="m4_ifval([$1], [$1],[$TARGET])"
++    if test ".$SUB" != ".." ; then    # we know where to go and
++      AS_MKDIR_P([$SUB])
++      echo __.$SUB.__ > $SUB/conftest.tmp
++      cd $SUB
++      if grep __.$SUB.__ conftest.tmp >/dev/null 2>/dev/null ; then
++        rm conftest.tmp
++        AC_MSG_RESULT([continue configure in default builddir "./$SUB"])
++      else
++        AC_MSG_ERROR([could not change to default builddir "./$SUB"])
++      fi
++      srcdir=`echo "$SUB" |
++              sed -e 's,^\./,,;s,[[^/]]$,&/,;s,[[^/]]*/,../,g;s,[[/]]$,,;'`
++      # going to restart from subdirectory location
++      test -f $srcdir/config.log   && mv $srcdir/config.log   .
++      test -f $srcdir/confdefs.h   && mv $srcdir/confdefs.h   .
++      test -f $srcdir/conftest.log && mv $srcdir/conftest.log .
++      test -f $srcdir/$cache_file  && mv $srcdir/$cache_file  .
++      AC_MSG_RESULT(....exec $SHELL $srcdir/[$]0 "--srcdir=$srcdir" "--enable-builddir=$SUB" ${1+"[$]@"})
++      case "[$]0" in # restart
++       [/\\]*) eval $SHELL "'[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;;
++       *) eval $SHELL "'$srcdir/[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;;
++      esac ; exit $?
++    fi
++  fi
++fi fi
++test ".$SUB" = ".auto" && SUB="."
++dnl ac_path_prog uses "set dummy" to override $@ which would defeat the "exec"
++AC_PATH_PROG(SED,gsed sed, sed)
++AUX="$am_aux_dir"
++AS_VAR_POPDEF([SED])dnl
++AS_VAR_POPDEF([AUX])dnl
++AS_VAR_POPDEF([SUB])dnl
++AC_CONFIG_COMMANDS([buildir],[dnl .............. config.status ..............
++AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl
++AS_VAR_PUSHDEF([TOP],[top_srcdir])dnl
++AS_VAR_PUSHDEF([SRC],[ac_top_srcdir])dnl
++AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl
++AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl
++pushdef([END],[Makefile.mk])dnl
++pushdef([_ALL],[ifelse([$3],,[-all],[$3])])dnl
++  SRC="$ax_enable_builddir_srcdir"
++  if test ".$SUB" = ".." ; then
++    if test -f "$TOP/Makefile" ; then
++      AC_MSG_NOTICE([skipping TOP/Makefile - left untouched])
++    else
++      AC_MSG_NOTICE([skipping TOP/Makefile - not created])
++    fi
++  else
++    if test -f "$SRC/Makefile" ; then
++      a=`grep "^VERSION " "$SRC/Makefile"` ; b=`grep "^VERSION " Makefile`
++      test "$a" != "$b" && rm "$SRC/Makefile"
++    fi
++    if test -f "$SRC/Makefile" ; then
++	echo "$SRC/Makefile : $SRC/Makefile.in" > $tmp/conftemp.mk
++	echo "	[]@ echo 'REMOVED,,,' >\$[]@" >> $tmp/conftemp.mk
++      eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null"
++      if grep '^REMOVED,,,' "$SRC/Makefile" >/dev/null
++      then rm $SRC/Makefile ; fi
++      cp $tmp/conftemp.mk $SRC/makefiles.mk~      ## DEBUGGING
++    fi
++    if test ! -f "$SRC/Makefile" ; then
++      AC_MSG_NOTICE([create TOP/Makefile guessed from local Makefile])
++      x='`' ; cat >$tmp/conftemp.sed <<_EOF
++/^\$/n
++x
++/^\$/bS
++x
++/\\\\\$/{H;d;}
++{H;s/.*//;x;}
++bM
++:S
++x
++/\\\\\$/{h;d;}
++{h;s/.*//;x;}
++:M
++s/\\(\\n\\)	/\\1 /g
++/^	/d
++/^[[	 ]]*[[\\#]]/d
++/^VPATH *=/d
++s/^srcdir *=.*/srcdir = ./
++s/^top_srcdir *=.*/top_srcdir = ./
++/[[:=]]/!d
++/^\\./d
++dnl Now handle rules (i.e. lines containing ":" but not " = ").
++/ = /b
++/ .= /b
++/:/!b
++s/:.*/:/
++s/ /  /g
++s/ \\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/ \\1 \\1[]_ALL\\2/g
++s/^\\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/\\1 \\1[]_ALL\\2/
++s/  / /g
++/^all all[]_ALL[[ :]]/i\\
++all-configured : all[]_ALL
++dnl dist-all exists... and would make for dist-all-all
++s/ [[a-zA-Z0-9-]]*[]_ALL [[a-zA-Z0-9-]]*[]_ALL[]_ALL//g
++/[]_ALL[]_ALL/d
++a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
++	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
++	; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" -eq "0" ; then : \\\\\\
++	; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\
++	; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
++	; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\
++	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done
++dnl special rule add-on: "dist" copies the tarball to $(PUB). (source tree)
++/dist[]_ALL *:/a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
++	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
++	; found=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\
++	; if test "\$\$found" -eq "0" ; then : \\\\\\
++	; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
++	; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\
++	; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
++dnl special rule add-on: "dist-foo" copies all the archives to $(PUB). (source tree)
++/dist-[[a-zA-Z0-9]]*[]_ALL *:/a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\
++	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
++	; found=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\
++	; if test "\$\$found" -eq "0" ; then : \\\\\\
++	; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
++	; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\
++	; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
++dnl special rule add-on: "distclean" removes all local builddirs completely
++/distclean[]_ALL *:/a\\
++	@ HOST="\$(HOST)\" \\\\\\
++	; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
++	; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\
++	; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
++	; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\
++	; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
++	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\
++	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
++	; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\
++	; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\
++	; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile
++_EOF
++      cp "$tmp/conftemp.sed" "$SRC/makefile.sed~"            ## DEBUGGING
++      $SED -f $tmp/conftemp.sed Makefile >$SRC/Makefile
++      if test -f "$SRC/m4_ifval([$2],[$2],[END])" ; then
++        AC_MSG_NOTICE([extend TOP/Makefile with TOP/m4_ifval([$2],[$2],[END])])
++        cat $SRC/END >>$SRC/Makefile
++      fi ; xxxx="####"
++      echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$SRC/Makefile
++      # sanity check
++      if grep '^; echo "MAKE ' $SRC/Makefile >/dev/null ; then
++        AC_MSG_NOTICE([buggy sed found - it deletes tab in "a" text parts])
++        $SED -e '/^@ HOST=/s/^/	/' -e '/^; /s/^/	/' $SRC/Makefile \
++          >$SRC/Makefile~
++        (test -s $SRC/Makefile~ && mv $SRC/Makefile~ $SRC/Makefile) 2>/dev/null
++      fi
++    else
++      xxxx="\\#\\#\\#\\#"
++      # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed
++      echo "s!^$xxxx [[^|]]* | *$SUB *\$!$xxxx ...... $SUB!" >$tmp/conftemp.sed
++      $SED -f "$tmp/conftemp.sed" "$SRC/Makefile" >$tmp/mkfile.tmp
++        cp "$tmp/conftemp.sed" "$SRC/makefiles.sed~"         ## DEBUGGING
++        cp "$tmp/mkfile.tmp"   "$SRC/makefiles.out~"         ## DEBUGGING
++      if cmp -s "$SRC/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then
++        AC_MSG_NOTICE([keeping TOP/Makefile from earlier configure])
++        rm "$tmp/mkfile.tmp"
++      else
++        AC_MSG_NOTICE([reusing TOP/Makefile from earlier configure])
++        mv "$tmp/mkfile.tmp" "$SRC/Makefile"
++      fi
++    fi
++    AC_MSG_NOTICE([build in $SUB (HOST=$ax_enable_builddir_host)])
++    xxxx="####"
++    echo "$xxxx" "$ax_enable_builddir_host" "|$SUB" >>$SRC/Makefile
++  fi
++popdef([END])dnl
++AS_VAR_POPDEF([SED])dnl
++AS_VAR_POPDEF([AUX])dnl
++AS_VAR_POPDEF([SRC])dnl
++AS_VAR_POPDEF([TOP])dnl
++AS_VAR_POPDEF([SUB])dnl
++],[dnl
++ax_enable_builddir_srcdir="$srcdir"                    # $srcdir
++ax_enable_builddir_host="$HOST"                        # $HOST / $host
++ax_enable_builddir_version="$VERSION"                  # $VERSION
++ax_enable_builddir_package="$PACKAGE"                  # $PACKAGE
++ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX
++ax_enable_builddir_sed="$ax_enable_builddir_sed"       # $SED
++ax_enable_builddir="$ax_enable_builddir"               # $SUB
++])dnl
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_gcc_archflag.m4 b/js/src/ctypes/libffi/m4/ax_gcc_archflag.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_gcc_archflag.m4
+@@ -0,0 +1,225 @@
++# ===========================================================================
++#      http://www.gnu.org/software/autoconf-archive/ax_gcc_archflag.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE])
++#
++# DESCRIPTION
++#
++#   This macro tries to guess the "native" arch corresponding to the target
++#   architecture for use with gcc's -march=arch or -mtune=arch flags. If
++#   found, the cache variable $ax_cv_gcc_archflag is set to this flag and
++#   ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is set to
++#   "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is
++#   to add $ax_cv_gcc_archflag to the end of $CFLAGS.
++#
++#   PORTABLE? should be either [yes] (default) or [no]. In the former case,
++#   the flag is set to -mtune (or equivalent) so that the architecture is
++#   only used for tuning, but the instruction set used is still portable. In
++#   the latter case, the flag is set to -march (or equivalent) so that
++#   architecture-specific instructions are enabled.
++#
++#   The user can specify --with-gcc-arch=<arch> in order to override the
++#   macro's choice of architecture, or --without-gcc-arch to disable this.
++#
++#   When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is
++#   called unless the user specified --with-gcc-arch manually.
++#
++#   Requires macros: AX_CHECK_COMPILE_FLAG, AX_GCC_X86_CPUID
++#
++#   (The main emphasis here is on recent CPUs, on the principle that doing
++#   high-performance computing on old hardware is uncommon.)
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
++#   Copyright (c) 2008 Matteo Frigo
++#   Copyright (c) 2012 Tsukasa Oi
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 11
++
++AC_DEFUN([AX_GCC_ARCHFLAG],
++[AC_REQUIRE([AC_PROG_CC])
++AC_REQUIRE([AC_CANONICAL_HOST])
++
++AC_ARG_WITH(gcc-arch, [AS_HELP_STRING([--with-gcc-arch=<arch>], [use architecture <arch> for gcc -march/-mtune, instead of guessing])],
++	ax_gcc_arch=$withval, ax_gcc_arch=yes)
++
++AC_MSG_CHECKING([for gcc architecture flag])
++AC_MSG_RESULT([])
++AC_CACHE_VAL(ax_cv_gcc_archflag,
++[
++ax_cv_gcc_archflag="unknown"
++
++if test "$GCC" = yes; then
++
++if test "x$ax_gcc_arch" = xyes; then
++ax_gcc_arch=""
++if test "$cross_compiling" = no; then
++case $host_cpu in
++  i[[3456]]86*|x86_64*) # use cpuid codes
++     AX_GCC_X86_CPUID(0)
++     AX_GCC_X86_CPUID(1)
++     case $ax_cv_gcc_x86_cpuid_0 in
++       *:756e6547:*:*) # Intel
++          case $ax_cv_gcc_x86_cpuid_1 in
++	    *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
++	    *5??:*:*:*) ax_gcc_arch=pentium ;;
++	    *0?6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
++	    *0?6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
++	    *0?6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
++	    *0?6[[9de]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
++	    *0?6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
++	    *0?6f?:*:*:*|*1?66?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;;
++	    *1?6[[7d]]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;;
++	    *1?6[[aef]]?:*:*:*|*2?6[[5cef]]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;;
++	    *1?6c?:*:*:*|*[[23]]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;;
++	    *2?6[[ad]]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;;
++	    *0?6??:*:*:*) ax_gcc_arch=pentiumpro ;;
++	    *6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;;
++	    ?000?f3[[347]]:*:*:*|?000?f4[1347]:*:*:*|?000?f6?:*:*:*)
++		case $host_cpu in
++	          x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
++	          *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
++	        esac ;;
++	    ?000?f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";;
++          esac ;;
++       *:68747541:*:*) # AMD
++          case $ax_cv_gcc_x86_cpuid_1 in
++	    *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;;
++	    *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
++	    *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
++	    *60?:*:*:*) ax_gcc_arch=k7 ;;
++	    *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;;
++	    *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
++	    *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
++	    *6[[68a]]?:*:*:*)
++	       AX_GCC_X86_CPUID(0x80000006) # L2 cache size
++	       case $ax_cv_gcc_x86_cpuid_0x80000006 in
++                 *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
++			ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
++                 *) ax_gcc_arch="athlon-4 athlon k7" ;;
++	       esac ;;
++	    ?00??f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
++	    ?00??f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
++	    ?00??f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
++	    ?00??f??:*:*:*) ax_gcc_arch="k8" ;;
++	    ?05??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;;
++	    ?06??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;;
++	    *f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;;
++          esac ;;
++	*:746e6543:*:*) # IDT
++	   case $ax_cv_gcc_x86_cpuid_1 in
++	     *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
++	     *58?:*:*:*) ax_gcc_arch=winchip2 ;;
++	     *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;;
++	     *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
++	   esac ;;
++     esac
++     if test x"$ax_gcc_arch" = x; then # fallback
++	case $host_cpu in
++	  i586*) ax_gcc_arch=pentium ;;
++	  i686*) ax_gcc_arch=pentiumpro ;;
++        esac
++     fi
++     ;;
++
++  sparc*)
++     AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
++     cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
++     cputype=`echo "$cputype" | tr -d ' -' | sed 's/SPARCIIi/SPARCII/' | tr $as_cr_LETTERS $as_cr_letters`
++     case $cputype in
++         *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
++         *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
++         *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
++         *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;;
++         *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;;
++         *cypress*) ax_gcc_arch=cypress ;;
++     esac ;;
++
++  alphaev5) ax_gcc_arch=ev5 ;;
++  alphaev56) ax_gcc_arch=ev56 ;;
++  alphapca56) ax_gcc_arch="pca56 ev56" ;;
++  alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
++  alphaev6) ax_gcc_arch=ev6 ;;
++  alphaev67) ax_gcc_arch=ev67 ;;
++  alphaev68) ax_gcc_arch="ev68 ev67" ;;
++  alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
++  alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
++  alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
++
++  powerpc*)
++     cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
++     cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
++     case $cputype in
++       *750*) ax_gcc_arch="750 G3" ;;
++       *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;;
++       *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;;
++       *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;;
++       *970*) ax_gcc_arch="970 G5 power4";;
++       *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
++       *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
++       603ev|8240) ax_gcc_arch="$cputype 603e 603";;
++       *) ax_gcc_arch=$cputype ;;
++     esac
++     ax_gcc_arch="$ax_gcc_arch powerpc"
++     ;;
++esac
++fi # not cross-compiling
++fi # guess arch
++
++if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
++for arch in $ax_gcc_arch; do
++  if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code
++    flags="-mtune=$arch"
++    # -mcpu=$arch and m$arch generate nonportable code on every arch except
++    # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
++    case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac
++  else
++    flags="-march=$arch -mcpu=$arch -m$arch"
++  fi
++  for flag in $flags; do
++    AX_CHECK_COMPILE_FLAG($flag, [ax_cv_gcc_archflag=$flag; break])
++  done
++  test "x$ax_cv_gcc_archflag" = xunknown || break
++done
++fi
++
++fi # $GCC=yes
++])
++AC_MSG_CHECKING([for gcc architecture flag])
++AC_MSG_RESULT($ax_cv_gcc_archflag)
++if test "x$ax_cv_gcc_archflag" = xunknown; then
++  m4_default([$3],:)
++else
++  m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"])
++fi
++])
+diff --git a/js/src/ctypes/libffi/m4/ax_gcc_x86_cpuid.m4 b/js/src/ctypes/libffi/m4/ax_gcc_x86_cpuid.m4
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/m4/ax_gcc_x86_cpuid.m4
+@@ -0,0 +1,79 @@
++# ===========================================================================
++#     http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_cpuid.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_GCC_X86_CPUID(OP)
++#
++# DESCRIPTION
++#
++#   On Pentium and later x86 processors, with gcc or a compiler that has a
++#   compatible syntax for inline assembly instructions, run a small program
++#   that executes the cpuid instruction with input OP. This can be used to
++#   detect the CPU type.
++#
++#   On output, the values of the eax, ebx, ecx, and edx registers are stored
++#   as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable
++#   ax_cv_gcc_x86_cpuid_OP.
++#
++#   If the cpuid instruction fails (because you are running a
++#   cross-compiler, or because you are not using gcc, or because you are on
++#   a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP
++#   is set to the string "unknown".
++#
++#   This macro mainly exists to be used in AX_GCC_ARCHFLAG.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
++#   Copyright (c) 2008 Matteo Frigo
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 7
++
++AC_DEFUN([AX_GCC_X86_CPUID],
++[AC_REQUIRE([AC_PROG_CC])
++AC_LANG_PUSH([C])
++AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1,
++ [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [
++     int op = $1, eax, ebx, ecx, edx;
++     FILE *f;
++      __asm__("cpuid"
++        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++        : "a" (op));
++     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++     fclose(f);
++     return 0;
++])],
++     [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid],
++     [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid],
++     [ax_cv_gcc_x86_cpuid_$1=unknown])])
++AC_LANG_POP([C])
++])
+diff --git a/js/src/ctypes/libffi/m4/libtool.m4 b/js/src/ctypes/libffi/m4/libtool.m4
+--- a/js/src/ctypes/libffi/m4/libtool.m4
++++ b/js/src/ctypes/libffi/m4/libtool.m4
+@@ -1,21 +1,23 @@
+ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+ #
+ #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
++#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
++#                 Foundation, Inc.
+ #   Written by Gordon Matzigkeit, 1996
+ #
+ # This file is free software; the Free Software Foundation gives
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+ 
+ m4_define([_LT_COPYING], [dnl
+ #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
++#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
++#                 Foundation, Inc.
+ #   Written by Gordon Matzigkeit, 1996
+ #
+ #   This file is part of GNU Libtool.
+ #
+ # GNU Libtool is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License as
+ # published by the Free Software Foundation; either version 2 of
+ # the License, or (at your option) any later version.
+@@ -32,17 +34,17 @@ m4_define([_LT_COPYING], [dnl
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GNU Libtool; see the file COPYING.  If not, a copy
+ # can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+ # obtained by writing to the Free Software Foundation, Inc.,
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ ])
+ 
+-# serial 56 LT_INIT
++# serial 57 LT_INIT
+ 
+ 
+ # LT_PREREQ(VERSION)
+ # ------------------
+ # Complain and exit if this libtool version is less that VERSION.
+ m4_defun([LT_PREREQ],
+ [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+        [m4_default([$3],
+@@ -61,32 +63,35 @@ m4_defun([_LT_CHECK_BUILDDIR],
+ esac
+ ])
+ 
+ 
+ # LT_INIT([OPTIONS])
+ # ------------------
+ AC_DEFUN([LT_INIT],
+ [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
++AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+ AC_BEFORE([$0], [LT_LANG])dnl
+ AC_BEFORE([$0], [LT_OUTPUT])dnl
+ AC_BEFORE([$0], [LTDL_INIT])dnl
+ m4_require([_LT_CHECK_BUILDDIR])dnl
+ 
+ dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+ m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+ m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+ dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+ dnl unless we require an AC_DEFUNed macro:
+ AC_REQUIRE([LTOPTIONS_VERSION])dnl
+ AC_REQUIRE([LTSUGAR_VERSION])dnl
+ AC_REQUIRE([LTVERSION_VERSION])dnl
+ AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+ m4_require([_LT_PROG_LTMAIN])dnl
+ 
++_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
++
+ dnl Parse OPTIONS
+ _LT_SET_OPTIONS([$0], [$1])
+ 
+ # This can be used to rebuild libtool when needed
+ LIBTOOL_DEPS="$ltmain"
+ 
+ # Always use our own libtool.
+ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+@@ -113,17 +118,17 @@ m4_defun([_LT_CC_BASENAME],
+ [for cc_temp in $1""; do
+   case $cc_temp in
+     compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+     distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+     \-*) ;;
+     *) break;;
+   esac
+ done
+-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
++cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+ ])
+ 
+ 
+ # _LT_FILEUTILS_DEFAULTS
+ # ----------------------
+ # It is okay to use these file commands and assume they have been set
+ # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+ m4_defun([_LT_FILEUTILS_DEFAULTS],
+@@ -133,16 +138,21 @@ m4_defun([_LT_FILEUTILS_DEFAULTS],
+ ])# _LT_FILEUTILS_DEFAULTS
+ 
+ 
+ # _LT_SETUP
+ # ---------
+ m4_defun([_LT_SETUP],
+ [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
++AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
++AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
++
++_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
++dnl
+ _LT_DECL([], [host_alias], [0], [The host system])dnl
+ _LT_DECL([], [host], [0])dnl
+ _LT_DECL([], [host_os], [0])dnl
+ dnl
+ _LT_DECL([], [build_alias], [0], [The build system])dnl
+ _LT_DECL([], [build], [0])dnl
+ _LT_DECL([], [build_os], [0])dnl
+ dnl
+@@ -155,66 +165,51 @@ test -z "$LN_S" && LN_S="ln -s"
+ _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+ dnl
+ AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+ _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+ dnl
+ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+ m4_require([_LT_CHECK_SHELL_FEATURES])dnl
++m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+ m4_require([_LT_CMD_RELOAD])dnl
+ m4_require([_LT_CHECK_MAGIC_METHOD])dnl
++m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+ m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+ m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
++m4_require([_LT_WITH_SYSROOT])dnl
+ 
+ _LT_CONFIG_LIBTOOL_INIT([
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes INIT.
+ if test -n "\${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+ fi
+ ])
+ if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+ fi
+ 
+ _LT_CHECK_OBJDIR
+ 
+ m4_require([_LT_TAG_COMPILER])dnl
+-_LT_PROG_ECHO_BACKSLASH
+ 
+ case $host_os in
+ aix3*)
+   # AIX sometimes has problems with the GCC collect2 program.  For some
+   # reason, if we set the COLLECT_NAMES environment variable, the problems
+   # vanish in a puff of smoke.
+   if test "X${COLLECT_NAMES+set}" != Xset; then
+     COLLECT_NAMES=
+     export COLLECT_NAMES
+   fi
+   ;;
+ esac
+ 
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+-
+-# Same as above, but do not quote variable references.
+-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+-
+-# Sed substitution to delay expansion of an escaped shell variable in a
+-# double_quote_subst'ed string.
+-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+-
+-# Sed substitution to delay expansion of an escaped single quote.
+-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+-
+-# Sed substitution to avoid accidental globbing in evaled expressions
+-no_glob_subst='s/\*/\\\*/g'
+-
+ # Global variables:
+ ofile=libtool
+ can_build_shared=yes
+ 
+ # All known linkers require a `.a' archive for static linking (except MSVC,
+ # which needs '.lib').
+ libext=a
+ 
+@@ -245,16 +240,38 @@ esac
+ # Use C for the default configuration in the libtool script
+ LT_SUPPORTED_TAG([CC])
+ _LT_LANG_C_CONFIG
+ _LT_LANG_DEFAULT_CONFIG
+ _LT_CONFIG_COMMANDS
+ ])# _LT_SETUP
+ 
+ 
++# _LT_PREPARE_SED_QUOTE_VARS
++# --------------------------
++# Define a few sed substitution that help us do robust quoting.
++m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
++[# Backslashify metacharacters that are still active within
++# double-quoted strings.
++sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
++
++# Same as above, but do not quote variable references.
++double_quote_subst='s/\([["`\\]]\)/\\\1/g'
++
++# Sed substitution to delay expansion of an escaped shell variable in a
++# double_quote_subst'ed string.
++delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
++
++# Sed substitution to delay expansion of an escaped single quote.
++delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
++
++# Sed substitution to avoid accidental globbing in evaled expressions
++no_glob_subst='s/\*/\\\*/g'
++])
++
+ # _LT_PROG_LTMAIN
+ # ---------------
+ # Note that this code is called both from `configure', and `config.status'
+ # now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+ # `config.status' has no value for ac_aux_dir unless we are using Automake,
+ # so we pass a copy along to make sure it has a sensible value anyway.
+ m4_defun([_LT_PROG_LTMAIN],
+ [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+@@ -403,27 +420,27 @@ m4_define([_lt_decl_all_varnames],
+ 
+ 
+ # _LT_CONFIG_STATUS_DECLARE([VARNAME])
+ # ------------------------------------
+ # Quote a variable value, and forward it to `config.status' so that its
+ # declaration there will have the same value as in `configure'.  VARNAME
+ # must have a single quote delimited value for this to work.
+ m4_define([_LT_CONFIG_STATUS_DECLARE],
+-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
++[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+ 
+ 
+ # _LT_CONFIG_STATUS_DECLARATIONS
+ # ------------------------------
+ # We delimit libtool config variables with single quotes, so when
+ # we write them to config.status, we have to be sure to quote all
+ # embedded single quotes properly.  In configure, this macro expands
+ # each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+ #
+-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
++#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+ m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+ [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+     [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+ 
+ 
+ # _LT_LIBTOOL_TAGS
+ # ----------------
+ # Output comment and list of tags supported by the script
+@@ -512,75 +529,96 @@ m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_I
+ sed_quote_subst='$sed_quote_subst'
+ double_quote_subst='$double_quote_subst'
+ delay_variable_subst='$delay_variable_subst'
+ _LT_CONFIG_STATUS_DECLARATIONS
+ LTCC='$LTCC'
+ LTCFLAGS='$LTCFLAGS'
+ compiler='$compiler_DEFAULT'
+ 
++# A function that is used when there is no print builtin or printf.
++func_fallback_echo ()
++{
++  eval 'cat <<_LTECHO_EOF
++\$[]1
++_LTECHO_EOF'
++}
++
+ # Quote evaled strings.
+ for var in lt_decl_all_varnames([[ \
+ ]], lt_decl_quote_varnames); do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+     *[[\\\\\\\`\\"\\\$]]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
++      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+       ;;
+     *)
+       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+       ;;
+     esac
+ done
+ 
+ # Double-quote double-evaled strings.
+ for var in lt_decl_all_varnames([[ \
+ ]], lt_decl_dquote_varnames); do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+     *[[\\\\\\\`\\"\\\$]]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
++      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+       ;;
+     *)
+       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+       ;;
+     esac
+ done
+ 
+-# Fix-up fallback echo if it was mangled by the above quoting rules.
+-case \$lt_ECHO in
+-*'\\\[$]0 --fallback-echo"')dnl "
+-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+-  ;;
+-esac
+-
+ _LT_OUTPUT_LIBTOOL_INIT
+ ])
+ 
++# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
++# ------------------------------------
++# Generate a child script FILE with all initialization necessary to
++# reuse the environment learned by the parent script, and make the
++# file executable.  If COMMENT is supplied, it is inserted after the
++# `#!' sequence but before initialization text begins.  After this
++# macro, additional text can be appended to FILE to form the body of
++# the child script.  The macro ends with non-zero status if the
++# file could not be fully written (such as if the disk is full).
++m4_ifdef([AS_INIT_GENERATED],
++[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
++[m4_defun([_LT_GENERATED_FILE_INIT],
++[m4_require([AS_PREPARE])]dnl
++[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
++[lt_write_fail=0
++cat >$1 <<_ASEOF || lt_write_fail=1
++#! $SHELL
++# Generated by $as_me.
++$2
++SHELL=\${CONFIG_SHELL-$SHELL}
++export SHELL
++_ASEOF
++cat >>$1 <<\_ASEOF || lt_write_fail=1
++AS_SHELL_SANITIZE
++_AS_PREPARE
++exec AS_MESSAGE_FD>&1
++_ASEOF
++test $lt_write_fail = 0 && chmod +x $1[]dnl
++m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+ 
+ # LT_OUTPUT
+ # ---------
+ # This macro allows early generation of the libtool script (before
+ # AC_OUTPUT is called), incase it is used in configure for compilation
+ # tests.
+ AC_DEFUN([LT_OUTPUT],
+ [: ${CONFIG_LT=./config.lt}
+ AC_MSG_NOTICE([creating $CONFIG_LT])
+-cat >"$CONFIG_LT" <<_LTEOF
+-#! $SHELL
+-# Generated by $as_me.
+-# Run this file to recreate a libtool stub with the current configuration.
+-
++_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
++[# Run this file to recreate a libtool stub with the current configuration.])
++
++cat >>"$CONFIG_LT" <<\_LTEOF
+ lt_cl_silent=false
+-SHELL=\${CONFIG_SHELL-$SHELL}
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<\_LTEOF
+-AS_SHELL_SANITIZE
+-_AS_PREPARE
+-
+-exec AS_MESSAGE_FD>&1
+ exec AS_MESSAGE_LOG_FD>>config.log
+ {
+   echo
+   AS_BOX([Running $as_me.])
+ } >&AS_MESSAGE_LOG_FD
+ 
+ lt_cl_help="\
+ \`$as_me' creates a local libtool stub from the current configuration,
+@@ -596,17 +634,17 @@ Usage: $[0] [[OPTIONS]]
+ 
+ Report bugs to <bug-libtool@gnu.org>."
+ 
+ lt_cl_version="\
+ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+ m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+ configured by $[0], generated by m4_PACKAGE_STRING.
+ 
+-Copyright (C) 2008 Free Software Foundation, Inc.
++Copyright (C) 2011 Free Software Foundation, Inc.
+ This config.lt script is free software; the Free Software Foundation
+ gives unlimited permision to copy, distribute and modify it."
+ 
+ while test $[#] != 0
+ do
+   case $[1] in
+     --version | --v* | -V )
+       echo "$lt_cl_version"; exit 0 ;;
+@@ -641,25 +679,23 @@ AC_MSG_NOTICE([creating $ofile])
+ AS_EXIT(0)
+ _LTEOF
+ chmod +x "$CONFIG_LT"
+ 
+ # configure is writing to config.log, but config.lt does its own redirection,
+ # appending to config.log, which fails on DOS, as config.log is still kept
+ # open by configure.  Here we exec the FD to /dev/null, effectively closing
+ # config.log, so it can be properly (re)opened and appended to by config.lt.
+-if test "$no_create" != yes; then
+-  lt_cl_success=:
+-  test "$silent" = yes &&
+-    lt_config_lt_args="$lt_config_lt_args --quiet"
+-  exec AS_MESSAGE_LOG_FD>/dev/null
+-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+-  exec AS_MESSAGE_LOG_FD>>config.log
+-  $lt_cl_success || AS_EXIT(1)
+-fi
++lt_cl_success=:
++test "$silent" = yes &&
++  lt_config_lt_args="$lt_config_lt_args --quiet"
++exec AS_MESSAGE_LOG_FD>/dev/null
++$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
++exec AS_MESSAGE_LOG_FD>>config.log
++$lt_cl_success || AS_EXIT(1)
+ ])# LT_OUTPUT
+ 
+ 
+ # _LT_CONFIG(TAG)
+ # ---------------
+ # If TAG is the built-in tag, create an initial libtool script with a
+ # default configuration from the untagged config vars.  Otherwise add code
+ # to config.status for appending the configuration named by TAG from the
+@@ -712,25 +748,22 @@ fi
+   esac
+ 
+   _LT_PROG_LTMAIN
+ 
+   # We use sed instead of cat because bash on DJGPP gets confused if
+   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+   # text mode, it properly converts lines to CR/LF.  This bash problem
+   # is reportedly fixed, but why not run on old versions too?
+-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  _LT_PROG_XSI_SHELLFNS
+-
+-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  mv -f "$cfgfile" "$ofile" ||
++  sed '$q' "$ltmain" >> "$cfgfile" \
++     || (rm -f "$cfgfile"; exit 1)
++
++  _LT_PROG_REPLACE_SHELLFNS
++
++   mv -f "$cfgfile" "$ofile" ||
+     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+   chmod +x "$ofile"
+ ],
+ [cat <<_LT_EOF >> "$ofile"
+ 
+ dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+ dnl in a comment (ie after a #).
+ # ### BEGIN LIBTOOL TAG CONFIG: $1
+@@ -765,16 +798,17 @@ m4_define([_LT_TAGS], [])
+ # LT_LANG(LANG)
+ # -------------
+ # Enable libtool support for the given language if not already enabled.
+ AC_DEFUN([LT_LANG],
+ [AC_BEFORE([$0], [LT_OUTPUT])dnl
+ m4_case([$1],
+   [C],			[_LT_LANG(C)],
+   [C++],		[_LT_LANG(CXX)],
++  [Go],			[_LT_LANG(GO)],
+   [Java],		[_LT_LANG(GCJ)],
+   [Fortran 77],		[_LT_LANG(F77)],
+   [Fortran],		[_LT_LANG(FC)],
+   [Windows Resource],	[_LT_LANG(RC)],
+   [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+     [_LT_LANG($1)],
+     [m4_fatal([$0: unsupported language: "$1"])])])dnl
+ ])# LT_LANG
+@@ -786,16 +820,41 @@ m4_defun([_LT_LANG],
+ [m4_ifdef([_LT_LANG_]$1[_enabled], [],
+   [LT_SUPPORTED_TAG([$1])dnl
+   m4_append([_LT_TAGS], [$1 ])dnl
+   m4_define([_LT_LANG_]$1[_enabled], [])dnl
+   _LT_LANG_$1_CONFIG($1)])dnl
+ ])# _LT_LANG
+ 
+ 
++m4_ifndef([AC_PROG_GO], [
++############################################################
++# NOTE: This macro has been submitted for inclusion into   #
++#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
++#  a released version of Autoconf we should remove this    #
++#  macro and use it instead.                               #
++############################################################
++m4_defun([AC_PROG_GO],
++[AC_LANG_PUSH(Go)dnl
++AC_ARG_VAR([GOC],     [Go compiler command])dnl
++AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
++_AC_ARG_VAR_LDFLAGS()dnl
++AC_CHECK_TOOL(GOC, gccgo)
++if test -z "$GOC"; then
++  if test -n "$ac_tool_prefix"; then
++    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
++  fi
++fi
++if test -z "$GOC"; then
++  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
++fi
++])#m4_defun
++])#m4_ifndef
++
++
+ # _LT_LANG_DEFAULT_CONFIG
+ # -----------------------
+ m4_defun([_LT_LANG_DEFAULT_CONFIG],
+ [AC_PROVIDE_IFELSE([AC_PROG_CXX],
+   [LT_LANG(CXX)],
+   [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+ 
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+@@ -816,31 +875,37 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+       [LT_LANG(GCJ)],
+       [m4_ifdef([AC_PROG_GCJ],
+ 	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+        m4_ifdef([A][M_PROG_GCJ],
+ 	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+        m4_ifdef([LT_PROG_GCJ],
+ 	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+ 
++AC_PROVIDE_IFELSE([AC_PROG_GO],
++  [LT_LANG(GO)],
++  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
++
+ AC_PROVIDE_IFELSE([LT_PROG_RC],
+   [LT_LANG(RC)],
+   [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+ ])# _LT_LANG_DEFAULT_CONFIG
+ 
+ # Obsolete macros:
+ AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+ AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+ AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+ AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
++AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+ dnl aclocal-1.4 backwards compatibility:
+ dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+ dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+ dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+ dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
++dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+ 
+ 
+ # _LT_TAG_COMPILER
+ # ----------------
+ m4_defun([_LT_TAG_COMPILER],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ 
+ _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+@@ -916,35 +981,70 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECK
+ 	# link flags.
+ 	rm -rf libconftest.dylib*
+ 	echo "int foo(void){return 1;}" > conftest.c
+ 	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+         _lt_result=$?
+-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
++	# If there is a non-empty error log, and "single_module"
++	# appears in it, assume the flag caused a linker warning
++        if test -s conftest.err && $GREP single_module conftest.err; then
++	  cat conftest.err >&AS_MESSAGE_LOG_FD
++	# Otherwise, if the output was created with a 0 exit code from
++	# the compiler, it worked.
++	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ 	  lt_cv_apple_cc_single_mod=yes
+ 	else
+ 	  cat conftest.err >&AS_MESSAGE_LOG_FD
+ 	fi
+ 	rm -rf libconftest.dylib*
+ 	rm -f conftest.*
+       fi])
++
+     AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+       [lt_cv_ld_exported_symbols_list],
+       [lt_cv_ld_exported_symbols_list=no
+       save_LDFLAGS=$LDFLAGS
+       echo "_main" > conftest.sym
+       LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ 	[lt_cv_ld_exported_symbols_list=yes],
+ 	[lt_cv_ld_exported_symbols_list=no])
+ 	LDFLAGS="$save_LDFLAGS"
+     ])
++
++    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
++      [lt_cv_ld_force_load=no
++      cat > conftest.c << _LT_EOF
++int forced_loaded() { return 2;}
++_LT_EOF
++      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
++      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
++      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
++      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
++      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
++      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
++      cat > conftest.c << _LT_EOF
++int main() { return 0;}
++_LT_EOF
++      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
++      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
++      _lt_result=$?
++      if test -s conftest.err && $GREP force_load conftest.err; then
++	cat conftest.err >&AS_MESSAGE_LOG_FD
++      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
++	lt_cv_ld_force_load=yes
++      else
++	cat conftest.err >&AS_MESSAGE_LOG_FD
++      fi
++        rm -f conftest.err libconftest.a conftest conftest.c
++        rm -rf conftest.dSYM
++    ])
+     case $host_os in
+     rhapsody* | darwin1.[[012]])
+       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+     darwin1.*)
+       _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+     darwin*) # darwin 5.x on
+       # if running on 10.5 or later, the deployment target defaults
+       # to the OS version, if on x86, and 10.4, the deployment
+@@ -962,257 +1062,202 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECK
+     if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+       _lt_dar_single_mod='$single_module'
+     fi
+     if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+       _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+     else
+       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+     fi
+-    if test "$DSYMUTIL" != ":"; then
++    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+       _lt_dsymutil='~$DSYMUTIL $lib || :'
+     else
+       _lt_dsymutil=
+     fi
+     ;;
+   esac
+ ])
+ 
+ 
+-# _LT_DARWIN_LINKER_FEATURES
+-# --------------------------
++# _LT_DARWIN_LINKER_FEATURES([TAG])
++# ---------------------------------
+ # Checks for linker and compiler features on darwin
+ m4_defun([_LT_DARWIN_LINKER_FEATURES],
+ [
+   m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+   _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+   _LT_TAGVAR(hardcode_direct, $1)=no
+   _LT_TAGVAR(hardcode_automatic, $1)=yes
+   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
++  if test "$lt_cv_ld_force_load" = "yes"; then
++    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
++    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
++                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
++  else
++    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
++  fi
+   _LT_TAGVAR(link_all_deplibs, $1)=yes
+   _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+   case $cc_basename in
+      ifort*) _lt_dar_can_shared=yes ;;
+      *) _lt_dar_can_shared=$GCC ;;
+   esac
+   if test "$_lt_dar_can_shared" = "yes"; then
+-    output_verbose_link_cmd=echo
++    output_verbose_link_cmd=func_echo_all
+     _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+     _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+     _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+     _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+     m4_if([$1], [CXX],
+ [   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+       _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+       _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+     fi
+ ],[])
+   else
+   _LT_TAGVAR(ld_shlibs, $1)=no
+   fi
+ ])
+ 
+-# _LT_SYS_MODULE_PATH_AIX
+-# -----------------------
++# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
++# ----------------------------------
+ # Links a minimal program and checks the executable
+ # for the system default hardcoded library path. In most cases,
+ # this is /usr/lib:/lib, but when the MPI compilers are used
+ # the location of the communication and MPI libs are included too.
+ # If we don't find anything, use the default library path according
+ # to the aix ld manual.
++# Store the results from the different compilers for each TAGNAME.
++# Allow to override them for all tags through lt_cv_aix_libpath.
+ m4_defun([_LT_SYS_MODULE_PATH_AIX],
+ [m4_require([_LT_DECL_SED])dnl
+-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+-lt_aix_libpath_sed='
+-    /Import File Strings/,/^$/ {
+-	/^0/ {
+-	    s/^0  *\(.*\)$/\1/
+-	    p
+-	}
+-    }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi],[])
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++if test "${lt_cv_aix_libpath+set}" = set; then
++  aix_libpath=$lt_cv_aix_libpath
++else
++  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
++  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
++  lt_aix_libpath_sed='[
++      /Import File Strings/,/^$/ {
++	  /^0/ {
++	      s/^0  *\([^ ]*\) *$/\1/
++	      p
++	  }
++      }]'
++  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++  # Check for a 64-bit object if we didn't find anything.
++  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
++    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++  fi],[])
++  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
++    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
++  fi
++  ])
++  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
++fi
+ ])# _LT_SYS_MODULE_PATH_AIX
+ 
+ 
+ # _LT_SHELL_INIT(ARG)
+ # -------------------
+ m4_define([_LT_SHELL_INIT],
+-[ifdef([AC_DIVERSION_NOTICE],
+-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+-	 [AC_DIVERT_PUSH(NOTICE)])
+-$1
+-AC_DIVERT_POP
+-])# _LT_SHELL_INIT
++[m4_divert_text([M4SH-INIT], [$1
++])])# _LT_SHELL_INIT
++
+ 
+ 
+ # _LT_PROG_ECHO_BACKSLASH
+ # -----------------------
+-# Add some code to the start of the generated configure script which
+-# will find an echo command which doesn't interpret backslashes.
++# Find how we can fake an echo command that does not interpret backslash.
++# In particular, with Autoconf 2.60 or later we add some code to the start
++# of the generated configure script which will find a shell with a builtin
++# printf (which we can use as an echo command).
+ m4_defun([_LT_PROG_ECHO_BACKSLASH],
+-[_LT_SHELL_INIT([
+-# Check that we are running under the correct shell.
+-SHELL=${CONFIG_SHELL-/bin/sh}
+-
+-case X$lt_ECHO in
+-X*--fallback-echo)
+-  # Remove one level of quotation (which was required for Make).
+-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+-  ;;
++[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
++ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
++
++AC_MSG_CHECKING([how to print strings])
++# Test print first, because it will be a builtin if present.
++if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
++   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
++  ECHO='print -r --'
++elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
++  ECHO='printf %s\n'
++else
++  # Use this function as a fallback that always works.
++  func_fallback_echo ()
++  {
++    eval 'cat <<_LTECHO_EOF
++$[]1
++_LTECHO_EOF'
++  }
++  ECHO='func_fallback_echo'
++fi
++
++# func_echo_all arg...
++# Invoke $ECHO with all args, space-separated.
++func_echo_all ()
++{
++    $ECHO "$*" 
++}
++
++case "$ECHO" in
++  printf*) AC_MSG_RESULT([printf]) ;;
++  print*) AC_MSG_RESULT([print -r]) ;;
++  *) AC_MSG_RESULT([cat]) ;;
+ esac
+ 
+-ECHO=${lt_ECHO-echo}
+-if test "X[$]1" = X--no-reexec; then
+-  # Discard the --no-reexec flag, and continue.
+-  shift
+-elif test "X[$]1" = X--fallback-echo; then
+-  # Avoid inline document here, it may be left over
+-  :
+-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+-  # Yippee, $ECHO works!
+-  :
+-else
+-  # Restart under the correct shell.
+-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-fi
+-
+-if test "X[$]1" = X--fallback-echo; then
+-  # used as fallback echo
+-  shift
+-  cat <<_LT_EOF
+-[$]*
+-_LT_EOF
+-  exit 0
+-fi
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-if test -z "$lt_ECHO"; then
+-  if test "X${echo_test_string+set}" != Xset; then
+-    # find a string as large as possible, as long as the shell can cope with it
+-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+-      then
+-        break
+-      fi
+-    done
+-  fi
+-
+-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-     test "X$echo_testing_string" = "X$echo_test_string"; then
+-    :
+-  else
+-    # The Solaris, AIX, and Digital Unix default echo programs unquote
+-    # backslashes.  This makes it impossible to quote backslashes using
+-    #   echo "$something" | sed 's/\\/\\\\/g'
+-    #
+-    # So, first we look for a working echo in the user's PATH.
+-
+-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-    for dir in $PATH /usr/ucb; do
+-      IFS="$lt_save_ifs"
+-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        ECHO="$dir/echo"
+-        break
+-      fi
+-    done
+-    IFS="$lt_save_ifs"
+-
+-    if test "X$ECHO" = Xecho; then
+-      # We didn't find a better echo, so look for alternatives.
+-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        # This shell has a builtin print -r that does the trick.
+-        ECHO='print -r'
+-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+-        # If we have ksh, try running configure again with it.
+-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+-        export ORIGINAL_CONFIG_SHELL
+-        CONFIG_SHELL=/bin/ksh
+-        export CONFIG_SHELL
+-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-      else
+-        # Try using printf.
+-        ECHO='printf %s\n'
+-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-	   test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  # Cool, printf works
+-	  :
+-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+-	  export CONFIG_SHELL
+-	  SHELL="$CONFIG_SHELL"
+-	  export SHELL
+-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+-        else
+-	  # maybe with a smaller string...
+-	  prev=:
+-
+-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+-	    then
+-	      break
+-	    fi
+-	    prev="$cmd"
+-	  done
+-
+-	  if test "$prev" != 'sed 50q "[$]0"'; then
+-	    echo_test_string=`eval $prev`
+-	    export echo_test_string
+-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+-	  else
+-	    # Oops.  We lost completely, so just stick with echo.
+-	    ECHO=echo
+-	  fi
+-        fi
+-      fi
+-    fi
+-  fi
+-fi
+-
+-# Copy echo and quote the copy suitably for passing to libtool from
+-# the Makefile, instead of quoting the original, which is used later.
+-lt_ECHO=$ECHO
+-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+-fi
+-
+-AC_SUBST(lt_ECHO)
+-])
++m4_ifdef([_AS_DETECT_SUGGESTED],
++[_AS_DETECT_SUGGESTED([
++  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
++    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
++    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
++    PATH=/empty FPATH=/empty; export PATH FPATH
++    test "X`printf %s $ECHO`" = "X$ECHO" \
++      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
++
+ _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+-_LT_DECL([], [ECHO], [1],
+-    [An echo program that does not interpret backslashes])
++_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+ ])# _LT_PROG_ECHO_BACKSLASH
+ 
+ 
++# _LT_WITH_SYSROOT
++# ----------------
++AC_DEFUN([_LT_WITH_SYSROOT],
++[AC_MSG_CHECKING([for sysroot])
++AC_ARG_WITH([sysroot],
++[  --with-sysroot[=DIR] Search for dependent libraries within DIR
++                        (or the compiler's sysroot if not specified).],
++[], [with_sysroot=no])
++
++dnl lt_sysroot will always be passed unquoted.  We quote it here
++dnl in case the user passed a directory name.
++lt_sysroot=
++case ${with_sysroot} in #(
++ yes)
++   if test "$GCC" = yes; then
++     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
++   fi
++   ;; #(
++ /*)
++   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
++   ;; #(
++ no|'')
++   ;; #(
++ *)
++   AC_MSG_RESULT([${with_sysroot}])
++   AC_MSG_ERROR([The sysroot must be an absolute path.])
++   ;;
++esac
++
++ AC_MSG_RESULT([${lt_sysroot:-no}])
++_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
++[dependent libraries, and in which our libraries should be installed.])])
++
+ # _LT_ENABLE_LOCK
+ # ---------------
+ m4_defun([_LT_ENABLE_LOCK],
+ [AC_ARG_ENABLE([libtool-lock],
+   [AS_HELP_STRING([--disable-libtool-lock],
+     [avoid locking (might break parallel builds)])])
+ test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+ 
+@@ -1231,17 +1276,17 @@ ia64-*-hpux*)
+ 	HPUX_IA64_MODE="64"
+ 	;;
+     esac
+   fi
+   rm -rf conftest*
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
++  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+   if AC_TRY_EVAL(ac_compile); then
+     if test "$lt_cv_prog_gnu_ld" = yes; then
+       case `/usr/bin/file conftest.$ac_objext` in
+ 	*32-bit*)
+ 	  LD="${LD-ld} -melf32bsmip"
+ 	  ;;
+ 	*N32*)
+ 	  LD="${LD-ld} -melf32bmipn32"
+@@ -1330,24 +1375,37 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*
+     [AC_LANG_PUSH(C)
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+      AC_LANG_POP])
+   if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+     CFLAGS="$SAVE_CFLAGS"
+   fi
+   ;;
+-sparc*-*solaris*)
++*-*solaris*)
+   # Find out which ABI we are using.
+   echo 'int i;' > conftest.$ac_ext
+   if AC_TRY_EVAL(ac_compile); then
+     case `/usr/bin/file conftest.o` in
+     *64-bit*)
+       case $lt_cv_prog_gnu_ld in
+-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
++      yes*)
++        case $host in
++        i?86-*-solaris*)
++          LD="${LD-ld} -m elf_x86_64"
++          ;;
++        sparc*-*-solaris*)
++          LD="${LD-ld} -m elf64_sparc"
++          ;;
++        esac
++        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
++        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
++          LD="${LD-ld}_sol2"
++        fi
++        ;;
+       *)
+ 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ 	  LD="${LD-ld} -64"
+ 	fi
+ 	;;
+       esac
+       ;;
+     esac
+@@ -1355,24 +1413,57 @@ sparc*-*solaris*)
+   rm -rf conftest*
+   ;;
+ esac
+ 
+ need_locks="$enable_libtool_lock"
+ ])# _LT_ENABLE_LOCK
+ 
+ 
++# _LT_PROG_AR
++# -----------
++m4_defun([_LT_PROG_AR],
++[AC_CHECK_TOOLS(AR, [ar], false)
++: ${AR=ar}
++: ${AR_FLAGS=cru}
++_LT_DECL([], [AR], [1], [The archiver])
++_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
++
++AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
++  [lt_cv_ar_at_file=no
++   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
++     [echo conftest.$ac_objext > conftest.lst
++      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
++      AC_TRY_EVAL([lt_ar_try])
++      if test "$ac_status" -eq 0; then
++	# Ensure the archiver fails upon bogus file names.
++	rm -f conftest.$ac_objext libconftest.a
++	AC_TRY_EVAL([lt_ar_try])
++	if test "$ac_status" -ne 0; then
++          lt_cv_ar_at_file=@
++        fi
++      fi
++      rm -f conftest.* libconftest.a
++     ])
++  ])
++
++if test "x$lt_cv_ar_at_file" = xno; then
++  archiver_list_spec=
++else
++  archiver_list_spec=$lt_cv_ar_at_file
++fi
++_LT_DECL([], [archiver_list_spec], [1],
++  [How to feed a file listing to the archiver])
++])# _LT_PROG_AR
++
++
+ # _LT_CMD_OLD_ARCHIVE
+ # -------------------
+ m4_defun([_LT_CMD_OLD_ARCHIVE],
+-[AC_CHECK_TOOL(AR, ar, false)
+-test -z "$AR" && AR=ar
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
+-_LT_DECL([], [AR], [1], [The archiver])
+-_LT_DECL([], [AR_FLAGS], [1])
++[_LT_PROG_AR
+ 
+ AC_CHECK_TOOL(STRIP, strip, :)
+ test -z "$STRIP" && STRIP=:
+ _LT_DECL([], [STRIP], [1], [A symbol stripping program])
+ 
+ AC_CHECK_TOOL(RANLIB, ranlib, :)
+ test -z "$RANLIB" && RANLIB=:
+ _LT_DECL([], [RANLIB], [1],
+@@ -1381,28 +1472,37 @@ test -z "$RANLIB" && RANLIB=:
+ # Determine commands to create old-style static archives.
+ old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+ old_postinstall_cmds='chmod 644 $oldlib'
+ old_postuninstall_cmds=
+ 
+ if test -n "$RANLIB"; then
+   case $host_os in
+   openbsd*)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
++    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+     ;;
+   *)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
++    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+     ;;
+   esac
+-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
++  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+ fi
++
++case $host_os in
++  darwin*)
++    lock_old_archive_extraction=yes ;;
++  *)
++    lock_old_archive_extraction=no ;;
++esac
+ _LT_DECL([], [old_postinstall_cmds], [2])
+ _LT_DECL([], [old_postuninstall_cmds], [2])
+ _LT_TAGDECL([], [old_archive_cmds], [2],
+     [Commands used to build an old-style archive])
++_LT_DECL([], [lock_old_archive_extraction], [0],
++    [Whether to use a lock for old archive extraction])
+ ])# _LT_CMD_OLD_ARCHIVE
+ 
+ 
+ # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+ #		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+ # ----------------------------------------------------------------
+ # Check whether the given compiler option works
+ AC_DEFUN([_LT_COMPILER_OPTION],
+@@ -1417,25 +1517,25 @@ AC_CACHE_CHECK([$1], [$2],
+    # (2) before a word containing "conftest.", or (3) at the end.
+    # Note that $ac_compile itself does not contain backslashes and begins
+    # with a dollar sign (not a hyphen), so the echo should work correctly.
+    # The option is referenced via a variable to avoid confusing sed.
+    lt_compile=`echo "$ac_compile" | $SED \
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
++   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&AS_MESSAGE_LOG_FD
+-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
++   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
++     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+        $2=yes
+      fi
+    fi
+    $RM conftest*
+ ])
+ 
+@@ -1465,17 +1565,17 @@ AC_CACHE_CHECK([$1], [$2],
+    LDFLAGS="$LDFLAGS $3"
+    echo "$lt_simple_link_test_code" > conftest.$ac_ext
+    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+      # The linker can only warn and ignore the option if not recognized
+      # So say no if there are warnings
+      if test -s conftest.err; then
+        # Append any errors to the config.log.
+        cat conftest.err 1>&AS_MESSAGE_LOG_FD
+-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
++       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+        if diff conftest.exp conftest.er2 >/dev/null; then
+          $2=yes
+        fi
+      else
+        $2=yes
+      fi
+    fi
+@@ -1528,16 +1628,21 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [d
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+     # you end up with a "frozen" computer, even though with patience
+     # the test eventually succeeds (with a max line length of 256k).
+     # Instead, let's just punt: use the minimum linelength reported by
+     # all of the supported platforms: 8192 (on NT/2K/XP).
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
++  mint*)
++    # On MiNT this can take a long time and run out of memory.
++    lt_cv_sys_max_cmd_len=8192;
++    ;;
++
+   amigaos*)
+     # On AmigaOS with pdksh, this test takes hours, literally.
+     # So we just punt and use a minimum line length of 8192.
+     lt_cv_sys_max_cmd_len=8192;
+     ;;
+ 
+   netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+     # This has been around since 386BSD, at least.  Likely further.
+@@ -1553,16 +1658,21 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [d
+     lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+     ;;
+ 
+   interix*)
+     # We know the value 262144 and hardcode it with a safety zone (like BSD)
+     lt_cv_sys_max_cmd_len=196608
+     ;;
+ 
++  os2*)
++    # The test takes a long time on OS/2.
++    lt_cv_sys_max_cmd_len=8192
++    ;;
++
+   osf*)
+     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+     # nice to cause kernel panics so lets avoid the loop below.
+     # First set a reasonable default.
+     lt_cv_sys_max_cmd_len=16384
+     #
+     if test -x /sbin/sysconfig; then
+@@ -1592,18 +1702,18 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [d
+       # a 1K string should be a reasonable start.
+       for i in 1 2 3 4 5 6 7 8 ; do
+         teststring=$teststring$teststring
+       done
+       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+       # If test is not a shell built-in, we'll probably end up computing a
+       # maximum length that is only half of the actual maximum length, but
+       # we can't tell.
+-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
++      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
++	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ 	      test $i != 17 # 1/2 MB should be enough
+       do
+         i=`expr $i + 1`
+         teststring=$teststring$teststring
+       done
+       # Only check the string length outside the loop.
+       lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+       teststring=
+@@ -1644,17 +1754,17 @@ m4_defun([_LT_HEADER_DLFCN],
+ m4_defun([_LT_TRY_DLOPEN_SELF],
+ [m4_require([_LT_HEADER_DLFCN])dnl
+ if test "$cross_compiling" = yes; then :
+   [$4]
+ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-[#line __oline__ "configure"
++[#line $LINENO "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+ #include <dlfcn.h>
+ #endif
+ 
+ #include <stdio.h>
+ 
+@@ -1685,26 +1795,36 @@ else
+ #        else
+ #          define LT_DLLAZY_OR_NOW	0
+ #        endif
+ #      endif
+ #    endif
+ #  endif
+ #endif
+ 
+-void fnord() { int i=42;}
++/* When -fvisbility=hidden is used, assume the code has been annotated
++   correspondingly for the symbols needed.  */
++#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
++int fnord () __attribute__((visibility("default")));
++#endif
++
++int fnord () { return 42; }
+ int main ()
+ {
+   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+   int status = $lt_dlunknown;
+ 
+   if (self)
+     {
+       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
++      else
++        {
++	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
++          else puts (dlerror ());
++	}
+       /* dlclose (self); */
+     }
+   else
+     puts (dlerror ());
+ 
+   return status;
+ }]
+ _LT_EOF
+@@ -1870,26 +1990,26 @@ AC_CACHE_CHECK([if $compiler supports -c
+    # Insert the option either (1) after the last *FLAGS variable, or
+    # (2) before a word containing "conftest.", or (3) at the end.
+    # Note that $ac_compile itself does not contain backslashes and begins
+    # with a dollar sign (not a hyphen), so the echo should work correctly.
+    lt_compile=`echo "$ac_compile" | $SED \
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
++   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&AS_MESSAGE_LOG_FD
+-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
++   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
++     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+        _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+      fi
+    fi
+    chmod u+w . 2>&AS_MESSAGE_LOG_FD
+    $RM conftest*
+    # SGI C++ compiler will create directory out/ii_files/ for
+@@ -2038,47 +2158,55 @@ fi
+ # -----------------------------
+ # PORTME Fill in your ld.so characteristics
+ m4_defun([_LT_SYS_DYNAMIC_LINKER],
+ [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ m4_require([_LT_DECL_EGREP])dnl
+ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+ m4_require([_LT_DECL_OBJDUMP])dnl
+ m4_require([_LT_DECL_SED])dnl
++m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+ AC_MSG_CHECKING([dynamic linker characteristics])
+ m4_if([$1],
+ 	[], [
+ if test "$GCC" = yes; then
+   case $host_os in
+     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+     *) lt_awk_arg="/^libraries:/" ;;
+   esac
+-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
++  case $host_os in
++    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
++    *) lt_sed_strip_eq="s,=/,/,g" ;;
++  esac
++  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
++  case $lt_search_path_spec in
++  *\;*)
+     # if the path contains ";" then we assume it to be the separator
+     # otherwise default to the standard path separator (i.e. ":") - it is
+     # assumed that no part of a normal pathname contains ";" but that should
+     # okay in the real world where ";" in dirpaths is itself problematic.
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+-  else
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-  fi
++    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
++    ;;
++  *)
++    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
++    ;;
++  esac
+   # Ok, now we have the path, separated by spaces, we can step through it
+   # and add multilib dir if necessary.
+   lt_tmp_lt_search_path_spec=
+   lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+   for lt_sys_path in $lt_search_path_spec; do
+     if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+     else
+       test -d "$lt_sys_path" && \
+ 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+     fi
+   done
+-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
++  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+ BEGIN {RS=" "; FS="/|\n";} {
+   lt_foo="";
+   lt_count=0;
+   for (lt_i = NF; lt_i > 0; lt_i--) {
+     if ($lt_i != "" && $lt_i != ".") {
+       if ($lt_i == "..") {
+         lt_count++;
+       } else {
+@@ -2088,17 +2216,23 @@ BEGIN {RS=" "; FS="/|\n";} {
+           lt_count--;
+         }
+       }
+     }
+   }
+   if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+   if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+ }'`
+-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
++  # AWK program above erroneously prepends '/' to C:/dos/paths
++  # for these hosts.
++  case $host_os in
++    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
++      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
++  esac
++  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+ else
+   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ fi])
+ library_names_spec=
+ libname_spec='lib$name'
+ soname_spec=
+ shrext_cmds=".so"
+ postinstall_cmds=
+@@ -2114,26 +2248,26 @@ need_lib_prefix=unknown
+ hardcode_into_libs=no
+ 
+ # when you set need_version to no, make sure it does not cause -set_version
+ # flags to be left without arguments
+ need_version=unknown
+ 
+ case $host_os in
+ aix3*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+   shlibpath_var=LIBPATH
+ 
+   # AIX 3 has no versioning support, so we append a major version to the name.
+   soname_spec='${libname}${release}${shared_ext}$major'
+   ;;
+ 
+ aix[[4-9]]*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   hardcode_into_libs=yes
+   if test "$host_cpu" = ia64; then
+     # AIX 5 supports IA64
+     library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+     shlibpath_var=LD_LIBRARY_PATH
+   else
+@@ -2176,29 +2310,29 @@ amigaos*)
+   powerpc)
+     # Since July 2007 AmigaOS4 officially supports .so libraries.
+     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     ;;
+   m68k)
+     library_names_spec='$libname.ixlibrary $libname.a'
+     # Create ${libname}_ixlibrary.a entries in /sys/libs.
+-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
++    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+     ;;
+   esac
+   ;;
+ 
+ beos*)
+   library_names_spec='${libname}${shared_ext}'
+   dynamic_linker="$host_os ld.so"
+   shlibpath_var=LIBRARY_PATH
+   ;;
+ 
+ bsdi[[45]]*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+   shlibpath_var=LD_LIBRARY_PATH
+   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+   sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+   # the default ld.so.conf also contains /usr/contrib/lib and
+@@ -2207,18 +2341,19 @@ bsdi[[45]]*)
+   ;;
+ 
+ cygwin* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=".dll"
+   need_version=no
+   need_lib_prefix=no
+ 
+-  case $GCC,$host_os in
+-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++  case $GCC,$cc_basename in
++  yes,*)
++    # gcc
+     library_names_spec='$libname.dll.a'
+     # DLL is installed to $(libdir)/../bin by postinstall_cmds
+     postinstall_cmds='base_file=`basename \${file}`~
+       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+       dldir=$destdir/`dirname \$dlpath`~
+       test -d \$dldir || mkdir -p \$dldir~
+       $install_prog $dir/$dlname \$dldir/$dlname~
+       chmod a+x \$dldir/$dlname~
+@@ -2229,46 +2364,93 @@ cygwin* | mingw* | pw32* | cegcc*)
+       dlpath=$dir/\$dldll~
+        $RM \$dlpath'
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+     cygwin*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
++m4_if([$1], [],[
++      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+       ;;
+     mingw* | cegcc*)
+       # MinGW DLLs use traditional 'lib' prefix
+       soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+-        # It is most probably a Windows format PATH printed by
+-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+-        # path with ; separators, and with drive letters. We can handle the
+-        # drive letters (cygwin fileutils understands them), so leave them,
+-        # especially as we might pass files found there to a mingw objdump,
+-        # which wouldn't understand a cygwinified path. Ahh.
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+-      else
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-      fi
+       ;;
+     pw32*)
+       # pw32 DLLs use 'pw' prefix rather than 'lib'
+       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+       ;;
+     esac
++    dynamic_linker='Win32 ld.exe'
+     ;;
+ 
++  *,cl*)
++    # Native MSVC
++    libname_spec='$name'
++    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
++    library_names_spec='${libname}.dll.lib'
++
++    case $build_os in
++    mingw*)
++      sys_lib_search_path_spec=
++      lt_save_ifs=$IFS
++      IFS=';'
++      for lt_path in $LIB
++      do
++        IFS=$lt_save_ifs
++        # Let DOS variable expansion print the short 8.3 style file name.
++        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
++        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
++      done
++      IFS=$lt_save_ifs
++      # Convert to MSYS style.
++      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
++      ;;
++    cygwin*)
++      # Convert to unix form, then to dos form, then back to unix form
++      # but this time dos style (no spaces!) so that the unix form looks
++      # like /cygdrive/c/PROGRA~1:/cygdr...
++      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
++      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
++      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++      ;;
++    *)
++      sys_lib_search_path_spec="$LIB"
++      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
++        # It is most probably a Windows format PATH.
++        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++      else
++        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++      fi
++      # FIXME: find the short name or the path components, as spaces are
++      # common. (e.g. "Program Files" -> "PROGRA~1")
++      ;;
++    esac
++
++    # DLL is installed to $(libdir)/../bin by postinstall_cmds
++    postinstall_cmds='base_file=`basename \${file}`~
++      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++      dldir=$destdir/`dirname \$dlpath`~
++      test -d \$dldir || mkdir -p \$dldir~
++      $install_prog $dir/$dlname \$dldir/$dlname'
++    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++      dlpath=$dir/\$dldll~
++       $RM \$dlpath'
++    shlibpath_overrides_runpath=yes
++    dynamic_linker='Win32 link.exe'
++    ;;
++
+   *)
++    # Assume MSVC wrapper
+     library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
++    dynamic_linker='Win32 ld.exe'
+     ;;
+   esac
+-  dynamic_linker='Win32 ld.exe'
+   # FIXME: first we should search . and the directory the executable is in
+   shlibpath_var=PATH
+   ;;
+ 
+ darwin* | rhapsody*)
+   dynamic_linker="$host_os dyld"
+   version_type=darwin
+   need_lib_prefix=no
+@@ -2279,36 +2461,32 @@ darwin* | rhapsody*)
+   shlibpath_var=DYLD_LIBRARY_PATH
+   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+ m4_if([$1], [],[
+   sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+   sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+   ;;
+ 
+ dgux*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   ;;
+ 
+-freebsd1*)
+-  dynamic_linker=no
+-  ;;
+-
+ freebsd* | dragonfly*)
+   # DragonFly does not have aout.  When/if they implement a new
+   # versioning mechanism, adjust this.
+   if test -x /usr/bin/objformat; then
+     objformat=`/usr/bin/objformat`
+   else
+     case $host_os in
+-    freebsd[[123]]*) objformat=aout ;;
++    freebsd[[23]].*) objformat=aout ;;
+     *) objformat=elf ;;
+     esac
+   fi
+   version_type=freebsd-$objformat
+   case $version_type in
+     freebsd-elf*)
+       library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+       need_version=no
+@@ -2316,17 +2494,17 @@ freebsd* | dragonfly*)
+       ;;
+     freebsd-*)
+       library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+       need_version=yes
+       ;;
+   esac
+   shlibpath_var=LD_LIBRARY_PATH
+   case $host_os in
+-  freebsd2*)
++  freebsd2.*)
+     shlibpath_overrides_runpath=yes
+     ;;
+   freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+     shlibpath_overrides_runpath=yes
+     hardcode_into_libs=yes
+     ;;
+   freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+   freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+@@ -2336,22 +2514,36 @@ freebsd* | dragonfly*)
+   *) # from 4.6 on, and DragonFly
+     shlibpath_overrides_runpath=yes
+     hardcode_into_libs=yes
+     ;;
+   esac
+   ;;
+ 
+ gnu*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  hardcode_into_libs=yes
++  ;;
++
++haiku*)
++  version_type=linux # correct to gnu/linux during the next big refactor
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os runtime_loader"
++  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
++  soname_spec='${libname}${release}${shared_ext}$major'
++  shlibpath_var=LIBRARY_PATH
++  shlibpath_overrides_runpath=yes
++  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+   hardcode_into_libs=yes
+   ;;
+ 
+ hpux9* | hpux10* | hpux11*)
+   # Give a soname corresponding to the major version so that dld.sl refuses to
+   # link against other versions.
+   version_type=sunos
+   need_lib_prefix=no
+@@ -2387,38 +2579,40 @@ hpux9* | hpux10* | hpux11*)
+     shrext_cmds='.sl'
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=SHLIB_PATH
+     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     ;;
+   esac
+-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
++  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+   postinstall_cmds='chmod 555 $lib'
++  # or fails outright, so override atomically:
++  install_override_mode=555
+   ;;
+ 
+ interix[[3-9]]*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
+   hardcode_into_libs=yes
+   ;;
+ 
+ irix5* | irix6* | nonstopux*)
+   case $host_os in
+     nonstopux*) version_type=nonstopux ;;
+     *)
+ 	if test "$lt_cv_prog_gnu_ld" = yes; then
+-		version_type=linux
++		version_type=linux # correct to gnu/linux during the next big refactor
+ 	else
+ 		version_type=irix
+ 	fi ;;
+   esac
+   need_lib_prefix=no
+   need_version=no
+   soname_spec='${libname}${release}${shared_ext}$major'
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+@@ -2445,49 +2639,55 @@ irix5* | irix6* | nonstopux*)
+   hardcode_into_libs=yes
+   ;;
+ 
+ # No shared lib support for Linux oldld, aout, or coff.
+ linux*oldld* | linux*aout* | linux*coff*)
+   dynamic_linker=no
+   ;;
+ 
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu)
+-  version_type=linux
++# This must be glibc/ELF.
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
++
+   # Some binutils ld are patched to set DT_RUNPATH
+-  save_LDFLAGS=$LDFLAGS
+-  save_libdir=$libdir
+-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+-       [shlibpath_overrides_runpath=yes])])
+-  LDFLAGS=$save_LDFLAGS
+-  libdir=$save_libdir
++  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
++    [lt_cv_shlibpath_overrides_runpath=no
++    save_LDFLAGS=$LDFLAGS
++    save_libdir=$libdir
++    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
++	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
++    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
++      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
++	 [lt_cv_shlibpath_overrides_runpath=yes])])
++    LDFLAGS=$save_LDFLAGS
++    libdir=$save_libdir
++    ])
++  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+ 
+   # This implies no fast_install, which is unacceptable.
+   # Some rework will be needed to allow for fast_install
+   # before this can be enabled.
+   hardcode_into_libs=yes
+ 
+   # Add ABI-specific directories to the system library path.
+   sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+ 
+   # Append ld.so.conf contents to the search path
+   if test -f /etc/ld.so.conf; then
+-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
++    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+     sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++
+   fi
+ 
+   # We used to test for /lib/ld.so.1 and disable shared libraries on
+   # powerpc, because MkLinux only supported shared libraries with the
+   # GNU dynamic linker.  Since this was broken with cross compilers,
+   # most powerpc-linux boxes support dynamic linking these days and
+   # people can always --disable-shared, the test was removed, and we
+   # assume the GNU/Linux dynamic linker is in use.
+@@ -2508,17 +2708,17 @@ netbsd*)
+     dynamic_linker='NetBSD ld.elf_so'
+   fi
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=yes
+   hardcode_into_libs=yes
+   ;;
+ 
+ newsos6)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=yes
+   ;;
+ 
+ *nto* | *qnx*)
+   version_type=qnx
+   need_lib_prefix=no
+@@ -2577,17 +2777,17 @@ osf3* | osf4* | osf5*)
+   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+   ;;
+ 
+ rdos*)
+   dynamic_linker=no
+   ;;
+ 
+ solaris*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=yes
+   hardcode_into_libs=yes
+   # ldd complains unless libraries are executable
+@@ -2602,17 +2802,17 @@ sunos4*)
+   shlibpath_overrides_runpath=yes
+   if test "$with_gnu_ld" = yes; then
+     need_lib_prefix=no
+   fi
+   need_version=yes
+   ;;
+ 
+ sysv4 | sysv4.3*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   case $host_vendor in
+     sni)
+       shlibpath_overrides_runpath=no
+       need_lib_prefix=no
+       runpath_var=LD_RUN_PATH
+@@ -2626,17 +2826,17 @@ sysv4 | sysv4.3*)
+       shlibpath_overrides_runpath=no
+       sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+       ;;
+   esac
+   ;;
+ 
+ sysv4*MP*)
+   if test -d /usr/nec ;then
+-    version_type=linux
++    version_type=linux # correct to gnu/linux during the next big refactor
+     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+     soname_spec='$libname${shared_ext}.$major'
+     shlibpath_var=LD_LIBRARY_PATH
+   fi
+   ;;
+ 
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+   version_type=freebsd-elf
+@@ -2657,27 +2857,27 @@ sysv5* | sco3.2v5* | sco5v6* | unixware*
+ 	;;
+     esac
+   fi
+   sys_lib_dlsearch_path_spec='/usr/lib'
+   ;;
+ 
+ tpf*)
+   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   need_lib_prefix=no
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
+   hardcode_into_libs=yes
+   ;;
+ 
+ uts4*)
+-  version_type=linux
++  version_type=linux # correct to gnu/linux during the next big refactor
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+   shlibpath_var=LD_LIBRARY_PATH
+   ;;
+ 
+ *)
+   dynamic_linker=no
+   ;;
+@@ -2709,16 +2909,18 @@ fi
+ _LT_DECL([], [shlibpath_overrides_runpath], [0],
+     [Is shlibpath searched before the hard-coded library search path?])
+ _LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+ _LT_DECL([], [library_names_spec], [1],
+     [[List of archive names.  First name is the real one, the rest are links.
+     The last name is the one that the linker finds with -lNAME]])
+ _LT_DECL([], [soname_spec], [1],
+     [[The coded name of the library, if different from the real name]])
++_LT_DECL([], [install_override_mode], [1],
++    [Permission mode override for installation of shared libraries])
+ _LT_DECL([], [postinstall_cmds], [2],
+     [Command to use after installation of a shared archive])
+ _LT_DECL([], [postuninstall_cmds], [2],
+     [Command to use after uninstallation of a shared archive])
+ _LT_DECL([], [finish_cmds], [2],
+     [Commands used to finish a libtool library installation in a directory])
+ _LT_DECL([], [finish_eval], [1],
+     [[As "finish_cmds", except a single script fragment to be evaled but
+@@ -2821,16 +3023,17 @@ fi
+ # ----------
+ # find the pathname to the GNU or non-GNU linker
+ AC_DEFUN([LT_PATH_LD],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ m4_require([_LT_DECL_SED])dnl
+ m4_require([_LT_DECL_EGREP])dnl
++m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+ 
+ AC_ARG_WITH([gnu-ld],
+     [AS_HELP_STRING([--with-gnu-ld],
+ 	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+     [test "$withval" = no || with_gnu_ld=yes],
+     [with_gnu_ld=no])dnl
+ 
+ ac_prog=ld
+@@ -2942,26 +3145,31 @@ m4_defun([_LT_CMD_RELOAD],
+   [lt_cv_ld_reload_flag='-r'])
+ reload_flag=$lt_cv_ld_reload_flag
+ case $reload_flag in
+ "" | " "*) ;;
+ *) reload_flag=" $reload_flag" ;;
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
++  cygwin* | mingw* | pw32* | cegcc*)
++    if test "$GCC" != yes; then
++      reload_cmds=false
++    fi
++    ;;
+   darwin*)
+     if test "$GCC" = yes; then
+       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+     else
+       reload_cmds='$LD$reload_flag -o $output$reload_objs'
+     fi
+     ;;
+ esac
+-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+-_LT_DECL([], [reload_cmds], [2])dnl
++_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
++_LT_TAGDECL([], [reload_cmds], [2])dnl
+ ])# _LT_CMD_RELOAD
+ 
+ 
+ # _LT_CHECK_MAGIC_METHOD
+ # ----------------------
+ # how to check for library dependencies
+ #  -- PORTME fill in with the dynamic library characteristics
+ m4_defun([_LT_CHECK_MAGIC_METHOD],
+@@ -3003,26 +3211,28 @@ cygwin*)
+   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+   lt_cv_file_magic_cmd='func_win32_libid'
+   ;;
+ 
+ mingw* | pw32*)
+   # Base MSYS/MinGW do not provide the 'file' command needed by
+   # func_win32_libid shell function, so use a weaker test based on 'objdump',
+   # unless we find 'file', for example because we are cross-compiling.
+-  if ( file / ) >/dev/null 2>&1; then
++  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
++  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+     lt_cv_file_magic_cmd='func_win32_libid'
+   else
+-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++    # Keep this pattern in sync with the one in func_win32_libid.
++    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+     lt_cv_file_magic_cmd='$OBJDUMP -f'
+   fi
+   ;;
+ 
+-cegcc)
++cegcc*)
+   # use the weaker test based on 'objdump'. See mingw*.
+   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+   lt_cv_file_magic_cmd='$OBJDUMP -f'
+   ;;
+ 
+ darwin* | rhapsody*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -3042,29 +3252,33 @@ freebsd* | dragonfly*)
+     lt_cv_deplibs_check_method=pass_all
+   fi
+   ;;
+ 
+ gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
++haiku*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ hpux10.20* | hpux11*)
+   lt_cv_file_magic_cmd=/usr/bin/file
+   case $host_cpu in
+   ia64*)
+     lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+     ;;
+   hppa*64*)
+-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
++    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+     ;;
+   *)
+-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
++    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+     lt_cv_file_magic_test_file=/usr/lib/libc.sl
+     ;;
+   esac
+   ;;
+ 
+ interix[[3-9]]*)
+   # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+   lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+@@ -3075,18 +3289,18 @@ irix5* | irix6* | nonstopux*)
+   *-32|*"-32 ") libmagic=32-bit;;
+   *-n32|*"-n32 ") libmagic=N32;;
+   *-64|*"-64 ") libmagic=64-bit;;
+   *) libmagic=never-match;;
+   esac
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu)
++# This must be glibc/ELF.
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ 
+ netbsd*)
+   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+   else
+     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+@@ -3154,24 +3368,43 @@ sysv4 | sysv4.3*)
+   esac
+   ;;
+ 
+ tpf*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+ esac
+ ])
++
++file_magic_glob=
++want_nocaseglob=no
++if test "$build" = "$host"; then
++  case $host_os in
++  mingw* | pw32*)
++    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
++      want_nocaseglob=yes
++    else
++      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
++    fi
++    ;;
++  esac
++fi
++
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+ 
+ _LT_DECL([], [deplibs_check_method], [1],
+     [Method to check whether dependent libraries are shared objects])
+ _LT_DECL([], [file_magic_cmd], [1],
+-    [Command to use when deplibs_check_method == "file_magic"])
++    [Command to use when deplibs_check_method = "file_magic"])
++_LT_DECL([], [file_magic_glob], [1],
++    [How to find potential files when deplibs_check_method = "file_magic"])
++_LT_DECL([], [want_nocaseglob], [1],
++    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+ ])# _LT_CHECK_MAGIC_METHOD
+ 
+ 
+ # LT_PATH_NM
+ # ----------
+ # find the pathname to a BSD- or MS-compatible name lister
+ AC_DEFUN([LT_PATH_NM],
+ [AC_REQUIRE([AC_PROG_CC])dnl
+@@ -3218,59 +3451,132 @@ else
+     IFS="$lt_save_ifs"
+   done
+   : ${lt_cv_path_NM=no}
+ fi])
+ if test "$lt_cv_path_NM" != "no"; then
+   NM="$lt_cv_path_NM"
+ else
+   # Didn't find any BSD compatible name lister, look for dumpbin.
+-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
++  if test -n "$DUMPBIN"; then :
++    # Let the user override the test.
++  else
++    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
++    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
++    *COFF*)
++      DUMPBIN="$DUMPBIN -symbols"
++      ;;
++    *)
++      DUMPBIN=:
++      ;;
++    esac
++  fi
+   AC_SUBST([DUMPBIN])
+   if test "$DUMPBIN" != ":"; then
+     NM="$DUMPBIN"
+   fi
+ fi
+ test -z "$NM" && NM=nm
+ AC_SUBST([NM])
+ _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+ 
+ AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+   [lt_cv_nm_interface="BSD nm"
+   echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
++  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$ac_compile" 2>conftest.err)
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
++  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
++  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+   cat conftest.out >&AS_MESSAGE_LOG_FD
+   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+     lt_cv_nm_interface="MS dumpbin"
+   fi
+   rm -f conftest*])
+ ])# LT_PATH_NM
+ 
+ # Old names:
+ AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+ AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+ dnl aclocal-1.4 backwards compatibility:
+ dnl AC_DEFUN([AM_PROG_NM], [])
+ dnl AC_DEFUN([AC_PROG_NM], [])
+ 
++# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
++# --------------------------------
++# how to determine the name of the shared library
++# associated with a specific link library.
++#  -- PORTME fill in with the dynamic library characteristics
++m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
++[m4_require([_LT_DECL_EGREP])
++m4_require([_LT_DECL_OBJDUMP])
++m4_require([_LT_DECL_DLLTOOL])
++AC_CACHE_CHECK([how to associate runtime and link libraries],
++lt_cv_sharedlib_from_linklib_cmd,
++[lt_cv_sharedlib_from_linklib_cmd='unknown'
++
++case $host_os in
++cygwin* | mingw* | pw32* | cegcc*)
++  # two different shell functions defined in ltmain.sh
++  # decide which to use based on capabilities of $DLLTOOL
++  case `$DLLTOOL --help 2>&1` in
++  *--identify-strict*)
++    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
++    ;;
++  *)
++    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
++    ;;
++  esac
++  ;;
++*)
++  # fallback: assume linklib IS sharedlib
++  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
++  ;;
++esac
++])
++sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
++test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
++
++_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
++    [Command to associate shared and link libraries])
++])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
++
++
++# _LT_PATH_MANIFEST_TOOL
++# ----------------------
++# locate the manifest tool
++m4_defun([_LT_PATH_MANIFEST_TOOL],
++[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
++AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
++  [lt_cv_path_mainfest_tool=no
++  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
++  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
++  cat conftest.err >&AS_MESSAGE_LOG_FD
++  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
++    lt_cv_path_mainfest_tool=yes
++  fi
++  rm -f conftest*])
++if test "x$lt_cv_path_mainfest_tool" != xyes; then
++  MANIFEST_TOOL=:
++fi
++_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
++])# _LT_PATH_MANIFEST_TOOL
++
+ 
+ # LT_LIB_M
+ # --------
+ # check for math library
+ AC_DEFUN([LT_LIB_M],
+ [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ LIBM=
+ case $host in
+-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
++*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+   # These system don't have libm, or don't need it
+   ;;
+ *-ncr-sysv4.3*)
+   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+   AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+   ;;
+ *)
+   AC_CHECK_LIB(m, cos, LIBM="-lm")
+@@ -3288,33 +3594,39 @@ dnl AC_DEFUN([AC_CHECK_LIBM], [])
+ # _LT_COMPILER_NO_RTTI([TAGNAME])
+ # -------------------------------
+ m4_defun([_LT_COMPILER_NO_RTTI],
+ [m4_require([_LT_TAG_COMPILER])dnl
+ 
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ 
+ if test "$GCC" = yes; then
+-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
++  case $cc_basename in
++  nvcc*)
++    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
++  *)
++    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
++  esac
+ 
+   _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+     lt_cv_prog_compiler_rtti_exceptions,
+     [-fno-rtti -fno-exceptions], [],
+     [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+ fi
+ _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ 	[Compiler flag to turn off builtin functions])
+ ])# _LT_COMPILER_NO_RTTI
+ 
+ 
+ # _LT_CMD_GLOBAL_SYMBOLS
+ # ----------------------
+ m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+ [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([AC_PROG_CC])dnl
++AC_REQUIRE([AC_PROG_AWK])dnl
+ AC_REQUIRE([LT_PATH_NM])dnl
+ AC_REQUIRE([LT_PATH_LD])dnl
+ m4_require([_LT_DECL_SED])dnl
+ m4_require([_LT_DECL_EGREP])dnl
+ m4_require([_LT_TAG_COMPILER])dnl
+ 
+ # Check for command to grab the raw symbol name followed by C symbol from nm.
+ AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+@@ -3372,18 +3684,18 @@ case `$NM -V 2>&1` in
+ esac
+ 
+ # Transform an extracted symbol line into a proper C declaration.
+ # Some systems (esp. on ia64) link data and code symbols differently,
+ # so use this general approach.
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ 
+ # Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+ 
+ # Handle CRLF in mingw tool chain
+ opt_cr=
+ case $build_os in
+ mingw*)
+   opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+   ;;
+ esac
+@@ -3397,28 +3709,30 @@ for ac_symprfx in "" "_"; do
+   # Write the raw and C identifiers.
+   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+     # Fake it for dumpbin and say T for any non-static function
+     # and D for any global variable.
+     # Also find C++ and __fastcall symbols from MSVC++,
+     # which start with @ or ?.
+     lt_cv_sys_global_symbol_pipe="$AWK ['"\
+ "     {last_section=section; section=\$ 3};"\
++"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+ "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+ "     \$ 0!~/External *\|/{next};"\
+ "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+ "     {if(hide[section]) next};"\
+ "     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+ "     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+ "     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+ "     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+ "     ' prfx=^$ac_symprfx]"
+   else
+     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+   fi
++  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ 
+   # Check to see that the pipe works correctly.
+   pipe_works=no
+ 
+   rm -f conftest*
+   cat > conftest.$ac_ext <<_LT_EOF
+ #ifdef __cplusplus
+ extern "C" {
+@@ -3430,40 +3744,52 @@ void nm_test_func(void){}
+ }
+ #endif
+ int main(){nm_test_var='a';nm_test_func();return(0);}
+ _LT_EOF
+ 
+   if AC_TRY_EVAL(ac_compile); then
+     # Now try to grab the symbols.
+     nlist=conftest.nm
+-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
++    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+       # Try sorting and uniquifying the output.
+       if sort "$nlist" | uniq > "$nlist"T; then
+ 	mv -f "$nlist"T "$nlist"
+       else
+ 	rm -f "$nlist"T
+       fi
+ 
+       # Make sure that we snagged all the symbols we need.
+       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ 	  cat <<_LT_EOF > conftest.$ac_ext
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++   relocations are performed -- see ld's documentation on pseudo-relocs.  */
++# define LT@&t@_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data.  */
++# define LT@&t@_DLSYM_CONST
++#else
++# define LT@&t@_DLSYM_CONST const
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ _LT_EOF
+ 	  # Now generate the symbol file.
+ 	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+ 
+ 	  cat <<_LT_EOF >> conftest.$ac_ext
+ 
+ /* The mapping between symbol names and symbols.  */
+-const struct {
++LT@&t@_DLSYM_CONST struct {
+   const char *name;
+   void       *address;
+ }
+ lt__PROGRAM__LTX_preloaded_symbols[[]] =
+ {
+   { "@PROGRAM@", (void *) 0 },
+ _LT_EOF
+ 	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+@@ -3479,25 +3805,25 @@ static const void *lt_preloaded_setup() 
+ #endif
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ _LT_EOF
+ 	  # Now try linking the two files.
+ 	  mv conftest.$ac_objext conftstm.$ac_objext
+-	  lt_save_LIBS="$LIBS"
+-	  lt_save_CFLAGS="$CFLAGS"
++	  lt_globsym_save_LIBS=$LIBS
++	  lt_globsym_save_CFLAGS=$CFLAGS
+ 	  LIBS="conftstm.$ac_objext"
+ 	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ 	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ 	    pipe_works=yes
+ 	  fi
+-	  LIBS="$lt_save_LIBS"
+-	  CFLAGS="$lt_save_CFLAGS"
++	  LIBS=$lt_globsym_save_LIBS
++	  CFLAGS=$lt_globsym_save_CFLAGS
+ 	else
+ 	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ 	fi
+       else
+ 	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+     else
+       echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+@@ -3520,38 +3846,46 @@ if test -z "$lt_cv_sys_global_symbol_pip
+   lt_cv_sys_global_symbol_to_cdecl=
+ fi
+ if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+   AC_MSG_RESULT(failed)
+ else
+   AC_MSG_RESULT(ok)
+ fi
+ 
++# Response file support.
++if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++  nm_file_list_spec='@'
++elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
++  nm_file_list_spec='@'
++fi
++
+ _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+     [Take the output of nm and produce a listing of raw symbols and C names])
+ _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+     [Transform the output of nm in a proper C declaration])
+ _LT_DECL([global_symbol_to_c_name_address],
+     [lt_cv_sys_global_symbol_to_c_name_address], [1],
+     [Transform the output of nm in a C name address pair])
+ _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+     [Transform the output of nm in a C name address pair when lib prefix is needed])
++_LT_DECL([], [nm_file_list_spec], [1],
++    [Specify filename containing input files for $NM])
+ ]) # _LT_CMD_GLOBAL_SYMBOLS
+ 
+ 
+ # _LT_COMPILER_PIC([TAGNAME])
+ # ---------------------------
+ m4_defun([_LT_COMPILER_PIC],
+ [m4_require([_LT_TAG_COMPILER])dnl
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ 
+-AC_MSG_CHECKING([for $compiler option to produce PIC])
+ m4_if([$1], [CXX], [
+   # C++ specific cases for pic, static, wl, etc.
+   if test "$GXX" = yes; then
+     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ 
+     case $host_os in
+     aix*)
+@@ -3592,16 +3926,21 @@ m4_if([$1], [CXX], [
+       # PIC is the default on this platform
+       # Common symbols not allowed in MH_DYLIB files
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+       ;;
+     *djgpp*)
+       # DJGPP does not support shared libraries at all
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+       ;;
++    haiku*)
++      # PIC is the default for Haiku.
++      # The "-static" flag exists, but is broken.
++      _LT_TAGVAR(lt_prog_compiler_static, $1)=
++      ;;
+     interix[[3-9]]*)
+       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+       # Instead, we relocate shared libraries at runtime.
+       ;;
+     sysv4*MP*)
+       if test -d /usr/nec; then
+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+       fi
+@@ -3641,16 +3980,22 @@ m4_if([$1], [CXX], [
+       chorus*)
+ 	case $cc_basename in
+ 	cxch68*)
+ 	  # Green Hills C++ Compiler
+ 	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ 	  ;;
+ 	esac
+ 	;;
++      mingw* | cygwin* | os2* | pw32* | cegcc*)
++	# This hack is so that the source file can tell whether it is being
++	# built for inclusion in a dll (and should export symbols for example).
++	m4_if([$1], [GCJ], [],
++	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
++	;;
+       dgux*)
+ 	case $cc_basename in
+ 	  ec++*)
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ 	    ;;
+ 	  ghcx*)
+ 	    # Green Hills C++ Compiler
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+@@ -3697,17 +4042,17 @@ m4_if([$1], [CXX], [
+ 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ 	    # CC pic flag -KPIC is the default.
+ 	    ;;
+ 	  *)
+ 	    ;;
+ 	esac
+ 	;;
+-      linux* | k*bsd*-gnu)
++      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ 	case $cc_basename in
+ 	  KCC*)
+ 	    # KAI C++ Compiler
+ 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ 	    ;;
+ 	  ecpc* )
+ 	    # old Intel C++ for x86_64 which still supported -KPIC.
+@@ -3730,18 +4075,18 @@ m4_if([$1], [CXX], [
+ 	    ;;
+ 	  cxx*)
+ 	    # Compaq C++
+ 	    # Make sure the PIC flag is empty.  It appears that all Alpha
+ 	    # Linux and Compaq Tru64 Unix objects are PIC.
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ 	    ;;
+-	  xlc* | xlC*)
+-	    # IBM XL 8.0 on PPC
++	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
++	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+ 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ 	    ;;
+ 	  *)
+ 	    case `$CC -V 2>&1 | sed 5q` in
+ 	    *Sun\ C*)
+ 	      # Sun C++ 5.9
+@@ -3793,17 +4138,17 @@ m4_if([$1], [CXX], [
+ 	  *)
+ 	    ;;
+ 	esac
+ 	;;
+       psos*)
+ 	;;
+       solaris*)
+ 	case $cc_basename in
+-	  CC*)
++	  CC* | sunCC*)
+ 	    # Sun C++ 4.2, 5.x and Centerline C++
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ 	    ;;
+ 	  gcx*)
+ 	    # Green Hills C++ Compiler
+ 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+@@ -3897,16 +4242,22 @@ m4_if([$1], [CXX], [
+       ;;
+ 
+     darwin* | rhapsody*)
+       # PIC is the default on this platform
+       # Common symbols not allowed in MH_DYLIB files
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+       ;;
+ 
++    haiku*)
++      # PIC is the default for Haiku.
++      # The "-static" flag exists, but is broken.
++      _LT_TAGVAR(lt_prog_compiler_static, $1)=
++      ;;
++
+     hpux*)
+       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+       # sets the default TLS model and affects inlining.
+       case $host_cpu in
+       hppa*64*)
+ 	# +Z the default
+ 	;;
+@@ -3939,16 +4290,25 @@ m4_if([$1], [CXX], [
+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+       fi
+       ;;
+ 
+     *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+     esac
++
++    case $cc_basename in
++    nvcc*) # Cuda Compiler Driver 2.2
++      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
++      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
++        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
++      fi
++      ;;
++    esac
+   else
+     # PORTME Check for flag to pass linker flags through the system compiler.
+     case $host_os in
+     aix*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       if test "$host_cpu" = ia64; then
+ 	# AIX 5 now supports IA64 processor
+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+@@ -3981,17 +4341,17 @@ m4_if([$1], [CXX], [
+       ;;
+ 
+     irix5* | irix6* | nonstopux*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       # PIC (with -KPIC) is the default.
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+       ;;
+ 
+-    linux* | k*bsd*-gnu)
++    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+       case $cc_basename in
+       # old Intel for x86_64 which still supported -KPIC.
+       ecc*)
+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+         ;;
+       # icc used to be incompatible with GCC.
+@@ -4002,47 +4362,68 @@ m4_if([$1], [CXX], [
+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+         ;;
+       # Lahey Fortran 8.1.
+       lf95*)
+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ 	;;
+-      pgcc* | pgf77* | pgf90* | pgf95*)
++      nagfor*)
++	# NAG Fortran compiler
++	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
++	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
++	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++	;;
++      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+         # Portland Group compilers (*not* the Pentium gcc compiler,
+ 	# which looks to be a dead project)
+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         ;;
+       ccc*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         # All Alpha code is PIC.
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+         ;;
+-      xl*)
+-	# IBM XL C 8.0/Fortran 10.1 on PPC
++      xl* | bgxl* | bgf* | mpixl*)
++	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ 	;;
+       *)
+ 	case `$CC -V 2>&1 | sed 5q` in
++	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
++	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
++	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
++	  ;;
++	*Sun\ F* | *Sun*Fortran*)
++	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
++	  ;;
+ 	*Sun\ C*)
+ 	  # Sun C 5.9
+ 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ 	  ;;
+-	*Sun\ F*)
+-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++        *Intel*\ [[CF]]*Compiler*)
++	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++	  ;;
++	*Portland\ Group*)
++	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ 	  ;;
+ 	esac
+ 	;;
+       esac
+       ;;
+ 
+     newsos6)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+@@ -4064,17 +4445,17 @@ m4_if([$1], [CXX], [
+     rdos*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+       ;;
+ 
+     solaris*)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       case $cc_basename in
+-      f77* | f90* | f95*)
++      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+       *)
+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+       esac
+       ;;
+ 
+     sunos4*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+@@ -4121,19 +4502,21 @@ case $host_os in
+   # For platforms which do not support PIC, -DPIC is meaningless:
+   *djgpp*)
+     _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     ;;
+   *)
+     _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+     ;;
+ esac
+-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+-	[How to pass a linker flag through the compiler])
++
++AC_CACHE_CHECK([for $compiler option to produce PIC],
++  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
++  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
++_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+ 
+ #
+ # Check to make sure the PIC flag actually works.
+ #
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+   _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+     [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+     [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+@@ -4142,16 +4525,18 @@ if test -n "$_LT_TAGVAR(lt_prog_compiler
+      *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+      esac],
+     [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+ fi
+ _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ 	[Additional compiler flags for building library objects])
+ 
++_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
++	[How to pass a linker flag through the compiler])
+ #
+ # Check to make sure the static flag actually works.
+ #
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+ _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+   _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+   $lt_tmp_static_flag,
+   [],
+@@ -4162,60 +4547,70 @@ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) 
+ 
+ 
+ # _LT_LINKER_SHLIBS([TAGNAME])
+ # ----------------------------
+ # See if the linker supports building shared libraries.
+ m4_defun([_LT_LINKER_SHLIBS],
+ [AC_REQUIRE([LT_PATH_LD])dnl
+ AC_REQUIRE([LT_PATH_NM])dnl
++m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+ m4_require([_LT_DECL_EGREP])dnl
+ m4_require([_LT_DECL_SED])dnl
+ m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+ m4_require([_LT_TAG_COMPILER])dnl
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ m4_if([$1], [CXX], [
+   _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+   case $host_os in
+   aix[[4-9]]*)
+     # If we're using GNU nm, then we don't want the "-C" option.
+     # -C means demangle to AIX nm, but means don't demangle with GNU nm
++    # Also, AIX nm treats weak defined symbols like other global defined
++    # symbols, whereas GNU nm marks them as "W".
+     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+     else
+       _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+     fi
+     ;;
+   pw32*)
+     _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+-  ;;
++    ;;
+   cygwin* | mingw* | cegcc*)
+-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+-  ;;
++    case $cc_basename in
++    cl*)
++      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
++      ;;
++    *)
++      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
++      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
++      ;;
++    esac
++    ;;
+   *)
+     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  ;;
++    ;;
+   esac
+-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ ], [
+   runpath_var=
+   _LT_TAGVAR(allow_undefined_flag, $1)=
+   _LT_TAGVAR(always_export_symbols, $1)=no
+   _LT_TAGVAR(archive_cmds, $1)=
+   _LT_TAGVAR(archive_expsym_cmds, $1)=
+   _LT_TAGVAR(compiler_needs_object, $1)=no
+   _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+   _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+   _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+   _LT_TAGVAR(hardcode_automatic, $1)=no
+   _LT_TAGVAR(hardcode_direct, $1)=no
+   _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+   _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+   _LT_TAGVAR(hardcode_libdir_separator, $1)=
+   _LT_TAGVAR(hardcode_minus_L, $1)=no
+   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+   _LT_TAGVAR(inherit_rpath, $1)=no
+   _LT_TAGVAR(link_all_deplibs, $1)=unknown
+   _LT_TAGVAR(module_cmds, $1)=
+   _LT_TAGVAR(module_expsym_cmds, $1)=
+   _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+@@ -4253,17 +4648,43 @@ dnl Note also adjust exclude_expsyms for
+     with_gnu_ld=yes
+     ;;
+   openbsd*)
+     with_gnu_ld=no
+     ;;
+   esac
+ 
+   _LT_TAGVAR(ld_shlibs, $1)=yes
++
++  # On some targets, GNU ld is compatible enough with the native linker
++  # that we're better off using the native interface for both.
++  lt_use_gnu_ld_interface=no
+   if test "$with_gnu_ld" = yes; then
++    case $host_os in
++      aix*)
++	# The AIX port of GNU ld has always aspired to compatibility
++	# with the native linker.  However, as the warning in the GNU ld
++	# block says, versions before 2.19.5* couldn't really create working
++	# shared libraries, regardless of the interface used.
++	case `$LD -v 2>&1` in
++	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
++	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
++	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
++	  *)
++	    lt_use_gnu_ld_interface=yes
++	    ;;
++	esac
++	;;
++      *)
++	lt_use_gnu_ld_interface=yes
++	;;
++    esac
++  fi
++
++  if test "$lt_use_gnu_ld_interface" = yes; then
+     # If archive_cmds runs LD, not CC, wlarc should be empty
+     wlarc='${wl}'
+ 
+     # Set some defaults for GNU ld with shared library support. These
+     # are reset later if shared libraries are not supported. Putting them
+     # here allows them to be overridden if necessary.
+     runpath_var=LD_RUN_PATH
+     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+@@ -4271,36 +4692,38 @@ dnl Note also adjust exclude_expsyms for
+     # ancient GNU ld didn't support --whole-archive et. al.
+     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+       _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+     else
+       _LT_TAGVAR(whole_archive_flag_spec, $1)=
+     fi
+     supports_anon_versioning=no
+     case `$LD -v 2>&1` in
++      *GNU\ gold*) supports_anon_versioning=yes ;;
+       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+       *\ 2.11.*) ;; # other 2.11 versions
+       *) supports_anon_versioning=yes ;;
+     esac
+ 
+     # See if GNU ld supports shared libraries.
+     case $host_os in
+     aix[[3-9]]*)
+       # On AIX/PPC, the GNU linker is very broken
+       if test "$host_cpu" != ia64; then
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+ 	cat <<_LT_EOF 1>&2
+ 
+-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
++*** Warning: the GNU linker, at least up to release 2.19, is reported
+ *** to be unable to reliably create shared libraries on AIX.
+ *** Therefore, libtool is disabling shared libraries support.  If you
+-*** really care for shared libraries, you may want to modify your PATH
+-*** so that a non-GNU linker is found, and then restart.
++*** really care for shared libraries, you may want to install binutils
++*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
++*** You will then need to restart the configuration process.
+ 
+ _LT_EOF
+       fi
+       ;;
+ 
+     amigaos*)
+       case $host_cpu in
+       powerpc)
+@@ -4326,20 +4749,22 @@ dnl Note also adjust exclude_expsyms for
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+ 
+     cygwin* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+       # as there is no search path for DLLs.
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       _LT_TAGVAR(always_export_symbols, $1)=no
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
++      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
++      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ 
+       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ 	# If the export-symbols file already is a .def file (1st line
+ 	# is EXPORTS), use it as is; otherwise, prepend...
+ 	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ 	  cp $export_symbols $output_objdir/$soname.def;
+ 	else
+@@ -4347,108 +4772,117 @@ dnl Note also adjust exclude_expsyms for
+ 	  cat $export_symbols >> $output_objdir/$soname.def;
+ 	fi~
+ 	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       else
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+ 
++    haiku*)
++      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++      _LT_TAGVAR(link_all_deplibs, $1)=yes
++      ;;
++
+     interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+ 
+-    gnu* | linux* | tpf* | k*bsd*-gnu)
++    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+       tmp_diet=no
+       if test "$host_os" = linux-dietlibc; then
+ 	case $cc_basename in
+ 	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+ 	esac
+       fi
+       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ 	 && test "$tmp_diet" = no
+       then
+-	tmp_addflag=
++	tmp_addflag=' $pic_flag'
+ 	tmp_sharedflag='-shared'
+ 	case $cc_basename,$host_cpu in
+         pgcc*)				# Portland Group C compiler
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	  tmp_addflag=' $pic_flag'
+ 	  ;;
+-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	pgf77* | pgf90* | pgf95* | pgfortran*)
++					# Portland Group f77 and f90 compilers
++	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	  tmp_addflag=' $pic_flag -Mnomain' ;;
+ 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+ 	  tmp_addflag=' -i_dynamic' ;;
+ 	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+ 	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+ 	ifc* | ifort*)			# Intel Fortran compiler
+ 	  tmp_addflag=' -nofor_main' ;;
+ 	lf95*)				# Lahey Fortran 8.1
+ 	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ 	  tmp_sharedflag='--shared' ;;
+-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
++	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ 	  tmp_sharedflag='-qmkshrobj'
+ 	  tmp_addflag= ;;
++	nvcc*)	# Cuda Compiler Driver 2.2
++	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++	  _LT_TAGVAR(compiler_needs_object, $1)=yes
++	  ;;
+ 	esac
+ 	case `$CC -V 2>&1 | sed 5q` in
+ 	*Sun\ C*)			# Sun C 5.9
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+ 	  tmp_sharedflag='-G' ;;
+ 	*Sun\ F*)			# Sun Fortran 8.3
+ 	  tmp_sharedflag='-G' ;;
+ 	esac
+ 	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ 
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ 	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ 	    echo "local: *; };" >> $output_objdir/$libname.ver~
+ 	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+         fi
+ 
+ 	case $cc_basename in
+-	xlf*)
++	xlf* | bgf* | bgxlf* | mpixlf*)
+ 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ 	  if test "x$supports_anon_versioning" = xyes; then
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ 	      echo "local: *; };" >> $output_objdir/$libname.ver~
+-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ 	  fi
+ 	  ;;
+ 	esac
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+ 
+     netbsd*)
+       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ 	wlarc=
+       else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       fi
+       ;;
+ 
+     solaris*)
+       if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+ 	cat <<_LT_EOF 1>&2
+ 
+@@ -4456,18 +4890,18 @@ dnl Note also adjust exclude_expsyms for
+ *** create shared libraries on Solaris systems.  Therefore, libtool
+ *** is disabling shared libraries support.  We urge you to upgrade GNU
+ *** binutils to release 2.9.1 or newer.  Another option is to modify
+ *** your PATH or compiler configuration so that the native linker is
+ *** used, and then restart.
+ 
+ _LT_EOF
+       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       else
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+ 
+     sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+       case `$LD -v 2>&1` in
+         *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+@@ -4503,18 +4937,18 @@ dnl Note also adjust exclude_expsyms for
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+       wlarc=
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       ;;
+ 
+     *)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       else
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+     esac
+ 
+     if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+       runpath_var=
+@@ -4544,18 +4978,20 @@ dnl Note also adjust exclude_expsyms for
+ 	# On IA64, the linker does run time linking by default, so we don't
+ 	# have to do anything special.
+ 	aix_use_runtimelinking=no
+ 	exp_sym_flag='-Bexport'
+ 	no_entry_flag=""
+       else
+ 	# If we're using GNU nm, then we don't want the "-C" option.
+ 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
++	# Also, AIX nm treats weak defined symbols like other global
++	# defined symbols, whereas GNU nm marks them as "W".
+ 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ 	else
+ 	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ 	fi
+ 	aix_use_runtimelinking=no
+ 
+ 	# Test if we are trying to use run time linking or normal
+ 	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ 	# need to do runtime linking.
+@@ -4632,35 +5068,40 @@ dnl Note also adjust exclude_expsyms for
+       # underscore (_), so it is better to generate a list of symbols to export.
+       _LT_TAGVAR(always_export_symbols, $1)=yes
+       if test "$aix_use_runtimelinking" = yes; then
+ 	# Warning - without using the other runtime loading flags (-brtl),
+ 	# -berok will link without error, but may produce a broken library.
+ 	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+         # Determine the default libpath from the value encoded in an
+         # empty executable.
+-        _LT_SYS_MODULE_PATH_AIX
++        _LT_SYS_MODULE_PATH_AIX([$1])
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
++        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+ 	if test "$host_cpu" = ia64; then
+ 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ 	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ 	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ 	else
+ 	 # Determine the default libpath from the value encoded in an
+ 	 # empty executable.
+-	 _LT_SYS_MODULE_PATH_AIX
++	 _LT_SYS_MODULE_PATH_AIX([$1])
+ 	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ 	  # Warning - without using the other run time loading flags,
+ 	  # -berok will link without error, but may produce a broken library.
+ 	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ 	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+-	  # Exported symbols can be pulled into shared objects from archives
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++	  if test "$with_gnu_ld" = yes; then
++	    # We only use this code for GNU lds that support --whole-archive.
++	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
++	  else
++	    # Exported symbols can be pulled into shared objects from archives
++	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++	  fi
+ 	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ 	  # This is similar to how AIX traditionally builds its shared libraries.
+ 	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ 	fi
+       fi
+       ;;
+ 
+     amigaos*)
+@@ -4682,131 +5123,177 @@ dnl Note also adjust exclude_expsyms for
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+       ;;
+ 
+     cygwin* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+       # no search path for DLLs.
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      # Tell ltmain to make .lib files, not .a files.
+-      libext=lib
+-      # Tell ltmain to make .dll files, not .so files.
+-      shrext_cmds=".dll"
+-      # FIXME: Setting linknames here is a bad hack.
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+-      # The linker will automatically build a .lib file if we build a DLL.
+-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+-      # FIXME: Should let the user specify the lib program.
+-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++      case $cc_basename in
++      cl*)
++	# Native MSVC
++	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++	_LT_TAGVAR(always_export_symbols, $1)=yes
++	_LT_TAGVAR(file_list_spec, $1)='@'
++	# Tell ltmain to make .lib files, not .a files.
++	libext=lib
++	# Tell ltmain to make .dll files, not .so files.
++	shrext_cmds=".dll"
++	# FIXME: Setting linknames here is a bad hack.
++	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++	  else
++	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++	  fi~
++	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++	  linknames='
++	# The linker will not automatically build a static lib if we build a DLL.
++	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
++	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
++	# Don't use ranlib
++	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
++	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
++	  lt_tool_outputfile="@TOOL_OUTPUT@"~
++	  case $lt_outputfile in
++	    *.exe|*.EXE) ;;
++	    *)
++	      lt_outputfile="$lt_outputfile.exe"
++	      lt_tool_outputfile="$lt_tool_outputfile.exe"
++	      ;;
++	  esac~
++	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++	    $RM "$lt_outputfile.manifest";
++	  fi'
++	;;
++      *)
++	# Assume MSVC wrapper
++	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++	# Tell ltmain to make .lib files, not .a files.
++	libext=lib
++	# Tell ltmain to make .dll files, not .so files.
++	shrext_cmds=".dll"
++	# FIXME: Setting linknames here is a bad hack.
++	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
++	# The linker will automatically build a .lib file if we build a DLL.
++	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++	# FIXME: Should let the user specify the lib program.
++	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
++	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++	;;
++      esac
+       ;;
+ 
+     darwin* | rhapsody*)
+       _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+ 
+     dgux*)
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       ;;
+ 
+-    freebsd1*)
+-      _LT_TAGVAR(ld_shlibs, $1)=no
+-      ;;
+-
+     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+     # support.  Future versions do this automatically, but an explicit c++rt0.o
+     # does not break anything, and helps significantly (at the cost of a little
+     # extra space).
+     freebsd2.2*)
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       ;;
+ 
+     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+-    freebsd2*)
++    freebsd2.*)
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       ;;
+ 
+     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+     freebsd* | dragonfly*)
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       ;;
+ 
+     hpux9*)
+       if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       else
+ 	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       fi
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+ 
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       ;;
+ 
+     hpux10*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+       else
+ 	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+       fi
+       if test "$with_gnu_ld" = no; then
+ 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ 	_LT_TAGVAR(hardcode_direct, $1)=yes
+ 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ 	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ 	# hardcode_minus_L: Not really in the search PATH,
+ 	# but as the default location of the library.
+ 	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+       fi
+       ;;
+ 
+     hpux11*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
++      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ 	case $host_cpu in
+ 	hppa*64*)
+ 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	ia64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	esac
+       else
+ 	case $host_cpu in
+ 	hppa*64*)
+ 	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	ia64*)
+ 	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ 	  ;;
+ 	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++	m4_if($1, [], [
++	  # Older versions of the 11.00 compiler do not understand -b yet
++	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
++	  _LT_LINKER_OPTION([if $CC understands -b],
++	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
++	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
++	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
++	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ 	  ;;
+ 	esac
+       fi
+       if test "$with_gnu_ld" = no; then
+ 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ 
+ 	case $host_cpu in
+@@ -4824,29 +5311,44 @@ dnl Note also adjust exclude_expsyms for
+ 	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ 	  ;;
+ 	esac
+       fi
+       ;;
+ 
+     irix5* | irix6* | nonstopux*)
+       if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 	# Try to use the -exported_symbol ld option, if it does not
+ 	# work, assume that -exports_file does not work either and
+ 	# implicitly export all symbols.
+-        save_LDFLAGS="$LDFLAGS"
+-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+-        AC_LINK_IFELSE(int foo(void) {},
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-        )
+-        LDFLAGS="$save_LDFLAGS"
++	# This should be the same for all languages, so no per-tag cache variable.
++	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
++	  [lt_cv_irix_exported_symbol],
++	  [save_LDFLAGS="$LDFLAGS"
++	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++	   AC_LINK_IFELSE(
++	     [AC_LANG_SOURCE(
++	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
++			      [C++], [[int foo (void) { return 0; }]],
++			      [Fortran 77], [[
++      subroutine foo
++      end]],
++			      [Fortran], [[
++      subroutine foo
++      end]])])],
++	      [lt_cv_irix_exported_symbol=yes],
++	      [lt_cv_irix_exported_symbol=no])
++           LDFLAGS="$save_LDFLAGS"])
++	if test "$lt_cv_irix_exported_symbol" = yes; then
++          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++	fi
+       else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
++	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       fi
+       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(inherit_rpath, $1)=yes
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       ;;
+ 
+@@ -4898,58 +5400,58 @@ dnl Note also adjust exclude_expsyms for
+ 	_LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+ 
+     os2*)
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
++      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+       _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+       ;;
+ 
+     osf3*)
+       if test "$GCC" = yes; then
+ 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       else
+ 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       fi
+       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       ;;
+ 
+     osf4* | osf5*)	# as osf3* with the addition of -msym flag
+       if test "$GCC" = yes; then
+ 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+       else
+ 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ 	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
++	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+ 
+ 	# Both c and cxx compiler support -rpath directly
+ 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+       fi
+       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       ;;
+ 
+     solaris*)
+       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+       if test "$GCC" = yes; then
+ 	wlarc='${wl}'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+       else
+ 	case `$CC -V 2>&1` in
+ 	*"Compilers 5.0"*)
+ 	  wlarc=''
+ 	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ 	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ 	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ 	  ;;
+@@ -5115,46 +5617,48 @@ x|xyes)
+     case $_LT_TAGVAR(archive_cmds, $1) in
+     *'~'*)
+       # FIXME: we may have to deal with multi-command sequences.
+       ;;
+     '$CC '*)
+       # Test whether the compiler implicitly links with -lc since on some
+       # systems, -lgcc has to come before -lc. If gcc already passes -lc
+       # to ld, don't add -lc before -lgcc.
+-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+-      $RM conftest*
+-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+-        soname=conftest
+-        lib=conftest
+-        libobjs=conftest.$ac_objext
+-        deplibs=
+-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+-        compiler_flags=-v
+-        linker_flags=-v
+-        verstring=
+-        output_objdir=.
+-        libname=conftest
+-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+-        _LT_TAGVAR(allow_undefined_flag, $1)=
+-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+-        then
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-        else
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-        fi
+-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+-      else
+-        cat conftest.err 1>&5
+-      fi
+-      $RM conftest*
+-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
++      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
++	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
++	[$RM conftest*
++	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
++	  soname=conftest
++	  lib=conftest
++	  libobjs=conftest.$ac_objext
++	  deplibs=
++	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
++	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
++	  compiler_flags=-v
++	  linker_flags=-v
++	  verstring=
++	  output_objdir=.
++	  libname=conftest
++	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
++	  _LT_TAGVAR(allow_undefined_flag, $1)=
++	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
++	  then
++	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
++	  else
++	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
++	  fi
++	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
++	else
++	  cat conftest.err 1>&5
++	fi
++	$RM conftest*
++	])
++      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+       ;;
+     esac
+   fi
+   ;;
+ esac
+ 
+ _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+     [Whether or not to add -lc for building shared libraries])
+@@ -5181,19 +5685,16 @@ esac
+     [Whether we are building with GNU ld or not])
+ _LT_TAGDECL([], [allow_undefined_flag], [1],
+     [Flag that allows shared libraries with undefined symbols to be built])
+ _LT_TAGDECL([], [no_undefined_flag], [1],
+     [Flag that enforces no undefined symbols])
+ _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+     [Flag to hardcode $libdir into a binary during linking.
+     This must work even if $libdir does not exist])
+-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+-    [[If ld is used when linking, flag to hardcode $libdir into a binary
+-    during linking.  This must work even if $libdir does not exist]])
+ _LT_TAGDECL([], [hardcode_libdir_separator], [1],
+     [Whether we need a single "-rpath" flag with a separated argument])
+ _LT_TAGDECL([], [hardcode_direct], [0],
+     [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+     DIR into the resulting binary])
+ _LT_TAGDECL([], [hardcode_direct_absolute], [0],
+     [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+     DIR into the resulting binary and the resulting library dependency is
+@@ -5209,28 +5710,28 @@ esac
+     [Set to "yes" if building a shared library automatically hardcodes DIR
+     into the library and all subsequent libraries and executables linked
+     against it])
+ _LT_TAGDECL([], [inherit_rpath], [0],
+     [Set to yes if linker adds runtime paths of dependent libraries
+     to runtime path list])
+ _LT_TAGDECL([], [link_all_deplibs], [0],
+     [Whether libtool must link a program against all its dependency libraries])
+-_LT_TAGDECL([], [fix_srcfile_path], [1],
+-    [Fix the shell variable $srcfile for the compiler])
+ _LT_TAGDECL([], [always_export_symbols], [0],
+     [Set to "yes" if exported symbols are required])
+ _LT_TAGDECL([], [export_symbols_cmds], [2],
+     [The commands to list exported symbols])
+ _LT_TAGDECL([], [exclude_expsyms], [1],
+     [Symbols that should not be listed in the preloaded symbols])
+ _LT_TAGDECL([], [include_expsyms], [1],
+     [Symbols that must always be exported])
+ _LT_TAGDECL([], [prelink_cmds], [2],
+     [Commands necessary for linking programs (against libraries) with templates])
++_LT_TAGDECL([], [postlink_cmds], [2],
++    [Commands necessary for finishing linking programs])
+ _LT_TAGDECL([], [file_list_spec], [1],
+     [Specify filename containing input files])
+ dnl FIXME: Not yet implemented
+ dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+ dnl    [Compiler flag to generate thread safe objects])
+ ])# _LT_LINKER_SHLIBS
+ 
+ 
+@@ -5314,68 +5815,54 @@ if test -n "$compiler"; then
+ 
+   _LT_CONFIG($1)
+ fi
+ AC_LANG_POP
+ CC="$lt_save_CC"
+ ])# _LT_LANG_C_CONFIG
+ 
+ 
+-# _LT_PROG_CXX
+-# ------------
+-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+-# compiler, we have our own version here.
+-m4_defun([_LT_PROG_CXX],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+-AC_PROG_CXX
++# _LT_LANG_CXX_CONFIG([TAG])
++# --------------------------
++# Ensure that the configuration variables for a C++ compiler are suitably
++# defined.  These variables are subsequently used by _LT_CONFIG to write
++# the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_CXX_CONFIG],
++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_EGREP])dnl
++m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+     ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+     (test "X$CXX" != "Xg++"))) ; then
+   AC_PROG_CXXCPP
+ else
+   _lt_caught_CXX_error=yes
+ fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_CXX
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_CXX], [])
+-
+-
+-# _LT_LANG_CXX_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for a C++ compiler are suitably
+-# defined.  These variables are subsequently used by _LT_CONFIG to write
+-# the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_CXX_CONFIG],
+-[AC_REQUIRE([_LT_PROG_CXX])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+ 
+ AC_LANG_PUSH(C++)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(reload_flag, $1)=$reload_flag
++_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+ _LT_TAGVAR(no_undefined_flag, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ 
+ # Source file extension for C++ test sources.
+ ac_ext=cpp
+ 
+ # Object file extension for compiled C++ test sources.
+@@ -5397,16 +5884,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+   _LT_TAG_COMPILER
+ 
+   # save warnings/boilerplate of simple test code
+   _LT_COMPILER_BOILERPLATE
+   _LT_LINKER_BOILERPLATE
+ 
+   # Allow CC to be a program name with arguments.
+   lt_save_CC=$CC
++  lt_save_CFLAGS=$CFLAGS
+   lt_save_LD=$LD
+   lt_save_GCC=$GCC
+   GCC=$GXX
+   lt_save_with_gnu_ld=$with_gnu_ld
+   lt_save_path_LD=$lt_cv_path_LD
+   if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+     lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+   else
+@@ -5414,16 +5902,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+   fi
+   if test -n "${lt_cv_path_LDCXX+set}"; then
+     lt_cv_path_LD=$lt_cv_path_LDCXX
+   else
+     $as_unset lt_cv_path_LD
+   fi
+   test -z "${LDCXX+set}" || LD=$LDCXX
+   CC=${CXX-"c++"}
++  CFLAGS=$CXXFLAGS
+   compiler=$CC
+   _LT_TAGVAR(compiler, $1)=$CC
+   _LT_CC_BASENAME([$compiler])
+ 
+   if test -n "$compiler"; then
+     # We don't want -fno-exception when compiling C++ code, so set the
+     # no_builtin_flag separately
+     if test "$GXX" = yes; then
+@@ -5435,18 +5924,18 @@ if test "$_lt_caught_CXX_error" != yes; 
+     if test "$GXX" = yes; then
+       # Set up default GNU C++ configuration
+ 
+       LT_PATH_LD
+ 
+       # Check if GNU C++ uses GNU ld as the underlying linker, since the
+       # archiving commands below assume that GNU ld is being used.
+       if test "$with_gnu_ld" = yes; then
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
++        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ 
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ 
+         # If archive_cmds runs LD, not CC, wlarc should be empty
+         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+         #     investigate it a little bit more. (MM)
+         wlarc='${wl}'
+@@ -5468,17 +5957,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+         # overridden to take advantage of the native linker features on
+         # the platform it is being used on.
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+       fi
+ 
+       # Commands to make compiler produce verbose output that lists
+       # what "hidden" libraries, object files and flags are used when
+       # linking a shared library.
+-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ 
+     else
+       GXX=no
+       with_gnu_ld=no
+       wlarc=
+     fi
+ 
+     # PORTME: fill in a description of your system's C++ link characteristics
+@@ -5577,36 +6066,41 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	# export.
+         _LT_TAGVAR(always_export_symbols, $1)=yes
+         if test "$aix_use_runtimelinking" = yes; then
+           # Warning - without using the other runtime loading flags (-brtl),
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+           # Determine the default libpath from the value encoded in an empty
+           # executable.
+-          _LT_SYS_MODULE_PATH_AIX
++          _LT_SYS_MODULE_PATH_AIX([$1])
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ 
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
++          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+         else
+           if test "$host_cpu" = ia64; then
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ 	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+           else
+ 	    # Determine the default libpath from the value encoded in an
+ 	    # empty executable.
+-	    _LT_SYS_MODULE_PATH_AIX
++	    _LT_SYS_MODULE_PATH_AIX([$1])
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ 	    # Warning - without using the other run time loading flags,
+ 	    # -berok will link without error, but may produce a broken library.
+ 	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ 	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+-	    # Exported symbols can be pulled into shared objects from archives
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++	    if test "$with_gnu_ld" = yes; then
++	      # We only use this code for GNU lds that support --whole-archive.
++	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
++	    else
++	      # Exported symbols can be pulled into shared objects from archives
++	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++	    fi
+ 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ 	    # This is similar to how AIX traditionally builds its shared
+ 	    # libraries.
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+           fi
+         fi
+         ;;
+ 
+@@ -5626,38 +6120,85 @@ if test "$_lt_caught_CXX_error" != yes; 
+           *)
+ 	  # FIXME: insert proper C++ library support
+ 	  _LT_TAGVAR(ld_shlibs, $1)=no
+ 	  ;;
+         esac
+         ;;
+ 
+       cygwin* | mingw* | pw32* | cegcc*)
+-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+-        # as there is no search path for DLLs.
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-        _LT_TAGVAR(always_export_symbols, $1)=no
+-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-
+-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-          # If the export-symbols file already is a .def file (1st line
+-          # is EXPORTS), use it as is; otherwise, prepend...
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+-	    cp $export_symbols $output_objdir/$soname.def;
+-          else
+-	    echo EXPORTS > $output_objdir/$soname.def;
+-	    cat $export_symbols >> $output_objdir/$soname.def;
+-          fi~
+-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-        else
+-          _LT_TAGVAR(ld_shlibs, $1)=no
+-        fi
+-        ;;
++	case $GXX,$cc_basename in
++	,cl* | no,cl*)
++	  # Native MSVC
++	  # hardcode_libdir_flag_spec is actually meaningless, as there is
++	  # no search path for DLLs.
++	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++	  _LT_TAGVAR(always_export_symbols, $1)=yes
++	  _LT_TAGVAR(file_list_spec, $1)='@'
++	  # Tell ltmain to make .lib files, not .a files.
++	  libext=lib
++	  # Tell ltmain to make .dll files, not .so files.
++	  shrext_cmds=".dll"
++	  # FIXME: Setting linknames here is a bad hack.
++	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
++	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
++	    else
++	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
++	    fi~
++	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
++	    linknames='
++	  # The linker will not automatically build a static lib if we build a DLL.
++	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++	  # Don't use ranlib
++	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
++	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
++	    lt_tool_outputfile="@TOOL_OUTPUT@"~
++	    case $lt_outputfile in
++	      *.exe|*.EXE) ;;
++	      *)
++		lt_outputfile="$lt_outputfile.exe"
++		lt_tool_outputfile="$lt_tool_outputfile.exe"
++		;;
++	    esac~
++	    func_to_tool_file "$lt_outputfile"~
++	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
++	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
++	      $RM "$lt_outputfile.manifest";
++	    fi'
++	  ;;
++	*)
++	  # g++
++	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
++	  # as there is no search path for DLLs.
++	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
++	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++	  _LT_TAGVAR(always_export_symbols, $1)=no
++	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++
++	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++	    # If the export-symbols file already is a .def file (1st line
++	    # is EXPORTS), use it as is; otherwise, prepend...
++	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++	      cp $export_symbols $output_objdir/$soname.def;
++	    else
++	      echo EXPORTS > $output_objdir/$soname.def;
++	      cat $export_symbols >> $output_objdir/$soname.def;
++	    fi~
++	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++	  else
++	    _LT_TAGVAR(ld_shlibs, $1)=no
++	  fi
++	  ;;
++	esac
++	;;
+       darwin* | rhapsody*)
+         _LT_DARWIN_LINKER_FEATURES($1)
+ 	;;
+ 
+       dgux*)
+         case $cc_basename in
+           ec++*)
+ 	    # FIXME: insert proper C++ library support
+@@ -5670,17 +6211,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    ;;
+           *)
+ 	    # FIXME: insert proper C++ library support
+ 	    _LT_TAGVAR(ld_shlibs, $1)=no
+ 	    ;;
+         esac
+         ;;
+ 
+-      freebsd[[12]]*)
++      freebsd2.*)
+         # C++ shared libraries reported to be fairly broken before
+ 	# switch to ELF
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+ 
+       freebsd-elf*)
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+         ;;
+@@ -5689,16 +6230,21 @@ if test "$_lt_caught_CXX_error" != yes; 
+         # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+         # conventions
+         _LT_TAGVAR(ld_shlibs, $1)=yes
+         ;;
+ 
+       gnu*)
+         ;;
+ 
++      haiku*)
++        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++        _LT_TAGVAR(link_all_deplibs, $1)=yes
++        ;;
++
+       hpux9*)
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ 				             # but as the default
+ 				             # location of the library.
+@@ -5713,21 +6259,21 @@ if test "$_lt_caught_CXX_error" != yes; 
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             #
+             # There doesn't appear to be a way to prevent this compiler from
+             # explicitly linking system object files so we need to strip them
+             # from the output so that they don't get included in the library
+             # dependencies.
+-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+             ;;
+           *)
+             if test "$GXX" = yes; then
+-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+             else
+               # FIXME: insert proper C++ library support
+               _LT_TAGVAR(ld_shlibs, $1)=no
+             fi
+             ;;
+         esac
+         ;;
+ 
+@@ -5778,30 +6324,30 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    # Commands to make compiler produce verbose output that lists
+ 	    # what "hidden" libraries, object files and flags are used when
+ 	    # linking a shared library.
+ 	    #
+ 	    # There doesn't appear to be a way to prevent this compiler from
+ 	    # explicitly linking system object files so we need to strip them
+ 	    # from the output so that they don't get included in the library
+ 	    # dependencies.
+-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ 	    ;;
+           *)
+ 	    if test "$GXX" = yes; then
+ 	      if test $with_gnu_ld = no; then
+ 	        case $host_cpu in
+ 	          hppa*64*)
+ 	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ 	            ;;
+ 	          ia64*)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ 	            ;;
+ 	          *)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ 	            ;;
+ 	        esac
+ 	      fi
+ 	    else
+ 	      # FIXME: insert proper C++ library support
+ 	      _LT_TAGVAR(ld_shlibs, $1)=no
+ 	    fi
+ 	    ;;
+@@ -5821,41 +6367,41 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+ 	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ 	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ 	;;
+       irix5* | irix6*)
+         case $cc_basename in
+           CC*)
+ 	    # SGI C++
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ 
+ 	    # Archives containing C++ object files must be created using
+ 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+ 	    # necessary to make sure instantiated templates are included
+ 	    # in the archive.
+ 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ 	    ;;
+           *)
+ 	    if test "$GXX" = yes; then
+ 	      if test "$with_gnu_ld" = no; then
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 	      else
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
++	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ 	      fi
+ 	    fi
+ 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+ 	    ;;
+         esac
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+         _LT_TAGVAR(inherit_rpath, $1)=yes
+         ;;
+ 
+-      linux* | k*bsd*-gnu)
++      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+         case $cc_basename in
+           KCC*)
+ 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+ 
+ 	    # KCC will only create a shared library if the output file
+ 	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ 	    # to its proper name (with version) after linking.
+ 	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+@@ -5863,17 +6409,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    # Commands to make compiler produce verbose output that lists
+ 	    # what "hidden" libraries, object files and flags are used when
+ 	    # linking a shared library.
+ 	    #
+ 	    # There doesn't appear to be a way to prevent this compiler from
+ 	    # explicitly linking system object files so we need to strip them
+ 	    # from the output so that they don't get included in the library
+ 	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ 
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ 
+ 	    # Archives containing C++ object files must be created using
+ 	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ 	    ;;
+@@ -5900,44 +6446,44 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ 	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ 	    ;;
+           pgCC* | pgcpp*)
+             # Portland Group C++ compiler
+ 	    case `$CC -V` in
+-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
++	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ 	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ 		rm -rf $tpldir~
+ 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
++		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ 	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ 		rm -rf $tpldir~
+ 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
++		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ 		$RANLIB $oldlib'
+ 	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ 		rm -rf $tpldir~
+ 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
++		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ 	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ 		rm -rf $tpldir~
+ 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
++		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ 	      ;;
+-	    *) # Version 6 will use weak symbols
++	    *) # Version 6 and above use weak symbols
+ 	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ 	      ;;
+ 	    esac
+ 
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+             ;;
+ 	  cxx*)
+ 	    # Compaq C++
+ 	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+ 
+ 	    runpath_var=LD_RUN_PATH
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+@@ -5946,19 +6492,19 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    # Commands to make compiler produce verbose output that lists
+ 	    # what "hidden" libraries, object files and flags are used when
+ 	    # linking a shared library.
+ 	    #
+ 	    # There doesn't appear to be a way to prevent this compiler from
+ 	    # explicitly linking system object files so we need to strip them
+ 	    # from the output so that they don't get included in the library
+ 	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ 	    ;;
+-	  xl*)
++	  xl* | mpixl* | bgxl*)
+ 	    # IBM XL 8.0 on PPC, with GNU ld
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ 	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ 	    if test "x$supports_anon_versioning" = xyes; then
+ 	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ 		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ 		echo "local: *; };" >> $output_objdir/$libname.ver~
+@@ -5968,23 +6514,23 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	  *)
+ 	    case `$CC -V 2>&1 | sed 5q` in
+ 	    *Sun\ C*)
+ 	      # Sun C++ 5.9
+ 	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ 	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ 	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+ 
+ 	      # Not sure whether something based on
+ 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ 	      # would be better.
+-	      output_verbose_link_cmd='echo'
++	      output_verbose_link_cmd='func_echo_all'
+ 
+ 	      # Archives containing C++ object files must be created using
+ 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+ 	      # necessary to make sure instantiated templates are included
+ 	      # in the archive.
+ 	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ 	      ;;
+ 	    esac
+@@ -6043,17 +6589,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ 	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ 	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ 	  fi
+-	  output_verbose_link_cmd=echo
++	  output_verbose_link_cmd=func_echo_all
+ 	else
+ 	  _LT_TAGVAR(ld_shlibs, $1)=no
+ 	fi
+ 	;;
+ 
+       osf3* | osf4* | osf5*)
+         case $cc_basename in
+           KCC*)
+@@ -6078,61 +6624,61 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    # Rational C++ 2.4.1
+ 	    # FIXME: insert proper C++ library support
+ 	    _LT_TAGVAR(ld_shlibs, $1)=no
+ 	    ;;
+           cxx*)
+ 	    case $host in
+ 	      osf3*)
+ 	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ 		;;
+ 	      *)
+ 	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ 	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ 	          echo "-hidden">> $lib.exp~
+-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
++	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ 	          $RM $lib.exp'
+ 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ 		;;
+ 	    esac
+ 
+ 	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ 
+ 	    # Commands to make compiler produce verbose output that lists
+ 	    # what "hidden" libraries, object files and flags are used when
+ 	    # linking a shared library.
+ 	    #
+ 	    # There doesn't appear to be a way to prevent this compiler from
+ 	    # explicitly linking system object files so we need to strip them
+ 	    # from the output so that they don't get included in the library
+ 	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ 	    ;;
+ 	  *)
+ 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ 	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ 	      case $host in
+ 	        osf3*)
+-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 		  ;;
+ 	        *)
+-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 		  ;;
+ 	      esac
+ 
+ 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ 	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ 
+ 	      # Commands to make compiler produce verbose output that lists
+ 	      # what "hidden" libraries, object files and flags are used when
+ 	      # linking a shared library.
+-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ 
+ 	    else
+ 	      # FIXME: insert proper C++ library support
+ 	      _LT_TAGVAR(ld_shlibs, $1)=no
+ 	    fi
+ 	    ;;
+         esac
+         ;;
+@@ -6158,17 +6704,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    # FIXME: insert proper C++ library support
+ 	    _LT_TAGVAR(ld_shlibs, $1)=no
+ 	    ;;
+         esac
+         ;;
+ 
+       solaris*)
+         case $cc_basename in
+-          CC*)
++          CC* | sunCC*)
+ 	    # Sun C++ 4.2, 5.x and Centerline C++
+             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ 	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ 	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ 	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+ 
+ 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+@@ -6179,17 +6725,17 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 		# The compiler driver will combine and reorder linker options,
+ 		# but understands `-z linker_flag'.
+ 	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+ 		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ 	        ;;
+ 	    esac
+ 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+ 
+-	    output_verbose_link_cmd='echo'
++	    output_verbose_link_cmd='func_echo_all'
+ 
+ 	    # Archives containing C++ object files must be created using
+ 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+ 	    # necessary to make sure instantiated templates are included
+ 	    # in the archive.
+ 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ 	    ;;
+           gcx*)
+@@ -6199,35 +6745,35 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	    # The C++ compiler must be used to create the archive.
+ 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ 	    ;;
+           *)
+ 	    # GNU C++ compiler with Solaris linker
+ 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ 	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+ 
+ 	        # Commands to make compiler produce verbose output that lists
+ 	        # what "hidden" libraries, object files and flags are used when
+ 	        # linking a shared library.
+-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ 	      else
+ 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ 	        # platform.
+ 	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ 		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+ 
+ 	        # Commands to make compiler produce verbose output that lists
+ 	        # what "hidden" libraries, object files and flags are used when
+ 	        # linking a shared library.
+-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ 	      fi
+ 
+ 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ 	      case $host_os in
+ 		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ 		*)
+ 		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ 		  ;;
+@@ -6271,16 +6817,20 @@ if test "$_lt_caught_CXX_error" != yes; 
+ 	_LT_TAGVAR(link_all_deplibs, $1)=yes
+ 	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ 	runpath_var='LD_RUN_PATH'
+ 
+ 	case $cc_basename in
+           CC*)
+ 	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
++	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
++	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
++	      '"$_LT_TAGVAR(reload_cmds, $1)"
+ 	    ;;
+ 	  *)
+ 	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 	    ;;
+ 	esac
+       ;;
+ 
+@@ -6326,38 +6876,63 @@ if test "$_lt_caught_CXX_error" != yes; 
+     _LT_LINKER_SHLIBS($1)
+     _LT_SYS_DYNAMIC_LINKER($1)
+     _LT_LINKER_HARDCODE_LIBPATH($1)
+ 
+     _LT_CONFIG($1)
+   fi # test -n "$compiler"
+ 
+   CC=$lt_save_CC
++  CFLAGS=$lt_save_CFLAGS
+   LDCXX=$LD
+   LD=$lt_save_LD
+   GCC=$lt_save_GCC
+   with_gnu_ld=$lt_save_with_gnu_ld
+   lt_cv_path_LDCXX=$lt_cv_path_LD
+   lt_cv_path_LD=$lt_save_path_LD
+   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+ fi # test "$_lt_caught_CXX_error" != yes
+ 
+ AC_LANG_POP
+ ])# _LT_LANG_CXX_CONFIG
+ 
+ 
++# _LT_FUNC_STRIPNAME_CNF
++# ----------------------
++# func_stripname_cnf prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++#
++# This function is identical to the (non-XSI) version of func_stripname,
++# except this one can be used by m4 code that may be executed by configure,
++# rather than the libtool script.
++m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
++AC_REQUIRE([_LT_DECL_SED])
++AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
++func_stripname_cnf ()
++{
++  case ${2} in
++  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++  esac
++} # func_stripname_cnf
++])# _LT_FUNC_STRIPNAME_CNF
++
+ # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+ # ---------------------------------
+ # Figure out "hidden" library dependencies from verbose
+ # compiler output when linking a shared library.
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+ m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+ [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+ # Dependencies to place before and after the object being linked:
+ _LT_TAGVAR(predep_objects, $1)=
+ _LT_TAGVAR(postdep_objects, $1)=
+ _LT_TAGVAR(predeps, $1)=
+ _LT_TAGVAR(postdeps, $1)=
+ _LT_TAGVAR(compiler_lib_search_path, $1)=
+ 
+ dnl we can't use the lt_simple_compile_test_code here,
+@@ -6397,44 +6972,66 @@ private:
+ ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+ public class foo {
+   private int a;
+   public void bar (void) {
+     a = 0;
+   }
+ };
+ _LT_EOF
++], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
++package foo
++func foo() {
++}
++_LT_EOF
+ ])
++
++_lt_libdeps_save_CFLAGS=$CFLAGS
++case "$CC $CFLAGS " in #(
++*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
++*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
++*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
++esac
++
+ dnl Parse the compiler output and extract the necessary
+ dnl objects, libraries and library flags.
+ if AC_TRY_EVAL(ac_compile); then
+   # Parse the compiler output and extract the necessary
+   # objects, libraries and library flags.
+ 
+   # Sentinel used to keep track of whether or not we are before
+   # the conftest object file.
+   pre_test_object_deps_done=no
+ 
+   for p in `eval "$output_verbose_link_cmd"`; do
+-    case $p in
++    case ${prev}${p} in
+ 
+     -L* | -R* | -l*)
+        # Some compilers place space between "-{L,R}" and the path.
+        # Remove the space.
+        if test $p = "-L" ||
+           test $p = "-R"; then
+ 	 prev=$p
+ 	 continue
+-       else
+-	 prev=
+        fi
+ 
++       # Expand the sysroot to ease extracting the directories later.
++       if test -z "$prev"; then
++         case $p in
++         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
++         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
++         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
++         esac
++       fi
++       case $p in
++       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
++       esac
+        if test "$pre_test_object_deps_done" = no; then
+-	 case $p in
+-	 -L* | -R*)
++	 case ${prev} in
++	 -L | -R)
+ 	   # Internal compiler library paths should come after those
+ 	   # provided the user.  The postdeps already come after the
+ 	   # user supplied libs so there is no need to process them.
+ 	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ 	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ 	   else
+ 	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ 	   fi
+@@ -6444,18 +7041,20 @@ if AC_TRY_EVAL(ac_compile); then
+ 	 esac
+        else
+ 	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ 	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ 	 else
+ 	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ 	 fi
+        fi
++       prev=
+        ;;
+ 
++    *.lto.$objext) ;; # Ignore GCC LTO objects
+     *.$objext)
+        # This assumes that the test object file only shows up
+        # once in the compiler output.
+        if test "$p" = "conftest.$objext"; then
+ 	 pre_test_object_deps_done=yes
+ 	 continue
+        fi
+ 
+@@ -6481,16 +7080,17 @@ if AC_TRY_EVAL(ac_compile); then
+ 
+   # Clean up.
+   rm -f a.out a.exe
+ else
+   echo "libtool.m4: error: problem compiling $1 test program"
+ fi
+ 
+ $RM -f confest.$objext
++CFLAGS=$_lt_libdeps_save_CFLAGS
+ 
+ # PORTME: override above test on systems where it is broken
+ m4_if([$1], [CXX],
+ [case $host_os in
+ interix[[3-9]]*)
+   # Interix 3.5 installs completely hosed .la files for C++, so rather than
+   # hack all around it, let's just trust "g++" to DTRT.
+   _LT_TAGVAR(predep_objects,$1)=
+@@ -6517,17 +7117,17 @@ linux*)
+       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+     fi
+     ;;
+   esac
+   ;;
+ 
+ solaris*)
+   case $cc_basename in
+-  CC*)
++  CC* | sunCC*)
+     # The more standards-conforming stlport4 library is
+     # incompatible with the Cstd library. Avoid specifying
+     # it if it's in CXXFLAGS. Ignore libCrun as
+     # -library=stlport4 depends on it.
+     case " $CXX $CXXFLAGS " in
+     *" -library=stlport4 "*)
+       solaris_use_stlport4=yes
+       ;;
+@@ -6561,60 +7161,45 @@ fi
+ _LT_TAGDECL([], [predeps], [1])
+ _LT_TAGDECL([], [postdeps], [1])
+ _LT_TAGDECL([], [compiler_lib_search_path], [1],
+     [The library search path used internally by the compiler when linking
+     a shared library])
+ ])# _LT_SYS_HIDDEN_LIBDEPS
+ 
+ 
+-# _LT_PROG_F77
+-# ------------
+-# Since AC_PROG_F77 is broken, in that it returns the empty string
+-# if there is no fortran compiler, we have our own version here.
+-m4_defun([_LT_PROG_F77],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+-AC_PROG_F77
+-if test -z "$F77" || test "X$F77" = "Xno"; then
+-  _lt_disable_F77=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_F77
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_F77], [])
+-
+-
+ # _LT_LANG_F77_CONFIG([TAG])
+ # --------------------------
+ # Ensure that the configuration variables for a Fortran 77 compiler are
+ # suitably defined.  These variables are subsequently used by _LT_CONFIG
+ # to write the compiler configuration to `libtool'.
+ m4_defun([_LT_LANG_F77_CONFIG],
+-[AC_REQUIRE([_LT_PROG_F77])dnl
+-AC_LANG_PUSH(Fortran 77)
++[AC_LANG_PUSH(Fortran 77)
++if test -z "$F77" || test "X$F77" = "Xno"; then
++  _lt_disable_F77=yes
++fi
+ 
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(reload_flag, $1)=$reload_flag
++_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+ _LT_TAGVAR(no_undefined_flag, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ 
+ # Source file extension for f77 test sources.
+ ac_ext=f
+ 
+ # Object file extension for compiled f77 test sources.
+@@ -6644,17 +7229,19 @@ if test "$_lt_disable_F77" != yes; then
+ 
+   # save warnings/boilerplate of simple test code
+   _LT_COMPILER_BOILERPLATE
+   _LT_LINKER_BOILERPLATE
+ 
+   # Allow CC to be a program name with arguments.
+   lt_save_CC="$CC"
+   lt_save_GCC=$GCC
++  lt_save_CFLAGS=$CFLAGS
+   CC=${F77-"f77"}
++  CFLAGS=$FFLAGS
+   compiler=$CC
+   _LT_TAGVAR(compiler, $1)=$CC
+   _LT_CC_BASENAME([$compiler])
+   GCC=$G77
+   if test -n "$compiler"; then
+     AC_MSG_CHECKING([if libtool supports shared libraries])
+     AC_MSG_RESULT([$can_build_shared])
+ 
+@@ -6698,66 +7285,53 @@ if test "$_lt_disable_F77" != yes; then
+     _LT_SYS_DYNAMIC_LINKER($1)
+     _LT_LINKER_HARDCODE_LIBPATH($1)
+ 
+     _LT_CONFIG($1)
+   fi # test -n "$compiler"
+ 
+   GCC=$lt_save_GCC
+   CC="$lt_save_CC"
++  CFLAGS="$lt_save_CFLAGS"
+ fi # test "$_lt_disable_F77" != yes
+ 
+ AC_LANG_POP
+ ])# _LT_LANG_F77_CONFIG
+ 
+ 
+-# _LT_PROG_FC
+-# -----------
+-# Since AC_PROG_FC is broken, in that it returns the empty string
+-# if there is no fortran compiler, we have our own version here.
+-m4_defun([_LT_PROG_FC],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+-AC_PROG_FC
+-if test -z "$FC" || test "X$FC" = "Xno"; then
+-  _lt_disable_FC=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_FC
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_FC], [])
+-
+-
+ # _LT_LANG_FC_CONFIG([TAG])
+ # -------------------------
+ # Ensure that the configuration variables for a Fortran compiler are
+ # suitably defined.  These variables are subsequently used by _LT_CONFIG
+ # to write the compiler configuration to `libtool'.
+ m4_defun([_LT_LANG_FC_CONFIG],
+-[AC_REQUIRE([_LT_PROG_FC])dnl
+-AC_LANG_PUSH(Fortran)
++[AC_LANG_PUSH(Fortran)
++
++if test -z "$FC" || test "X$FC" = "Xno"; then
++  _lt_disable_FC=yes
++fi
+ 
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(reload_flag, $1)=$reload_flag
++_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+ _LT_TAGVAR(no_undefined_flag, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ 
+ # Source file extension for fc test sources.
+ ac_ext=${ac_fc_srcext-f}
+ 
+ # Object file extension for compiled fc test sources.
+@@ -6787,17 +7361,19 @@ if test "$_lt_disable_FC" != yes; then
+ 
+   # save warnings/boilerplate of simple test code
+   _LT_COMPILER_BOILERPLATE
+   _LT_LINKER_BOILERPLATE
+ 
+   # Allow CC to be a program name with arguments.
+   lt_save_CC="$CC"
+   lt_save_GCC=$GCC
++  lt_save_CFLAGS=$CFLAGS
+   CC=${FC-"f95"}
++  CFLAGS=$FCFLAGS
+   compiler=$CC
+   GCC=$ac_cv_fc_compiler_gnu
+ 
+   _LT_TAGVAR(compiler, $1)=$CC
+   _LT_CC_BASENAME([$compiler])
+ 
+   if test -n "$compiler"; then
+     AC_MSG_CHECKING([if libtool supports shared libraries])
+@@ -6843,17 +7419,18 @@ if test "$_lt_disable_FC" != yes; then
+     _LT_LINKER_SHLIBS($1)
+     _LT_SYS_DYNAMIC_LINKER($1)
+     _LT_LINKER_HARDCODE_LIBPATH($1)
+ 
+     _LT_CONFIG($1)
+   fi # test -n "$compiler"
+ 
+   GCC=$lt_save_GCC
+-  CC="$lt_save_CC"
++  CC=$lt_save_CC
++  CFLAGS=$lt_save_CFLAGS
+ fi # test "$_lt_disable_FC" != yes
+ 
+ AC_LANG_POP
+ ])# _LT_LANG_FC_CONFIG
+ 
+ 
+ # _LT_LANG_GCJ_CONFIG([TAG])
+ # --------------------------
+@@ -6880,29 +7457,33 @@ lt_simple_link_test_code='public class c
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+ 
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+ 
+ # Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
++lt_save_CC=$CC
++lt_save_CFLAGS=$CFLAGS
+ lt_save_GCC=$GCC
+ GCC=yes
+ CC=${GCJ-"gcj"}
++CFLAGS=$GCJFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_TAGVAR(LD, $1)="$LD"
+ _LT_CC_BASENAME([$compiler])
+ 
+ # GCJ did not exist at the time GCC didn't implicitly link libc in.
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ 
+ _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(reload_flag, $1)=$reload_flag
++_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+ 
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ if test -n "$compiler"; then
+   _LT_COMPILER_NO_RTTI($1)
+   _LT_COMPILER_PIC($1)
+@@ -6912,20 +7493,92 @@ if test -n "$compiler"; then
+   _LT_LINKER_HARDCODE_LIBPATH($1)
+ 
+   _LT_CONFIG($1)
+ fi
+ 
+ AC_LANG_RESTORE
+ 
+ GCC=$lt_save_GCC
+-CC="$lt_save_CC"
++CC=$lt_save_CC
++CFLAGS=$lt_save_CFLAGS
+ ])# _LT_LANG_GCJ_CONFIG
+ 
+ 
++# _LT_LANG_GO_CONFIG([TAG])
++# --------------------------
++# Ensure that the configuration variables for the GNU Go compiler
++# are suitably defined.  These variables are subsequently used by _LT_CONFIG
++# to write the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_GO_CONFIG],
++[AC_REQUIRE([LT_PROG_GO])dnl
++AC_LANG_SAVE
++
++# Source file extension for Go test sources.
++ac_ext=go
++
++# Object file extension for compiled Go test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# Code to be used in simple compile tests
++lt_simple_compile_test_code="package main; func main() { }"
++
++# Code to be used in simple link tests
++lt_simple_link_test_code='package main; func main() { }'
++
++# ltmain only uses $CC for tagged configurations so make sure $CC is set.
++_LT_TAG_COMPILER
++
++# save warnings/boilerplate of simple test code
++_LT_COMPILER_BOILERPLATE
++_LT_LINKER_BOILERPLATE
++
++# Allow CC to be a program name with arguments.
++lt_save_CC=$CC
++lt_save_CFLAGS=$CFLAGS
++lt_save_GCC=$GCC
++GCC=yes
++CC=${GOC-"gccgo"}
++CFLAGS=$GOFLAGS
++compiler=$CC
++_LT_TAGVAR(compiler, $1)=$CC
++_LT_TAGVAR(LD, $1)="$LD"
++_LT_CC_BASENAME([$compiler])
++
++# Go did not exist at the time GCC didn't implicitly link libc in.
++_LT_TAGVAR(archive_cmds_need_lc, $1)=no
++
++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(reload_flag, $1)=$reload_flag
++_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
++
++## CAVEAT EMPTOR:
++## There is no encapsulation within the following macros, do not change
++## the running order or otherwise move them around unless you know exactly
++## what you are doing...
++if test -n "$compiler"; then
++  _LT_COMPILER_NO_RTTI($1)
++  _LT_COMPILER_PIC($1)
++  _LT_COMPILER_C_O($1)
++  _LT_COMPILER_FILE_LOCKS($1)
++  _LT_LINKER_SHLIBS($1)
++  _LT_LINKER_HARDCODE_LIBPATH($1)
++
++  _LT_CONFIG($1)
++fi
++
++AC_LANG_RESTORE
++
++GCC=$lt_save_GCC
++CC=$lt_save_CC
++CFLAGS=$lt_save_CFLAGS
++])# _LT_LANG_GO_CONFIG
++
++
+ # _LT_LANG_RC_CONFIG([TAG])
+ # -------------------------
+ # Ensure that the configuration variables for the Windows resource compiler
+ # are suitably defined.  These variables are subsequently used by _LT_CONFIG
+ # to write the compiler configuration to `libtool'.
+ m4_defun([_LT_LANG_RC_CONFIG],
+ [AC_REQUIRE([LT_PROG_RC])dnl
+ AC_LANG_SAVE
+@@ -6947,32 +7600,35 @@ lt_simple_link_test_code="$lt_simple_com
+ _LT_TAG_COMPILER
+ 
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+ 
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
++lt_save_CFLAGS=$CFLAGS
+ lt_save_GCC=$GCC
+ GCC=
+ CC=${RC-"windres"}
++CFLAGS=
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ 
+ if test -n "$compiler"; then
+   :
+   _LT_CONFIG($1)
+ fi
+ 
+ GCC=$lt_save_GCC
+ AC_LANG_RESTORE
+-CC="$lt_save_CC"
++CC=$lt_save_CC
++CFLAGS=$lt_save_CFLAGS
+ ])# _LT_LANG_RC_CONFIG
+ 
+ 
+ # LT_PROG_GCJ
+ # -----------
+ AC_DEFUN([LT_PROG_GCJ],
+ [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+   [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+@@ -6982,16 +7638,23 @@ AC_DEFUN([LT_PROG_GCJ],
+ ])
+ 
+ # Old name:
+ AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+ dnl aclocal-1.4 backwards compatibility:
+ dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+ 
+ 
++# LT_PROG_GO
++# ----------
++AC_DEFUN([LT_PROG_GO],
++[AC_CHECK_TOOL(GOC, gccgo,)
++])
++
++
+ # LT_PROG_RC
+ # ----------
+ AC_DEFUN([LT_PROG_RC],
+ [AC_CHECK_TOOL(RC, windres,)
+ ])
+ 
+ # Old name:
+ AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+@@ -7021,16 +7684,25 @@ AC_SUBST([GREP])
+ # available, choose the one first in the user's PATH.
+ m4_defun([_LT_DECL_OBJDUMP],
+ [AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ test -z "$OBJDUMP" && OBJDUMP=objdump
+ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+ AC_SUBST([OBJDUMP])
+ ])
+ 
++# _LT_DECL_DLLTOOL
++# ----------------
++# Ensure DLLTOOL variable is set.
++m4_defun([_LT_DECL_DLLTOOL],
++[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
++AC_SUBST([DLLTOOL])
++])
+ 
+ # _LT_DECL_SED
+ # ------------
+ # Check for a fully-functional sed program, that truncates
+ # as few characters as possible.  Prefer GNU sed if found.
+ m4_defun([_LT_DECL_SED],
+ [AC_PROG_SED
+ test -z "$SED" && SED=sed
+@@ -7114,18 +7786,18 @@ dnl AC_DEFUN([LT_AC_PROG_SED], [])
+ # ------------------------
+ # Find out whether the shell is Bourne or XSI compatible,
+ # or has some other useful features.
+ m4_defun([_LT_CHECK_SHELL_FEATURES],
+ [AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+ # Try some XSI features
+ xsi_shell=no
+ ( _lt_dummy="a/b/c"
+-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+-      = c,a/b,, \
++  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
++      = c,a/b,b/c, \
+     && eval 'test $(( 1 + 1 )) -eq 2 \
+     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+   && xsi_shell=yes
+ AC_MSG_RESULT([$xsi_shell])
+ _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+ 
+ AC_MSG_CHECKING([whether the shell understands "+="])
+ lt_shell_append=no
+@@ -7154,213 +7826,167 @@ case `echo X|tr X '\101'` in
+   lt_NL2SP='tr \r\n \100\100'
+   ;;
+ esac
+ _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+ ])# _LT_CHECK_SHELL_FEATURES
+ 
+ 
+-# _LT_PROG_XSI_SHELLFNS
+-# ---------------------
+-# Bourne and XSI compatible variants of some useful shell functions.
+-m4_defun([_LT_PROG_XSI_SHELLFNS],
+-[case $xsi_shell in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-#   dirname:  Compute the dirname of FILE.  If nonempty,
+-#             add APPEND to the result, otherwise set result
+-#             to NONDIR_REPLACEMENT.
+-#             value returned in "$func_dirname_result"
+-#   basename: Compute filename of FILE.
+-#             value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+-  # positional parameters, so assign one to ordinary parameter first.
+-  func_stripname_result=${3}
+-  func_stripname_result=${func_stripname_result#"${1}"}
+-  func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=${1%%=*}
+-  func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  case ${1} in
+-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+-    *)    func_lo2o_result=${1} ;;
+-  esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=$(( $[*] ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=${#1}
+-}
+-
+-_LT_EOF
++# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
++# ------------------------------------------------------
++# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
++# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
++m4_defun([_LT_PROG_FUNCTION_REPLACE],
++[dnl {
++sed -e '/^$1 ()$/,/^} # $1 /c\
++$1 ()\
++{\
++m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
++} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
++  && mv -f "$cfgfile.tmp" "$cfgfile" \
++    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++test 0 -eq $? || _lt_function_replace_fail=:
++])
++
++
++# _LT_PROG_REPLACE_SHELLFNS
++# -------------------------
++# Replace existing portable implementations of several shell functions with
++# equivalent extended shell implementations where those features are available..
++m4_defun([_LT_PROG_REPLACE_SHELLFNS],
++[if test x"$xsi_shell" = xyes; then
++  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
++    case ${1} in
++      */*) func_dirname_result="${1%/*}${2}" ;;
++      *  ) func_dirname_result="${3}" ;;
++    esac])
++
++  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
++    func_basename_result="${1##*/}"])
++
++  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
++    case ${1} in
++      */*) func_dirname_result="${1%/*}${2}" ;;
++      *  ) func_dirname_result="${3}" ;;
++    esac
++    func_basename_result="${1##*/}"])
++
++  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
++    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
++    # positional parameters, so assign one to ordinary parameter first.
++    func_stripname_result=${3}
++    func_stripname_result=${func_stripname_result#"${1}"}
++    func_stripname_result=${func_stripname_result%"${2}"}])
++
++  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
++    func_split_long_opt_name=${1%%=*}
++    func_split_long_opt_arg=${1#*=}])
++
++  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
++    func_split_short_opt_arg=${1#??}
++    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
++
++  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
++    case ${1} in
++      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
++      *)    func_lo2o_result=${1} ;;
++    esac])
++
++  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
++
++  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
++
++  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
++fi
++
++if test x"$lt_shell_append" = xyes; then
++  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
++
++  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
++    func_quote_for_eval "${2}"
++dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
++    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
++
++  # Save a `func_append' function call where possible by direct use of '+='
++  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
++    && mv -f "$cfgfile.tmp" "$cfgfile" \
++      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++  test 0 -eq $? || _lt_function_replace_fail=:
++else
++  # Save a `func_append' function call even when '+=' is not available
++  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
++    && mv -f "$cfgfile.tmp" "$cfgfile" \
++      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
++  test 0 -eq $? || _lt_function_replace_fail=:
++fi
++
++if test x"$_lt_function_replace_fail" = x":"; then
++  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
++fi
++])
++
++# _LT_PATH_CONVERSION_FUNCTIONS
++# -----------------------------
++# Determine which file name conversion functions should be used by
++# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
++# for certain cross-compile configurations and native mingw.
++m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++AC_REQUIRE([AC_CANONICAL_BUILD])dnl
++AC_MSG_CHECKING([how to convert $build file names to $host format])
++AC_CACHE_VAL(lt_cv_to_host_file_cmd,
++[case $host in
++  *-*-mingw* )
++    case $build in
++      *-*-mingw* ) # actually msys
++        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
++        ;;
++      *-*-cygwin* )
++        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
++        ;;
++      * ) # otherwise, assume *nix
++        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
++        ;;
++    esac
+     ;;
+-  *) # Bourne compatible functions.
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  # Extract subdirectory from the argument.
+-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+-  if test "X$func_dirname_result" = "X${1}"; then
+-    func_dirname_result="${3}"
+-  else
+-    func_dirname_result="$func_dirname_result${2}"
+-  fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+-}
+-
+-dnl func_dirname_and_basename
+-dnl A portable version of this function is already defined in general.m4sh
+-dnl so there is no need for it here.
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+-  case ${2} in
+-    .*) func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+-    *)  func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+-  esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[[^=]]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=`expr "$[@]"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
++  *-*-cygwin* )
++    case $build in
++      *-*-mingw* ) # actually msys
++        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
++        ;;
++      *-*-cygwin* )
++        lt_cv_to_host_file_cmd=func_convert_file_noop
++        ;;
++      * ) # otherwise, assume *nix
++        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
++        ;;
++    esac
++    ;;
++  * ) # unhandled hosts (and "normal" native builds)
++    lt_cv_to_host_file_cmd=func_convert_file_noop
++    ;;
+ esac
+-
+-case $lt_shell_append in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$[1]+=\$[2]"
+-}
+-_LT_EOF
++])
++to_host_file_cmd=$lt_cv_to_host_file_cmd
++AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
++_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
++         [0], [convert $build file names to $host format])dnl
++
++AC_MSG_CHECKING([how to convert $build file names to toolchain format])
++AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
++[#assume ordinary cross tools, or native build.
++lt_cv_to_tool_file_cmd=func_convert_file_noop
++case $host in
++  *-*-mingw* )
++    case $build in
++      *-*-mingw* ) # actually msys
++        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
++        ;;
++    esac
+     ;;
+-  *)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$[1]=\$$[1]\$[2]"
+-}
+-
+-_LT_EOF
+-    ;;
+-  esac
++esac
+ ])
++to_tool_file_cmd=$lt_cv_to_tool_file_cmd
++AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
++_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
++         [0], [convert $build files to toolchain format])dnl
++])# _LT_PATH_CONVERSION_FUNCTIONS
+diff --git a/js/src/ctypes/libffi/m4/ltoptions.m4 b/js/src/ctypes/libffi/m4/ltoptions.m4
+--- a/js/src/ctypes/libffi/m4/ltoptions.m4
++++ b/js/src/ctypes/libffi/m4/ltoptions.m4
+@@ -1,18 +1,19 @@
+ # Helper functions for option handling.                    -*- Autoconf -*-
+ #
+-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
++#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
++#   Inc.
+ #   Written by Gary V. Vaughan, 2004
+ #
+ # This file is free software; the Free Software Foundation gives
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+ 
+-# serial 6 ltoptions.m4
++# serial 7 ltoptions.m4
+ 
+ # This is to help aclocal find these macros, as it can't see m4_define.
+ AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+ 
+ 
+ # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+ # ------------------------------------------
+ m4_define([_LT_MANGLE_OPTION],
+@@ -120,31 +121,31 @@ dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+ 
+ # win32-dll
+ # ---------
+ # Declare package support for building win32 dll's.
+ LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+ [enable_win32_dll=yes
+ 
+ case $host in
+-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
++*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+   AC_CHECK_TOOL(AS, as, false)
+   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+   AC_CHECK_TOOL(OBJDUMP, objdump, false)
+   ;;
+ esac
+ 
+ test -z "$AS" && AS=as
+-_LT_DECL([], [AS],      [0], [Assembler program])dnl
++_LT_DECL([], [AS],      [1], [Assembler program])dnl
+ 
+ test -z "$DLLTOOL" && DLLTOOL=dlltool
+-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
++_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+ 
+ test -z "$OBJDUMP" && OBJDUMP=objdump
+-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
++_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+ ])# win32-dll
+ 
+ AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+ [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ _LT_SET_OPTION([LT_INIT], [win32-dll])
+ AC_DIAGNOSE([obsolete],
+ [$0: Remove this warning and the call to _LT_SET_OPTION when you
+ put the `win32-dll' option into LT_INIT's first parameter.])
+@@ -320,19 +321,34 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], 
+ 
+ # _LT_WITH_PIC([MODE])
+ # --------------------
+ # implement the --with-pic flag, and support the `pic-only' and `no-pic'
+ # LT_INIT options.
+ # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+ m4_define([_LT_WITH_PIC],
+ [AC_ARG_WITH([pic],
+-    [AS_HELP_STRING([--with-pic],
++    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ 	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+-    [pic_mode="$withval"],
++    [lt_p=${PACKAGE-default}
++    case $withval in
++    yes|no) pic_mode=$withval ;;
++    *)
++      pic_mode=default
++      # Look at the argument we got.  We use all the common list separators.
++      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++      for lt_pkg in $withval; do
++	IFS="$lt_save_ifs"
++	if test "X$lt_pkg" = "X$lt_p"; then
++	  pic_mode=yes
++	fi
++      done
++      IFS="$lt_save_ifs"
++      ;;
++    esac],
+     [pic_mode=default])
+ 
+ test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+ 
+ _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+ ])# _LT_WITH_PIC
+ 
+ LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+diff --git a/js/src/ctypes/libffi/m4/ltversion.m4 b/js/src/ctypes/libffi/m4/ltversion.m4
+--- a/js/src/ctypes/libffi/m4/ltversion.m4
++++ b/js/src/ctypes/libffi/m4/ltversion.m4
+@@ -2,22 +2,22 @@
+ #
+ #   Copyright (C) 2004 Free Software Foundation, Inc.
+ #   Written by Scott James Remnant, 2004
+ #
+ # This file is free software; the Free Software Foundation gives
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+ 
+-# Generated from ltversion.in.
++# @configure_input@
+ 
+-# serial 3017 ltversion.m4
++# serial 3337 ltversion.m4
+ # This file is part of GNU Libtool
+ 
+-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+-m4_define([LT_PACKAGE_REVISION], [1.3017])
++m4_define([LT_PACKAGE_VERSION], [2.4.2])
++m4_define([LT_PACKAGE_REVISION], [1.3337])
+ 
+ AC_DEFUN([LTVERSION_VERSION],
+-[macro_version='2.2.6b'
+-macro_revision='1.3017'
++[macro_version='2.4.2'
++macro_revision='1.3337'
+ _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+ _LT_DECL(, macro_revision, 0)
+ ])
+diff --git a/js/src/ctypes/libffi/m4/lt~obsolete.m4 b/js/src/ctypes/libffi/m4/lt~obsolete.m4
+--- a/js/src/ctypes/libffi/m4/lt~obsolete.m4
++++ b/js/src/ctypes/libffi/m4/lt~obsolete.m4
+@@ -1,18 +1,18 @@
+ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+ #
+-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
++#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+ #   Written by Scott James Remnant, 2004.
+ #
+ # This file is free software; the Free Software Foundation gives
+ # unlimited permission to copy and/or distribute it, with or without
+ # modifications, as long as this notice is preserved.
+ 
+-# serial 4 lt~obsolete.m4
++# serial 5 lt~obsolete.m4
+ 
+ # These exist entirely to fool aclocal when bootstrapping libtool.
+ #
+ # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+ # which have later been changed to m4_define as they aren't part of the
+ # exported API, or moved to Autoconf or Automake where they belong.
+ #
+ # The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+@@ -72,21 +72,27 @@ m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN
+ m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+ m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+ m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+ m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+ m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+ m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+ m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+ m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+ m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+ m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+ m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+ m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+ m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+ m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+ m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+ m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+ m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+ m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+ m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+ m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
++m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
++m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
++m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
++m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
++m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
++m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
++m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
+diff --git a/js/src/ctypes/libffi/man/Makefile.am b/js/src/ctypes/libffi/man/Makefile.am
+--- a/js/src/ctypes/libffi/man/Makefile.am
++++ b/js/src/ctypes/libffi/man/Makefile.am
+@@ -1,8 +1,8 @@
+ ## Process this with automake to create Makefile.in
+ 
+ AUTOMAKE_OPTIONS=foreign
+ 
+-EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3
++EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3
+ 
+-man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3
++man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3
+ 
+diff --git a/js/src/ctypes/libffi/man/Makefile.in b/js/src/ctypes/libffi/man/Makefile.in
+--- a/js/src/ctypes/libffi/man/Makefile.in
++++ b/js/src/ctypes/libffi/man/Makefile.in
+@@ -1,25 +1,69 @@
+-# Makefile.in generated by automake 1.11.1 from Makefile.am.
++# Makefile.in generated by automake 1.13.4 from Makefile.am.
+ # @configure_input@
+ 
+-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+-# Inc.
++# Copyright (C) 1994-2013 Free Software Foundation, Inc.
++
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ VPATH = @srcdir@
++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
++am__make_running_with_option = \
++  case $${target_option-} in \
++      ?) ;; \
++      *) echo "am__make_running_with_option: internal error: invalid" \
++              "target option '$${target_option-}' specified" >&2; \
++         exit 1;; \
++  esac; \
++  has_opt=no; \
++  sane_makeflags=$$MAKEFLAGS; \
++  if $(am__is_gnu_make); then \
++    sane_makeflags=$$MFLAGS; \
++  else \
++    case $$MAKEFLAGS in \
++      *\\[\ \	]*) \
++        bs=\\; \
++        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
++          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
++    esac; \
++  fi; \
++  skip_next=no; \
++  strip_trailopt () \
++  { \
++    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
++  }; \
++  for flg in $$sane_makeflags; do \
++    test $$skip_next = yes && { skip_next=no; continue; }; \
++    case $$flg in \
++      *=*|--*) continue;; \
++        -*I) strip_trailopt 'I'; skip_next=yes;; \
++      -*I?*) strip_trailopt 'I';; \
++        -*O) strip_trailopt 'O'; skip_next=yes;; \
++      -*O?*) strip_trailopt 'O';; \
++        -*l) strip_trailopt 'l'; skip_next=yes;; \
++      -*l?*) strip_trailopt 'l';; \
++      -[dEDm]) skip_next=yes;; \
++      -[JT]) skip_next=yes;; \
++    esac; \
++    case $$flg in \
++      *$$target_option*) has_opt=yes; break;; \
++    esac; \
++  done; \
++  test $$has_opt = yes
++am__make_dryrun = (target_option=n; $(am__make_running_with_option))
++am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -30,28 +74,57 @@ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = man
+-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
++am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \
++	$(top_srcdir)/m4/ax_append_flag.m4 \
++	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
++	$(top_srcdir)/m4/ax_cflags_warn_all.m4 \
++	$(top_srcdir)/m4/ax_check_compile_flag.m4 \
++	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
++	$(top_srcdir)/m4/ax_configure_args.m4 \
++	$(top_srcdir)/m4/ax_enable_builddir.m4 \
++	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
++	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
++	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
++	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
++	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/fficonfig.h
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
++AM_V_P = $(am__v_P_@AM_V@)
++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
++am__v_P_0 = false
++am__v_P_1 = :
++AM_V_GEN = $(am__v_GEN_@AM_V@)
++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
++am__v_GEN_0 = @echo "  GEN     " $@;
++am__v_GEN_1 = 
++AM_V_at = $(am__v_at_@AM_V@)
++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
++am__v_at_0 = @
++am__v_at_1 = 
+ SOURCES =
+ DIST_SOURCES =
++am__can_run_installinfo = \
++  case $$AM_UPDATE_INFO_DIR in \
++    n|no|NO) false;; \
++    *) (install-info --version) >/dev/null 2>&1;; \
++  esac
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+     *) f=$$p;; \
+   esac;
+ am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+ am__install_max = 40
+ am__nobase_strip_setup = \
+@@ -63,24 +136,32 @@ am__nobase_list = $(am__nobase_strip_set
+   sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+   $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+     if (++n[$$2] == $(am__install_max)) \
+       { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+     END { for (dir in files) print dir, files[dir] }'
+ am__base_list = \
+   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__uninstall_files_from_dir = { \
++  test -z "$$files" \
++    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
++    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
++         $(am__cd) "$$dir" && rm -f $$files; }; \
++  }
+ man3dir = $(mandir)/man3
+ am__installdirs = "$(DESTDIR)$(man3dir)"
+ NROFF = nroff
+ MANS = $(man_MANS)
++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMTAR = @AMTAR@
++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+ AM_LTLDFLAGS = @AM_LTLDFLAGS@
+ AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
+ AR = @AR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ CC = @CC@
+@@ -89,75 +170,82 @@ CCASDEPMODE = @CCASDEPMODE@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXEEXT = @EXEEXT@
++FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
+ FGREP = @FGREP@
+ GREP = @GREP@
+ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
++HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LD = @LD@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIPO = @LIPO@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+ OBJDUMP = @OBJDUMP@
+ OBJEXT = @OBJEXT@
+ OTOOL = @OTOOL@
+ OTOOL64 = @OTOOL64@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
++PRTDIAG = @PRTDIAG@
+ RANLIB = @RANLIB@
+ SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ TARGET = @TARGET@
+ TARGETDIR = @TARGETDIR@
+ VERSION = @VERSION@
+ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
++ax_enable_builddir_sed = @ax_enable_builddir_sed@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ builddir = @builddir@
+ datadir = @datadir@
+@@ -173,41 +261,41 @@ host_vendor = @host_vendor@
+ htmldir = @htmldir@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localedir = @localedir@
+ localstatedir = @localstatedir@
+-lt_ECHO = @lt_ECHO@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ oldincludedir = @oldincludedir@
+ pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ srcdir = @srcdir@
++sys_symbol_underscore = @sys_symbol_underscore@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
+ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign
+-EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3
+-man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3
++EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3
++man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3
+ all: all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+@@ -239,21 +327,28 @@ Makefile: $(srcdir)/Makefile.in $(top_bu
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+ install-man3: $(man_MANS)
+ 	@$(NORMAL_INSTALL)
+-	test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+-	@list=''; test -n "$(man3dir)" || exit 0; \
+-	{ for i in $$list; do echo "$$i"; done; \
+-	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+-	  sed -n '/\.3[a-z]*$$/p'; \
++	@list1=''; \
++	list2='$(man_MANS)'; \
++	test -n "$(man3dir)" \
++	  && test -n "`echo $$list1$$list2`" \
++	  || exit 0; \
++	echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
++	$(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
++	{ for i in $$list1; do echo "$$i"; done;  \
++	if test -n "$$list2"; then \
++	  for i in $$list2; do echo "$$i"; done \
++	    | sed -n '/\.3[a-z]*$$/p'; \
++	fi; \
+ 	} | while read p; do \
+ 	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ 	  echo "$$d$$p"; echo "$$p"; \
+ 	done | \
+ 	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ 	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ 	sed 'N;N;s,\n, ,g' | { \
+ 	list=; while read file base inst; do \
+@@ -272,40 +367,25 @@ install-man3: $(man_MANS)
+ uninstall-man3:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list=''; test -n "$(man3dir)" || exit 0; \
+ 	files=`{ for i in $$list; do echo "$$i"; done; \
+ 	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ 	  sed -n '/\.3[a-z]*$$/p'; \
+ 	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ 	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+-	test -z "$$files" || { \
+-	  echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \
+-	  cd "$(DESTDIR)$(man3dir)" && rm -f $$files; }
+-tags: TAGS
+-TAGS:
++	dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
++tags TAGS:
+ 
+-ctags: CTAGS
+-CTAGS:
++ctags CTAGS:
++
++cscope cscopelist:
+ 
+ 
+ distdir: $(DISTFILES)
+-	@list='$(MANS)'; if test -n "$$list"; then \
+-	  list=`for p in $$list; do \
+-	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+-	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+-	  if test -n "$$list" && \
+-	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+-	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+-	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+-	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+-	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
+-	    exit 1; \
+-	  else :; fi; \
+-	else :; fi
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	list='$(DISTFILES)'; \
+ 	  dist_files=`for file in $$list; do echo $$file; done | \
+ 	  sed -e "s|^$$srcdirstrip/||;t" \
+ 	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ 	case $$dist_files in \
+ 	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+@@ -342,20 +422,25 @@ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ 
+@@ -428,23 +513,24 @@ ps-am:
+ 
+ uninstall-am: uninstall-man
+ 
+ uninstall-man: uninstall-man3
+ 
+ .MAKE: install-am install-strip
+ 
+ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
+-	distclean distclean-generic distclean-libtool distdir dvi \
+-	dvi-am html html-am info info-am install install-am \
+-	install-data install-data-am install-dvi install-dvi-am \
+-	install-exec install-exec-am install-html install-html-am \
+-	install-info install-info-am install-man install-man3 \
+-	install-pdf install-pdf-am install-ps install-ps-am \
+-	install-strip installcheck installcheck-am installdirs \
+-	maintainer-clean maintainer-clean-generic mostlyclean \
+-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+-	uninstall uninstall-am uninstall-man uninstall-man3
++	cscopelist-am ctags-am distclean distclean-generic \
++	distclean-libtool distdir dvi dvi-am html html-am info info-am \
++	install install-am install-data install-data-am install-dvi \
++	install-dvi-am install-exec install-exec-am install-html \
++	install-html-am install-info install-info-am install-man \
++	install-man3 install-pdf install-pdf-am install-ps \
++	install-ps-am install-strip installcheck installcheck-am \
++	installdirs maintainer-clean maintainer-clean-generic \
++	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
++	ps ps-am tags-am uninstall uninstall-am uninstall-man \
++	uninstall-man3
+ 
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff --git a/js/src/ctypes/libffi/man/ffi.3 b/js/src/ctypes/libffi/man/ffi.3
+--- a/js/src/ctypes/libffi/man/ffi.3
++++ b/js/src/ctypes/libffi/man/ffi.3
+@@ -11,21 +11,31 @@ libffi, -lffi
+ .Fo ffi_prep_cif
+ .Fa "ffi_cif *cif"
+ .Fa "ffi_abi abi"
+ .Fa "unsigned int nargs"
+ .Fa "ffi_type *rtype"
+ .Fa "ffi_type **atypes"
+ .Fc
+ .Ft void
++.Fo ffi_prep_cif_var
++.Fa "ffi_cif *cif"
++.Fa "ffi_abi abi"
++.Fa "unsigned int nfixedargs"
++.Fa "unsigned int ntotalargs"
++.Fa "ffi_type *rtype"
++.Fa "ffi_type **atypes"
++.Fc
++.Ft void
+ .Fo ffi_call
+ .Fa "ffi_cif *cif"
+ .Fa "void (*fn)(void)"
+ .Fa "void *rvalue"
+ .Fa "void **avalue"
+ .Fc
+ .Sh DESCRIPTION
+ The foreign function interface provides a mechanism by which a function can
+ generate a call to another function at runtime without requiring knowledge of
+ the called function's interface at compile time.
+ .Sh SEE ALSO
+ .Xr ffi_prep_cif 3 ,
++.Xr ffi_prep_cif_var 3 ,
+ .Xr ffi_call 3
+diff --git a/js/src/ctypes/libffi/man/ffi_prep_cif.3 b/js/src/ctypes/libffi/man/ffi_prep_cif.3
+--- a/js/src/ctypes/libffi/man/ffi_prep_cif.3
++++ b/js/src/ctypes/libffi/man/ffi_prep_cif.3
+@@ -32,17 +32,19 @@ is an array of
+ .Fa nargs
+ pointers to
+ .Nm ffi_type
+ structs that describe the data type, size and alignment of each argument.
+ .Fa rtype
+ points to an
+ .Nm ffi_type
+ that describes the data type, size and alignment of the
+-return value.
++return value. Note that to call a variadic function
++.Nm ffi_prep_cif_var
++must be used instead.
+ .Sh RETURN VALUES
+ Upon successful completion,
+ .Nm ffi_prep_cif
+ returns
+ .Nm FFI_OK .
+ It will return
+ .Nm FFI_BAD_TYPEDEF
+ if
+@@ -54,13 +56,13 @@ or
+ or
+ .Fa rtype
+ is malformed. If
+ .Fa abi
+ does not refer to a valid ABI,
+ .Nm FFI_BAD_ABI
+ will be returned. Available ABIs are
+ defined in
+-.Nm <ffitarget.h>
+-.
++.Nm <ffitarget.h> .
+ .Sh SEE ALSO
+ .Xr ffi 3 ,
+-.Xr ffi_call 3 
++.Xr ffi_call 3 ,
++.Xr ffi_prep_cif_var 3
+diff --git a/js/src/ctypes/libffi/man/ffi_prep_cif_var.3 b/js/src/ctypes/libffi/man/ffi_prep_cif_var.3
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/man/ffi_prep_cif_var.3
+@@ -0,0 +1,73 @@
++.Dd January 25, 2011
++.Dt ffi_prep_cif_var 3
++.Sh NAME
++.Nm ffi_prep_cif_var
++.Nd Prepare a
++.Nm ffi_cif
++structure for use with
++.Nm ffi_call
++for variadic functions.
++.Sh SYNOPSIS
++.In ffi.h
++.Ft ffi_status
++.Fo ffi_prep_cif_var
++.Fa "ffi_cif *cif"
++.Fa "ffi_abi abi"
++.Fa "unsigned int nfixedargs"
++.Fa "unsigned int ntotalargs"
++.Fa "ffi_type *rtype"
++.Fa "ffi_type **atypes"
++.Fc
++.Sh DESCRIPTION
++The
++.Nm ffi_prep_cif_var
++function prepares a
++.Nm ffi_cif
++structure for use with
++.Nm ffi_call
++for variadic functions.
++.Fa abi
++specifies a set of calling conventions to use.
++.Fa atypes
++is an array of
++.Fa ntotalargs
++pointers to
++.Nm ffi_type
++structs that describe the data type, size and alignment of each argument.
++.Fa rtype
++points to an
++.Nm ffi_type
++that describes the data type, size and alignment of the
++return value.
++.Fa nfixedargs
++must contain the number of fixed (non-variadic) arguments.
++Note that to call a non-variadic function
++.Nm ffi_prep_cif
++must be used.
++.Sh RETURN VALUES
++Upon successful completion,
++.Nm ffi_prep_cif_var
++returns
++.Nm FFI_OK .
++It will return
++.Nm FFI_BAD_TYPEDEF
++if
++.Fa cif
++is
++.Nm NULL
++or
++.Fa atypes
++or
++.Fa rtype
++is malformed. If
++.Fa abi
++does not refer to a valid ABI,
++.Nm FFI_BAD_ABI
++will be returned. Available ABIs are
++defined in
++.Nm <ffitarget.h>
++.
++.Sh SEE ALSO
++.Xr ffi 3 ,
++.Xr ffi_call 3 ,
++.Xr ffi_prep_cif 3
+diff --git a/js/src/ctypes/libffi/mdate-sh b/js/src/ctypes/libffi/mdate-sh
+--- a/js/src/ctypes/libffi/mdate-sh
++++ b/js/src/ctypes/libffi/mdate-sh
+@@ -1,106 +1,126 @@
+ #!/bin/sh
+ # Get modification time of a file or directory and pretty-print it.
+ 
+-scriptversion=2005-06-29.22
++scriptversion=2010-08-21.06; # UTC
+ 
+-# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
+-# Foundation, Inc.
++# Copyright (C) 1995-2013 Free Software Foundation, Inc.
+ # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ # This file is maintained in Automake, please report
+ # bugs to <bug-automake@gnu.org> or send patches to
+ # <automake-patches@gnu.org>.
+ 
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++fi
++
+ case $1 in
+   '')
+-     echo "$0: No file.  Try \`$0 --help' for more information." 1>&2
++     echo "$0: No file.  Try '$0 --help' for more information." 1>&2
+      exit 1;
+      ;;
+   -h | --h*)
+     cat <<\EOF
+ Usage: mdate-sh [--help] [--version] FILE
+ 
+-Pretty-print the modification time of FILE.
++Pretty-print the modification day of FILE, in the format:
++1 January 1970
+ 
+ Report bugs to <bug-automake@gnu.org>.
+ EOF
+     exit $?
+     ;;
+   -v | --v*)
+     echo "mdate-sh $scriptversion"
+     exit $?
+     ;;
+ esac
+ 
++error ()
++{
++  echo "$0: $1" >&2
++  exit 1
++}
++
++
+ # Prevent date giving response in another language.
+ LANG=C
+ export LANG
+ LC_ALL=C
+ export LC_ALL
+ LC_TIME=C
+ export LC_TIME
+ 
+ # GNU ls changes its time format in response to the TIME_STYLE
+-# variable.  Since we cannot assume `unset' works, revert this
++# variable.  Since we cannot assume 'unset' works, revert this
+ # variable to its documented default.
+ if test "${TIME_STYLE+set}" = set; then
+   TIME_STYLE=posix-long-iso
+   export TIME_STYLE
+ fi
+ 
+ save_arg1=$1
+ 
+ # Find out how to get the extended ls output of a file or directory.
+ if ls -L /dev/null 1>/dev/null 2>&1; then
+   ls_command='ls -L -l -d'
+ else
+   ls_command='ls -l -d'
+ fi
++# Avoid user/group names that might have spaces, when possible.
++if ls -n /dev/null 1>/dev/null 2>&1; then
++  ls_command="$ls_command -n"
++fi
+ 
+-# A `ls -l' line looks as follows on OS/2.
++# A 'ls -l' line looks as follows on OS/2.
+ #  drwxrwx---        0 Aug 11  2001 foo
+ # This differs from Unix, which adds ownership information.
+ #  drwxrwx---   2 root  root      4096 Aug 11  2001 foo
+ #
+ # To find the date, we split the line on spaces and iterate on words
+ # until we find a month.  This cannot work with files whose owner is a
+-# user named `Jan', or `Feb', etc.  However, it's unlikely that `/'
++# user named "Jan", or "Feb", etc.  However, it's unlikely that '/'
+ # will be owned by a user whose name is a month.  So we first look at
+ # the extended ls output of the root directory to decide how many
+ # words should be skipped to get the date.
+ 
+ # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+-set x`ls -l -d /`
++set x`$ls_command /`
+ 
+ # Find which argument is the month.
+ month=
+ command=
+ until test $month
+ do
++  test $# -gt 0 || error "failed parsing '$ls_command /' output"
+   shift
+   # Add another shift to the command.
+   command="$command shift;"
+   case $1 in
+     Jan) month=January; nummonth=1;;
+     Feb) month=February; nummonth=2;;
+     Mar) month=March; nummonth=3;;
+     Apr) month=April; nummonth=4;;
+@@ -110,18 +130,20 @@ do
+     Aug) month=August; nummonth=8;;
+     Sep) month=September; nummonth=9;;
+     Oct) month=October; nummonth=10;;
+     Nov) month=November; nummonth=11;;
+     Dec) month=December; nummonth=12;;
+   esac
+ done
+ 
++test -n "$month" || error "failed parsing '$ls_command /' output"
++
+ # Get the extended ls output of the file or directory.
+-set dummy x`eval "$ls_command \"\$save_arg1\""`
++set dummy x`eval "$ls_command \"\\\$save_arg1\""`
+ 
+ # Remove all preceding arguments
+ eval $command
+ 
+ # Because of the dummy argument above, month is in $2.
+ #
+ # On a POSIX system, we should have
+ #
+@@ -192,10 +214,11 @@ esac
+ echo $day $month $year
+ 
+ # Local Variables:
+ # mode: shell-script
+ # sh-indentation: 2
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff --git a/js/src/ctypes/libffi/missing b/js/src/ctypes/libffi/missing
+--- a/js/src/ctypes/libffi/missing
++++ b/js/src/ctypes/libffi/missing
+@@ -1,360 +1,215 @@
+ #! /bin/sh
+-# Common stub for a few missing GNU programs while installing.
++# Common wrapper for a few potentially missing GNU programs.
+ 
+-scriptversion=2005-06-08.21
++scriptversion=2012-06-26.16; # UTC
+ 
+-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+-#   Free Software Foundation, Inc.
+-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
++# Copyright (C) 1996-2013 Free Software Foundation, Inc.
++# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+ 
+ if test $# -eq 0; then
+-  echo 1>&2 "Try \`$0 --help' for more information"
++  echo 1>&2 "Try '$0 --help' for more information"
+   exit 1
+ fi
+ 
+-run=:
++case $1 in
+ 
+-# In the cases where this matters, `missing' is being run in the
+-# srcdir already.
+-if test -f configure.ac; then
+-  configure_ac=configure.ac
+-else
+-  configure_ac=configure.in
+-fi
++  --is-lightweight)
++    # Used by our autoconf macros to check whether the available missing
++    # script is modern enough.
++    exit 0
++    ;;
+ 
+-msg="missing on your system"
+-
+-case "$1" in
+---run)
+-  # Try to run requested program, and just exit if it succeeds.
+-  run=
+-  shift
+-  "$@" && exit 0
+-  # Exit code 63 means version mismatch.  This often happens
+-  # when the user try to use an ancient version of a tool on
+-  # a file that requires a minimum version.  In this case we
+-  # we should proceed has if the program had been absent, or
+-  # if --run hadn't been passed.
+-  if test $? = 63; then
+-    run=:
+-    msg="probably too old"
+-  fi
+-  ;;
++  --run)
++    # Back-compat with the calling convention used by older automake.
++    shift
++    ;;
+ 
+   -h|--h|--he|--hel|--help)
+     echo "\
+ $0 [OPTION]... PROGRAM [ARGUMENT]...
+ 
+-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+-error status if there is no known handling for PROGRAM.
++Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
++to PROGRAM being missing or too old.
+ 
+ Options:
+   -h, --help      display this help and exit
+   -v, --version   output version information and exit
+-  --run           try to run the given command, and emulate it if it fails
+ 
+ Supported PROGRAM values:
+-  aclocal      touch file \`aclocal.m4'
+-  autoconf     touch file \`configure'
+-  autoheader   touch file \`config.h.in'
+-  automake     touch all \`Makefile.in' files
+-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+-  flex         create \`lex.yy.c', if possible, from existing .c
+-  help2man     touch the output file
+-  lex          create \`lex.yy.c', if possible, from existing .c
+-  makeinfo     touch the output file
+-  tar          try tar, gnutar, gtar, then tar without non-portable flags
+-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
++  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
++  bison     yacc      flex         lex       help2man
++
++Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
++'g' are ignored when checking the name.
+ 
+ Send bug reports to <bug-automake@gnu.org>."
+     exit $?
+     ;;
+ 
+   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+     echo "missing $scriptversion (GNU Automake)"
+     exit $?
+     ;;
+ 
+   -*)
+-    echo 1>&2 "$0: Unknown \`$1' option"
+-    echo 1>&2 "Try \`$0 --help' for more information"
++    echo 1>&2 "$0: unknown '$1' option"
++    echo 1>&2 "Try '$0 --help' for more information"
+     exit 1
+     ;;
+ 
+ esac
+ 
+-# Now exit if we have it, but it failed.  Also exit now if we
+-# don't have it and --version was passed (most likely to detect
+-# the program).
+-case "$1" in
+-  lex|yacc)
+-    # Not GNU programs, they don't have --version.
++# Run the given program, remember its exit status.
++"$@"; st=$?
++
++# If it succeeded, we are done.
++test $st -eq 0 && exit 0
++
++# Also exit now if we it failed (or wasn't found), and '--version' was
++# passed; such an option is passed most likely to detect whether the
++# program is present and works.
++case $2 in --version|--help) exit $st;; esac
++
++# Exit code 63 means version mismatch.  This often happens when the user
++# tries to use an ancient version of a tool on a file that requires a
++# minimum version.
++if test $st -eq 63; then
++  msg="probably too old"
++elif test $st -eq 127; then
++  # Program was missing.
++  msg="missing on your system"
++else
++  # Program was found and executed, but failed.  Give up.
++  exit $st
++fi
++
++perl_URL=http://www.perl.org/
++flex_URL=http://flex.sourceforge.net/
++gnu_software_URL=http://www.gnu.org/software
++
++program_details ()
++{
++  case $1 in
++    aclocal|automake)
++      echo "The '$1' program is part of the GNU Automake package:"
++      echo "<$gnu_software_URL/automake>"
++      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
++      echo "<$gnu_software_URL/autoconf>"
++      echo "<$gnu_software_URL/m4/>"
++      echo "<$perl_URL>"
++      ;;
++    autoconf|autom4te|autoheader)
++      echo "The '$1' program is part of the GNU Autoconf package:"
++      echo "<$gnu_software_URL/autoconf/>"
++      echo "It also requires GNU m4 and Perl in order to run:"
++      echo "<$gnu_software_URL/m4/>"
++      echo "<$perl_URL>"
++      ;;
++  esac
++}
++
++give_advice ()
++{
++  # Normalize program name to check for.
++  normalized_program=`echo "$1" | sed '
++    s/^gnu-//; t
++    s/^gnu//; t
++    s/^g//; t'`
++
++  printf '%s\n' "'$1' is $msg."
++
++  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
++  case $normalized_program in
++    autoconf*)
++      echo "You should only need it if you modified 'configure.ac',"
++      echo "or m4 files included by it."
++      program_details 'autoconf'
++      ;;
++    autoheader*)
++      echo "You should only need it if you modified 'acconfig.h' or"
++      echo "$configure_deps."
++      program_details 'autoheader'
++      ;;
++    automake*)
++      echo "You should only need it if you modified 'Makefile.am' or"
++      echo "$configure_deps."
++      program_details 'automake'
++      ;;
++    aclocal*)
++      echo "You should only need it if you modified 'acinclude.m4' or"
++      echo "$configure_deps."
++      program_details 'aclocal'
++      ;;
++   autom4te*)
++      echo "You might have modified some maintainer files that require"
++      echo "the 'automa4te' program to be rebuilt."
++      program_details 'autom4te'
++      ;;
++    bison*|yacc*)
++      echo "You should only need it if you modified a '.y' file."
++      echo "You may want to install the GNU Bison package:"
++      echo "<$gnu_software_URL/bison/>"
++      ;;
++    lex*|flex*)
++      echo "You should only need it if you modified a '.l' file."
++      echo "You may want to install the Fast Lexical Analyzer package:"
++      echo "<$flex_URL>"
++      ;;
++    help2man*)
++      echo "You should only need it if you modified a dependency" \
++           "of a man page."
++      echo "You may want to install the GNU Help2man package:"
++      echo "<$gnu_software_URL/help2man/>"
+     ;;
++    makeinfo*)
++      echo "You should only need it if you modified a '.texi' file, or"
++      echo "any other file indirectly affecting the aspect of the manual."
++      echo "You might want to install the Texinfo package:"
++      echo "<$gnu_software_URL/texinfo/>"
++      echo "The spurious makeinfo call might also be the consequence of"
++      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
++      echo "want to install GNU make:"
++      echo "<$gnu_software_URL/make/>"
++      ;;
++    *)
++      echo "You might have modified some files without having the proper"
++      echo "tools for further handling them.  Check the 'README' file, it"
++      echo "often tells you about the needed prerequisites for installing"
++      echo "this package.  You may also peek at any GNU archive site, in"
++      echo "case some other package contains this missing '$1' program."
++      ;;
++  esac
++}
+ 
+-  tar)
+-    if test -n "$run"; then
+-       echo 1>&2 "ERROR: \`tar' requires --run"
+-       exit 1
+-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+-       exit 1
+-    fi
+-    ;;
++give_advice "$1" | sed -e '1s/^/WARNING: /' \
++                       -e '2,$s/^/         /' >&2
+ 
+-  *)
+-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+-       # We have it, but it failed.
+-       exit 1
+-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+-       # Could not run --version or --help.  This is probably someone
+-       # running `$TOOL --version' or `$TOOL --help' to check whether
+-       # $TOOL exists and not knowing $TOOL uses missing.
+-       exit 1
+-    fi
+-    ;;
+-esac
+-
+-# If it does not exist, or fails to run (possibly an outdated version),
+-# try to emulate it.
+-case "$1" in
+-  aclocal*)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+-         to install the \`Automake' and \`Perl' packages.  Grab them from
+-         any GNU archive site."
+-    touch aclocal.m4
+-    ;;
+-
+-  autoconf)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-         you modified \`${configure_ac}'.  You might want to install the
+-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+-         archive site."
+-    touch configure
+-    ;;
+-
+-  autoheader)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+-         from any GNU archive site."
+-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+-    test -z "$files" && files="config.h"
+-    touch_files=
+-    for f in $files; do
+-      case "$f" in
+-      *:*) touch_files="$touch_files "`echo "$f" |
+-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+-      *) touch_files="$touch_files $f.in";;
+-      esac
+-    done
+-    touch $touch_files
+-    ;;
+-
+-  automake*)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+-         You might want to install the \`Automake' and \`Perl' packages.
+-         Grab them from any GNU archive site."
+-    find . -type f -name Makefile.am -print |
+-	   sed 's/\.am$/.in/' |
+-	   while read f; do touch "$f"; done
+-    ;;
+-
+-  autom4te)
+-    echo 1>&2 "\
+-WARNING: \`$1' is needed, but is $msg.
+-         You might have modified some files without having the
+-         proper tools for further handling them.
+-         You can get \`$1' as part of \`Autoconf' from any GNU
+-         archive site."
+-
+-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+-    if test -f "$file"; then
+-	touch $file
+-    else
+-	test -z "$file" || exec >$file
+-	echo "#! /bin/sh"
+-	echo "# Created by GNU Automake missing as a replacement of"
+-	echo "#  $ $@"
+-	echo "exit 0"
+-	chmod +x $file
+-	exit 1
+-    fi
+-    ;;
+-
+-  bison|yacc)
+-    echo 1>&2 "\
+-WARNING: \`$1' $msg.  You should only need it if
+-         you modified a \`.y' file.  You may need the \`Bison' package
+-         in order for those modifications to take effect.  You can get
+-         \`Bison' from any GNU archive site."
+-    rm -f y.tab.c y.tab.h
+-    if [ $# -ne 1 ]; then
+-        eval LASTARG="\${$#}"
+-	case "$LASTARG" in
+-	*.y)
+-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+-	    if [ -f "$SRCFILE" ]; then
+-	         cp "$SRCFILE" y.tab.c
+-	    fi
+-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+-	    if [ -f "$SRCFILE" ]; then
+-	         cp "$SRCFILE" y.tab.h
+-	    fi
+-	  ;;
+-	esac
+-    fi
+-    if [ ! -f y.tab.h ]; then
+-	echo >y.tab.h
+-    fi
+-    if [ ! -f y.tab.c ]; then
+-	echo 'main() { return 0; }' >y.tab.c
+-    fi
+-    ;;
+-
+-  lex|flex)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-         you modified a \`.l' file.  You may need the \`Flex' package
+-         in order for those modifications to take effect.  You can get
+-         \`Flex' from any GNU archive site."
+-    rm -f lex.yy.c
+-    if [ $# -ne 1 ]; then
+-        eval LASTARG="\${$#}"
+-	case "$LASTARG" in
+-	*.l)
+-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+-	    if [ -f "$SRCFILE" ]; then
+-	         cp "$SRCFILE" lex.yy.c
+-	    fi
+-	  ;;
+-	esac
+-    fi
+-    if [ ! -f lex.yy.c ]; then
+-	echo 'main() { return 0; }' >lex.yy.c
+-    fi
+-    ;;
+-
+-  help2man)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-	 you modified a dependency of a manual page.  You may need the
+-	 \`Help2man' package in order for those modifications to take
+-	 effect.  You can get \`Help2man' from any GNU archive site."
+-
+-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+-    if test -z "$file"; then
+-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+-    fi
+-    if [ -f "$file" ]; then
+-	touch $file
+-    else
+-	test -z "$file" || exec >$file
+-	echo ".ab help2man is required to generate this page"
+-	exit 1
+-    fi
+-    ;;
+-
+-  makeinfo)
+-    echo 1>&2 "\
+-WARNING: \`$1' is $msg.  You should only need it if
+-         you modified a \`.texi' or \`.texinfo' file, or any other file
+-         indirectly affecting the aspect of the manual.  The spurious
+-         call might also be the consequence of using a buggy \`make' (AIX,
+-         DU, IRIX).  You might want to install the \`Texinfo' package or
+-         the \`GNU make' package.  Grab either from any GNU archive site."
+-    # The file to touch is that specified with -o ...
+-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+-    if test -z "$file"; then
+-      # ... or it is the one specified with @setfilename ...
+-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+-    fi
+-    # If the file does not exist, the user really needs makeinfo;
+-    # let's fail without touching anything.
+-    test -f $file || exit 1
+-    touch $file
+-    ;;
+-
+-  tar)
+-    shift
+-
+-    # We have already tried tar in the generic part.
+-    # Look for gnutar/gtar before invocation to avoid ugly error
+-    # messages.
+-    if (gnutar --version > /dev/null 2>&1); then
+-       gnutar "$@" && exit 0
+-    fi
+-    if (gtar --version > /dev/null 2>&1); then
+-       gtar "$@" && exit 0
+-    fi
+-    firstarg="$1"
+-    if shift; then
+-	case "$firstarg" in
+-	*o*)
+-	    firstarg=`echo "$firstarg" | sed s/o//`
+-	    tar "$firstarg" "$@" && exit 0
+-	    ;;
+-	esac
+-	case "$firstarg" in
+-	*h*)
+-	    firstarg=`echo "$firstarg" | sed s/h//`
+-	    tar "$firstarg" "$@" && exit 0
+-	    ;;
+-	esac
+-    fi
+-
+-    echo 1>&2 "\
+-WARNING: I can't seem to be able to run \`tar' with the given arguments.
+-         You may want to install GNU tar or Free paxutils, or check the
+-         command line arguments."
+-    exit 1
+-    ;;
+-
+-  *)
+-    echo 1>&2 "\
+-WARNING: \`$1' is needed, and is $msg.
+-         You might have modified some files without having the
+-         proper tools for further handling them.  Check the \`README' file,
+-         it often tells you about the needed prerequisites for installing
+-         this package.  You may also peek at any GNU archive site, in case
+-         some other package would contain this missing \`$1' program."
+-    exit 1
+-    ;;
+-esac
+-
+-exit 0
++# Propagate the correct exit status (expected to be 127 for a program
++# not found, 63 for a program that failed due to version mismatch).
++exit $st
+ 
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff --git a/js/src/ctypes/libffi/msvcc.sh b/js/src/ctypes/libffi/msvcc.sh
+--- a/js/src/ctypes/libffi/msvcc.sh
++++ b/js/src/ctypes/libffi/msvcc.sh
+@@ -1,19 +1,53 @@
+ #!/bin/sh
+ 
+-# This Source Code Form is subject to the terms of the Mozilla Public
+-# License, v. 2.0. If a copy of the MPL was not distributed with this
+-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
++# ***** BEGIN LICENSE BLOCK *****
++# Version: MPL 1.1/GPL 2.0/LGPL 2.1
++#
++# The contents of this file are subject to the Mozilla Public License Version
++# 1.1 (the "License"); you may not use this file except in compliance with
++# the License. You may obtain a copy of the License at
++# http://www.mozilla.org/MPL/
++#
++# Software distributed under the License is distributed on an "AS IS" basis,
++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
++# for the specific language governing rights and limitations under the
++# License.
++#
++# The Original Code is the MSVC wrappificator.
++#
++# The Initial Developer of the Original Code is
++# Timothy Wall <twalljava@dev.java.net>.
++# Portions created by the Initial Developer are Copyright (C) 2009
++# the Initial Developer. All Rights Reserved.
++#
++# Contributor(s):
++#   Daniel Witte <dwitte@mozilla.com>
++#
++# Alternatively, the contents of this file may be used under the terms of
++# either the GNU General Public License Version 2 or later (the "GPL"), or
++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++# in which case the provisions of the GPL or the LGPL are applicable instead
++# of those above. If you wish to allow use of your version of this file only
++# under the terms of either the GPL or the LGPL, and not to allow others to
++# use your version of this file under the terms of the MPL, indicate your
++# decision by deleting the provisions above and replace them with the notice
++# and other provisions required by the GPL or the LGPL. If you do not delete
++# the provisions above, a recipient may use your version of this file under
++# the terms of any one of the MPL, the GPL or the LGPL.
++#
++# ***** END LICENSE BLOCK *****
+ 
+ #
+ # GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC
+ # format and translated into something sensible for cl or ml.
+ #
+ 
++args_orig=$@
+ args="-nologo -W3"
+ md=-MD
+ cl="cl"
+ ml="ml"
+ safeseh="-safeseh"
+ output=
+ 
+ while [ $# -gt 0 ]
+@@ -34,24 +68,45 @@ do
+       safeseh=
+       shift 1
+     ;;
+     -O0)
+       args="$args -Od"
+       shift 1
+     ;;
+     -O*)
+-      # If we're optimizing, make sure we explicitly turn on some optimizations
+-      # that are implicitly disabled by debug symbols (-Zi).
+-      args="$args $1 -OPT:REF -OPT:ICF -INCREMENTAL:NO"
++      # Runtime error checks (enabled by setting -RTC1 in the -DFFI_DEBUG
++      # case below) are not compatible with optimization flags and will
++      # cause the build to fail. Therefore, drop the optimization flag if
++      # -DFFI_DEBUG is also set.
++      case $args_orig in
++        *-DFFI_DEBUG*)
++          args="$args"
++        ;;
++        *)
++          # The ax_cc_maxopt.m4 macro from the upstream autoconf-archive
++          # project doesn't support MSVC and therefore ends up trying to
++          # use -O3. Use the equivalent "max optimization" flag for MSVC
++          # instead of erroring out.
++          case $1 in
++            -O3)
++              args="$args -O2"
++            ;;
++            *)
++              args="$args $1"
++            ;;
++          esac
++          opt="true"
++        ;;
++      esac
+       shift 1
+     ;;
+     -g)
+       # Enable debug symbol generation.
+-      args="$args -Zi -DEBUG"
++      args="$args -Zi"
+       shift 1
+     ;;
+     -DFFI_DEBUG)
+       # Link against debug CRT and enable runtime error checks.
+       args="$args -RTC1"
+       defines="$defines $1"
+       md=-MDd
+       shift 1
+@@ -88,16 +143,20 @@ do
+       # TODO map extra warnings
+       shift 1
+     ;;
+     -Wall)
+       # -Wall on MSVC is overzealous, and we already build with -W3. Nothing
+       # to do here.
+       shift 1
+     ;;
++    -pedantic)
++      # libffi tests -pedantic with -Wall, so drop it also.
++      shift 1
++    ;;
+     -Werror)
+       args="$args -WX"
+       shift 1
+     ;;
+     -W*)
+       # TODO map specific warnings
+       shift 1
+     ;;
+@@ -132,16 +191,23 @@ do
+     *)
+       # Assume it's an MSVC argument, and pass it through.
+       args="$args $1"
+       shift 1
+     ;;
+   esac
+ done
+ 
++# If -Zi is specified, certain optimizations are implicitly disabled
++# by MSVC. Add back those optimizations if this is an optimized build.
++# NOTE: These arguments must come after all others.
++if [ -n "$opt" ]; then
++    args="$args -link -OPT:REF -OPT:ICF -INCREMENTAL:NO"
++fi
++
+ if [ -n "$assembly" ]; then
+     if [ -z "$outdir" ]; then
+       outdir="."
+     fi
+     ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')"
+     echo "$cl -nologo -EP $includes $defines $src > $ppsrc"
+     "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $?
+     output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')"
+@@ -151,14 +217,17 @@ if [ -n "$assembly" ]; then
+     eval "\"$ml\" $args"
+     result=$?
+ 
+     # required to fix ml64 broken output?
+     #mv *.obj $outdir
+ else
+     args="$md $args"
+     echo "$cl $args"
+-    eval "\"$cl\" $args"
++    # Return an error code of 1 if an invalid command line parameter is passed
++    # instead of just ignoring it.
++    eval "(\"$cl\" $args 2>&1 1>&3 | \
++          awk '{print \$0} /D9002/ {error=1} END{exit error}' >&2) 3>&1"
+     result=$?
+ fi
+ 
+ exit $result
+ 
+diff --git a/js/src/ctypes/libffi/src/aarch64/ffi.c b/js/src/ctypes/libffi/src/aarch64/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/aarch64/ffi.c
+@@ -0,0 +1,1133 @@
++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++``Software''), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++#include <stdio.h>
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++
++/* Stack alignment requirement in bytes */
++#if defined (__APPLE__)
++#define AARCH64_STACK_ALIGN 1
++#else
++#define AARCH64_STACK_ALIGN 16
++#endif
++
++#define N_X_ARG_REG 8
++#define N_V_ARG_REG 8
++
++#define AARCH64_FFI_WITH_V (1 << AARCH64_FFI_WITH_V_BIT)
++
++union _d
++{
++  UINT64 d;
++  UINT32 s[2];
++};
++
++struct call_context
++{
++  UINT64 x [AARCH64_N_XREG];
++  struct
++  {
++    union _d d[2];
++  } v [AARCH64_N_VREG];
++};
++
++#if defined (__clang__) && defined (__APPLE__)
++extern void
++sys_icache_invalidate (void *start, size_t len);
++#endif
++
++static inline void
++ffi_clear_cache (void *start, void *end)
++{
++#if defined (__clang__) && defined (__APPLE__)
++	sys_icache_invalidate (start, (char *)end - (char *)start);
++#elif defined (__GNUC__)
++	__builtin___clear_cache (start, end);
++#else
++#error "Missing builtin to flush instruction cache"
++#endif
++}
++
++static void *
++get_x_addr (struct call_context *context, unsigned n)
++{
++  return &context->x[n];
++}
++
++static void *
++get_s_addr (struct call_context *context, unsigned n)
++{
++#if defined __AARCH64EB__
++  return &context->v[n].d[1].s[1];
++#else
++  return &context->v[n].d[0].s[0];
++#endif
++}
++
++static void *
++get_d_addr (struct call_context *context, unsigned n)
++{
++#if defined __AARCH64EB__
++  return &context->v[n].d[1];
++#else
++  return &context->v[n].d[0];
++#endif
++}
++
++static void *
++get_v_addr (struct call_context *context, unsigned n)
++{
++  return &context->v[n];
++}
++
++/* Return the memory location at which a basic type would reside
++   were it to have been stored in register n.  */
++
++static void *
++get_basic_type_addr (unsigned short type, struct call_context *context,
++		     unsigned n)
++{
++  switch (type)
++    {
++    case FFI_TYPE_FLOAT:
++      return get_s_addr (context, n);
++    case FFI_TYPE_DOUBLE:
++      return get_d_addr (context, n);
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      return get_v_addr (context, n);
++#endif
++    case FFI_TYPE_UINT8:
++    case FFI_TYPE_SINT8:
++    case FFI_TYPE_UINT16:
++    case FFI_TYPE_SINT16:
++    case FFI_TYPE_UINT32:
++    case FFI_TYPE_SINT32:
++    case FFI_TYPE_INT:
++    case FFI_TYPE_POINTER:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_SINT64:
++      return get_x_addr (context, n);
++    case FFI_TYPE_VOID:
++      return NULL;
++    default:
++      FFI_ASSERT (0);
++      return NULL;
++    }
++}
++
++/* Return the alignment width for each of the basic types.  */
++
++static size_t
++get_basic_type_alignment (unsigned short type)
++{
++  switch (type)
++    {
++    case FFI_TYPE_FLOAT:
++    case FFI_TYPE_DOUBLE:
++      return sizeof (UINT64);
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      return sizeof (long double);
++#endif
++    case FFI_TYPE_UINT8:
++    case FFI_TYPE_SINT8:
++#if defined (__APPLE__)
++	  return sizeof (UINT8);
++#endif
++    case FFI_TYPE_UINT16:
++    case FFI_TYPE_SINT16:
++#if defined (__APPLE__)
++	  return sizeof (UINT16);
++#endif
++    case FFI_TYPE_UINT32:
++    case FFI_TYPE_INT:
++    case FFI_TYPE_SINT32:
++#if defined (__APPLE__)
++	  return sizeof (UINT32);
++#endif
++    case FFI_TYPE_POINTER:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_SINT64:
++      return sizeof (UINT64);
++
++    default:
++      FFI_ASSERT (0);
++      return 0;
++    }
++}
++
++/* Return the size in bytes for each of the basic types.  */
++
++static size_t
++get_basic_type_size (unsigned short type)
++{
++  switch (type)
++    {
++    case FFI_TYPE_FLOAT:
++      return sizeof (UINT32);
++    case FFI_TYPE_DOUBLE:
++      return sizeof (UINT64);
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      return sizeof (long double);
++#endif
++    case FFI_TYPE_UINT8:
++      return sizeof (UINT8);
++    case FFI_TYPE_SINT8:
++      return sizeof (SINT8);
++    case FFI_TYPE_UINT16:
++      return sizeof (UINT16);
++    case FFI_TYPE_SINT16:
++      return sizeof (SINT16);
++    case FFI_TYPE_UINT32:
++      return sizeof (UINT32);
++    case FFI_TYPE_INT:
++    case FFI_TYPE_SINT32:
++      return sizeof (SINT32);
++    case FFI_TYPE_POINTER:
++    case FFI_TYPE_UINT64:
++      return sizeof (UINT64);
++    case FFI_TYPE_SINT64:
++      return sizeof (SINT64);
++
++    default:
++      FFI_ASSERT (0);
++      return 0;
++    }
++}
++
++extern void
++ffi_call_SYSV (unsigned (*)(struct call_context *context, unsigned char *,
++			    extended_cif *),
++               struct call_context *context,
++               extended_cif *,
++               size_t,
++               void (*fn)(void));
++
++extern void
++ffi_closure_SYSV (ffi_closure *);
++
++/* Test for an FFI floating point representation.  */
++
++static unsigned
++is_floating_type (unsigned short type)
++{
++  return (type == FFI_TYPE_FLOAT || type == FFI_TYPE_DOUBLE
++	  || type == FFI_TYPE_LONGDOUBLE);
++}
++
++/* Test for a homogeneous structure.  */
++
++static unsigned short
++get_homogeneous_type (ffi_type *ty)
++{
++  if (ty->type == FFI_TYPE_STRUCT && ty->elements)
++    {
++      unsigned i;
++      unsigned short candidate_type
++	= get_homogeneous_type (ty->elements[0]);
++      for (i =1; ty->elements[i]; i++)
++	{
++	  unsigned short iteration_type = 0;
++	  /* If we have a nested struct, we must find its homogeneous type.
++	     If that fits with our candidate type, we are still
++	     homogeneous.  */
++	  if (ty->elements[i]->type == FFI_TYPE_STRUCT
++	      && ty->elements[i]->elements)
++	    {
++	      iteration_type = get_homogeneous_type (ty->elements[i]);
++	    }
++	  else
++	    {
++	      iteration_type = ty->elements[i]->type;
++	    }
++
++	  /* If we are not homogeneous, return FFI_TYPE_STRUCT.  */
++	  if (candidate_type != iteration_type)
++	    return FFI_TYPE_STRUCT;
++	}
++      return candidate_type;
++    }
++
++  /* Base case, we have no more levels of nesting, so we
++     are a basic type, and so, trivially homogeneous in that type.  */
++  return ty->type;
++}
++
++/* Determine the number of elements within a STRUCT.
++
++   Note, we must handle nested structs.
++
++   If ty is not a STRUCT this function will return 0.  */
++
++static unsigned
++element_count (ffi_type *ty)
++{
++  if (ty->type == FFI_TYPE_STRUCT && ty->elements)
++    {
++      unsigned n;
++      unsigned elems = 0;
++      for (n = 0; ty->elements[n]; n++)
++	{
++	  if (ty->elements[n]->type == FFI_TYPE_STRUCT
++	      && ty->elements[n]->elements)
++	    elems += element_count (ty->elements[n]);
++	  else
++	    elems++;
++	}
++      return elems;
++    }
++  return 0;
++}
++
++/* Test for a homogeneous floating point aggregate.
++
++   A homogeneous floating point aggregate is a homogeneous aggregate of
++   a half- single- or double- precision floating point type with one
++   to four elements.  Note that this includes nested structs of the
++   basic type.  */
++
++static int
++is_hfa (ffi_type *ty)
++{
++  if (ty->type == FFI_TYPE_STRUCT
++      && ty->elements[0]
++      && is_floating_type (get_homogeneous_type (ty)))
++    {
++      unsigned n = element_count (ty);
++      return n >= 1 && n <= 4;
++    }
++  return 0;
++}
++
++/* Test if an ffi_type is a candidate for passing in a register.
++
++   This test does not check that sufficient registers of the
++   appropriate class are actually available, merely that IFF
++   sufficient registers are available then the argument will be passed
++   in register(s).
++
++   Note that an ffi_type that is deemed to be a register candidate
++   will always be returned in registers.
++
++   Returns 1 if a register candidate else 0.  */
++
++static int
++is_register_candidate (ffi_type *ty)
++{
++  switch (ty->type)
++    {
++    case FFI_TYPE_VOID:
++    case FFI_TYPE_FLOAT:
++    case FFI_TYPE_DOUBLE:
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++#endif
++    case FFI_TYPE_UINT8:
++    case FFI_TYPE_UINT16:
++    case FFI_TYPE_UINT32:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_POINTER:
++    case FFI_TYPE_SINT8:
++    case FFI_TYPE_SINT16:
++    case FFI_TYPE_SINT32:
++    case FFI_TYPE_INT:
++    case FFI_TYPE_SINT64:
++      return 1;
++
++    case FFI_TYPE_STRUCT:
++      if (is_hfa (ty))
++        {
++          return 1;
++        }
++      else if (ty->size > 16)
++        {
++          /* Too large. Will be replaced with a pointer to memory. The
++             pointer MAY be passed in a register, but the value will
++             not. This test specifically fails since the argument will
++             never be passed by value in registers. */
++          return 0;
++        }
++      else
++        {
++          /* Might be passed in registers depending on the number of
++             registers required. */
++          return (ty->size + 7) / 8 < N_X_ARG_REG;
++        }
++      break;
++
++    default:
++      FFI_ASSERT (0);
++      break;
++    }
++
++  return 0;
++}
++
++/* Test if an ffi_type argument or result is a candidate for a vector
++   register.  */
++
++static int
++is_v_register_candidate (ffi_type *ty)
++{
++  return is_floating_type (ty->type)
++	   || (ty->type == FFI_TYPE_STRUCT && is_hfa (ty));
++}
++
++/* Representation of the procedure call argument marshalling
++   state.
++
++   The terse state variable names match the names used in the AARCH64
++   PCS. */
++
++struct arg_state
++{
++  unsigned ngrn;                /* Next general-purpose register number. */
++  unsigned nsrn;                /* Next vector register number. */
++  size_t nsaa;                  /* Next stack offset. */
++};
++
++/* Initialize a procedure call argument marshalling state.  */
++static void
++arg_init (struct arg_state *state, size_t call_frame_size)
++{
++  state->ngrn = 0;
++  state->nsrn = 0;
++  state->nsaa = 0;
++}
++
++/* Return the number of available consecutive core argument
++   registers.  */
++
++static unsigned
++available_x (struct arg_state *state)
++{
++  return N_X_ARG_REG - state->ngrn;
++}
++
++/* Return the number of available consecutive vector argument
++   registers.  */
++
++static unsigned
++available_v (struct arg_state *state)
++{
++  return N_V_ARG_REG - state->nsrn;
++}
++
++static void *
++allocate_to_x (struct call_context *context, struct arg_state *state)
++{
++  FFI_ASSERT (state->ngrn < N_X_ARG_REG);
++  return get_x_addr (context, (state->ngrn)++);
++}
++
++static void *
++allocate_to_s (struct call_context *context, struct arg_state *state)
++{
++  FFI_ASSERT (state->nsrn < N_V_ARG_REG);
++  return get_s_addr (context, (state->nsrn)++);
++}
++
++static void *
++allocate_to_d (struct call_context *context, struct arg_state *state)
++{
++  FFI_ASSERT (state->nsrn < N_V_ARG_REG);
++  return get_d_addr (context, (state->nsrn)++);
++}
++
++static void *
++allocate_to_v (struct call_context *context, struct arg_state *state)
++{
++  FFI_ASSERT (state->nsrn < N_V_ARG_REG);
++  return get_v_addr (context, (state->nsrn)++);
++}
++
++/* Allocate an aligned slot on the stack and return a pointer to it.  */
++static void *
++allocate_to_stack (struct arg_state *state, void *stack, size_t alignment,
++		   size_t size)
++{
++  void *allocation;
++
++  /* Round up the NSAA to the larger of 8 or the natural
++     alignment of the argument's type.  */
++  state->nsaa = ALIGN (state->nsaa, alignment);
++  state->nsaa = ALIGN (state->nsaa, alignment);
++#if !defined (__APPLE__)
++  state->nsaa = ALIGN (state->nsaa, 8);
++#endif
++
++  allocation = stack + state->nsaa;
++
++  state->nsaa += size;
++  return allocation;
++}
++
++static void
++copy_basic_type (void *dest, void *source, unsigned short type)
++{
++  /* This is necessary to ensure that basic types are copied
++     sign extended to 64-bits as libffi expects.  */
++  switch (type)
++    {
++    case FFI_TYPE_FLOAT:
++      *(float *) dest = *(float *) source;
++      break;
++    case FFI_TYPE_DOUBLE:
++      *(double *) dest = *(double *) source;
++      break;
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      *(long double *) dest = *(long double *) source;
++      break;
++#endif
++    case FFI_TYPE_UINT8:
++      *(ffi_arg *) dest = *(UINT8 *) source;
++      break;
++    case FFI_TYPE_SINT8:
++      *(ffi_sarg *) dest = *(SINT8 *) source;
++      break;
++    case FFI_TYPE_UINT16:
++      *(ffi_arg *) dest = *(UINT16 *) source;
++      break;
++    case FFI_TYPE_SINT16:
++      *(ffi_sarg *) dest = *(SINT16 *) source;
++      break;
++    case FFI_TYPE_UINT32:
++      *(ffi_arg *) dest = *(UINT32 *) source;
++      break;
++    case FFI_TYPE_INT:
++    case FFI_TYPE_SINT32:
++      *(ffi_sarg *) dest = *(SINT32 *) source;
++      break;
++    case FFI_TYPE_POINTER:
++    case FFI_TYPE_UINT64:
++      *(ffi_arg *) dest = *(UINT64 *) source;
++      break;
++    case FFI_TYPE_SINT64:
++      *(ffi_sarg *) dest = *(SINT64 *) source;
++      break;
++    case FFI_TYPE_VOID:
++      break;
++
++    default:
++      FFI_ASSERT (0);
++    }
++}
++
++static void
++copy_hfa_to_reg_or_stack (void *memory,
++			  ffi_type *ty,
++			  struct call_context *context,
++			  unsigned char *stack,
++			  struct arg_state *state)
++{
++  unsigned elems = element_count (ty);
++  if (available_v (state) < elems)
++    {
++      /* There are insufficient V registers. Further V register allocations
++	 are prevented, the NSAA is adjusted (by allocate_to_stack ())
++	 and the argument is copied to memory at the adjusted NSAA.  */
++      state->nsrn = N_V_ARG_REG;
++      memcpy (allocate_to_stack (state, stack, ty->alignment, ty->size),
++	      memory,
++	      ty->size);
++    }
++  else
++    {
++      int i;
++      unsigned short type = get_homogeneous_type (ty);
++      for (i = 0; i < elems; i++)
++	{
++	  void *reg = allocate_to_v (context, state);
++	  copy_basic_type (reg, memory, type);
++	  memory += get_basic_type_size (type);
++	}
++    }
++}
++
++/* Either allocate an appropriate register for the argument type, or if
++   none are available, allocate a stack slot and return a pointer
++   to the allocated space.  */
++
++static void *
++allocate_to_register_or_stack (struct call_context *context,
++			       unsigned char *stack,
++			       struct arg_state *state,
++			       unsigned short type)
++{
++  size_t alignment = get_basic_type_alignment (type);
++  size_t size = alignment;
++  switch (type)
++    {
++    case FFI_TYPE_FLOAT:
++      /* This is the only case for which the allocated stack size
++	 should not match the alignment of the type.  */
++      size = sizeof (UINT32);
++      /* Fall through.  */
++    case FFI_TYPE_DOUBLE:
++      if (state->nsrn < N_V_ARG_REG)
++	return allocate_to_d (context, state);
++      state->nsrn = N_V_ARG_REG;
++      break;
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      if (state->nsrn < N_V_ARG_REG)
++	return allocate_to_v (context, state);
++      state->nsrn = N_V_ARG_REG;
++      break;
++#endif
++    case FFI_TYPE_UINT8:
++    case FFI_TYPE_SINT8:
++    case FFI_TYPE_UINT16:
++    case FFI_TYPE_SINT16:
++    case FFI_TYPE_UINT32:
++    case FFI_TYPE_SINT32:
++    case FFI_TYPE_INT:
++    case FFI_TYPE_POINTER:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_SINT64:
++      if (state->ngrn < N_X_ARG_REG)
++	return allocate_to_x (context, state);
++      state->ngrn = N_X_ARG_REG;
++      break;
++    default:
++      FFI_ASSERT (0);
++    }
++
++    return allocate_to_stack (state, stack, alignment, size);
++}
++
++/* Copy a value to an appropriate register, or if none are
++   available, to the stack.  */
++
++static void
++copy_to_register_or_stack (struct call_context *context,
++			   unsigned char *stack,
++			   struct arg_state *state,
++			   void *value,
++			   unsigned short type)
++{
++  copy_basic_type (
++	  allocate_to_register_or_stack (context, stack, state, type),
++	  value,
++	  type);
++}
++
++/* Marshall the arguments from FFI representation to procedure call
++   context and stack.  */
++
++static unsigned
++aarch64_prep_args (struct call_context *context, unsigned char *stack,
++		   extended_cif *ecif)
++{
++  int i;
++  struct arg_state state;
++
++  arg_init (&state, ALIGN(ecif->cif->bytes, 16));
++
++  for (i = 0; i < ecif->cif->nargs; i++)
++    {
++      ffi_type *ty = ecif->cif->arg_types[i];
++      switch (ty->type)
++	{
++	case FFI_TYPE_VOID:
++	  FFI_ASSERT (0);
++	  break;
++
++	/* If the argument is a basic type the argument is allocated to an
++	   appropriate register, or if none are available, to the stack.  */
++	case FFI_TYPE_FLOAT:
++	case FFI_TYPE_DOUBLE:
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++#endif
++	case FFI_TYPE_UINT8:
++	case FFI_TYPE_SINT8:
++	case FFI_TYPE_UINT16:
++	case FFI_TYPE_SINT16:
++	case FFI_TYPE_UINT32:
++	case FFI_TYPE_INT:
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_POINTER:
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	  copy_to_register_or_stack (context, stack, &state,
++				     ecif->avalue[i], ty->type);
++	  break;
++
++	case FFI_TYPE_STRUCT:
++	  if (is_hfa (ty))
++	    {
++	      copy_hfa_to_reg_or_stack (ecif->avalue[i], ty, context,
++					stack, &state);
++	    }
++	  else if (ty->size > 16)
++	    {
++	      /* If the argument is a composite type that is larger than 16
++		 bytes, then the argument has been copied to memory, and
++		 the argument is replaced by a pointer to the copy.  */
++
++	      copy_to_register_or_stack (context, stack, &state,
++					 &(ecif->avalue[i]), FFI_TYPE_POINTER);
++	    }
++	  else if (available_x (&state) >= (ty->size + 7) / 8)
++	    {
++	      /* If the argument is a composite type and the size in
++		 double-words is not more than the number of available
++		 X registers, then the argument is copied into consecutive
++		 X registers.  */
++	      int j;
++	      for (j = 0; j < (ty->size + 7) / 8; j++)
++		{
++		  memcpy (allocate_to_x (context, &state),
++			  &(((UINT64 *) ecif->avalue[i])[j]),
++			  sizeof (UINT64));
++		}
++	    }
++	  else
++	    {
++	      /* Otherwise, there are insufficient X registers. Further X
++		 register allocations are prevented, the NSAA is adjusted
++		 (by allocate_to_stack ()) and the argument is copied to
++		 memory at the adjusted NSAA.  */
++	      state.ngrn = N_X_ARG_REG;
++
++	      memcpy (allocate_to_stack (&state, stack, ty->alignment,
++					 ty->size), ecif->avalue + i, ty->size);
++	    }
++	  break;
++
++	default:
++	  FFI_ASSERT (0);
++	  break;
++	}
++    }
++
++  return ecif->cif->aarch64_flags;
++}
++
++ffi_status
++ffi_prep_cif_machdep (ffi_cif *cif)
++{
++  /* Round the stack up to a multiple of the stack alignment requirement. */
++  cif->bytes =
++    (cif->bytes + (AARCH64_STACK_ALIGN - 1)) & ~ (AARCH64_STACK_ALIGN - 1);
++
++  /* Initialize our flags. We are interested if this CIF will touch a
++     vector register, if so we will enable context save and load to
++     those registers, otherwise not. This is intended to be friendly
++     to lazy float context switching in the kernel.  */
++  cif->aarch64_flags = 0;
++
++  if (is_v_register_candidate (cif->rtype))
++    {
++      cif->aarch64_flags |= AARCH64_FFI_WITH_V;
++    }
++  else
++    {
++      int i;
++      for (i = 0; i < cif->nargs; i++)
++        if (is_v_register_candidate (cif->arg_types[i]))
++          {
++            cif->aarch64_flags |= AARCH64_FFI_WITH_V;
++            break;
++          }
++    }
++
++  return FFI_OK;
++}
++
++/* Call a function with the provided arguments and capture the return
++   value.  */
++void
++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
++{
++  extended_cif ecif;
++
++  ecif.cif = cif;
++  ecif.avalue = avalue;
++  ecif.rvalue = rvalue;
++
++  switch (cif->abi)
++    {
++    case FFI_SYSV:
++      {
++        struct call_context context;
++	size_t stack_bytes;
++
++	/* Figure out the total amount of stack space we need, the
++	   above call frame space needs to be 16 bytes aligned to
++	   ensure correct alignment of the first object inserted in
++	   that space hence the ALIGN applied to cif->bytes.*/
++	stack_bytes = ALIGN(cif->bytes, 16);
++
++	memset (&context, 0, sizeof (context));
++        if (is_register_candidate (cif->rtype))
++          {
++            ffi_call_SYSV (aarch64_prep_args, &context, &ecif, stack_bytes, fn);
++            switch (cif->rtype->type)
++              {
++              case FFI_TYPE_VOID:
++              case FFI_TYPE_FLOAT:
++              case FFI_TYPE_DOUBLE:
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++              case FFI_TYPE_LONGDOUBLE:
++#endif
++              case FFI_TYPE_UINT8:
++              case FFI_TYPE_SINT8:
++              case FFI_TYPE_UINT16:
++              case FFI_TYPE_SINT16:
++              case FFI_TYPE_UINT32:
++              case FFI_TYPE_SINT32:
++              case FFI_TYPE_POINTER:
++              case FFI_TYPE_UINT64:
++              case FFI_TYPE_INT:
++              case FFI_TYPE_SINT64:
++		{
++		  void *addr = get_basic_type_addr (cif->rtype->type,
++						    &context, 0);
++		  copy_basic_type (rvalue, addr, cif->rtype->type);
++		  break;
++		}
++
++              case FFI_TYPE_STRUCT:
++                if (is_hfa (cif->rtype))
++		  {
++		    int j;
++		    unsigned short type = get_homogeneous_type (cif->rtype);
++		    unsigned elems = element_count (cif->rtype);
++		    for (j = 0; j < elems; j++)
++		      {
++			void *reg = get_basic_type_addr (type, &context, j);
++			copy_basic_type (rvalue, reg, type);
++			rvalue += get_basic_type_size (type);
++		      }
++		  }
++                else if ((cif->rtype->size + 7) / 8 < N_X_ARG_REG)
++                  {
++                    size_t size = ALIGN (cif->rtype->size, sizeof (UINT64));
++                    memcpy (rvalue, get_x_addr (&context, 0), size);
++                  }
++                else
++                  {
++                    FFI_ASSERT (0);
++                  }
++                break;
++
++              default:
++                FFI_ASSERT (0);
++                break;
++              }
++          }
++        else
++          {
++            memcpy (get_x_addr (&context, 8), &rvalue, sizeof (UINT64));
++            ffi_call_SYSV (aarch64_prep_args, &context, &ecif,
++			   stack_bytes, fn);
++          }
++        break;
++      }
++
++    default:
++      FFI_ASSERT (0);
++      break;
++    }
++}
++
++static unsigned char trampoline [] =
++{ 0x70, 0x00, 0x00, 0x58,	/* ldr	x16, 1f	*/
++  0x91, 0x00, 0x00, 0x10,	/* adr	x17, 2f	*/
++  0x00, 0x02, 0x1f, 0xd6	/* br	x16	*/
++};
++
++/* Build a trampoline.  */
++
++#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX,FLAGS)			\
++  ({unsigned char *__tramp = (unsigned char*)(TRAMP);			\
++    UINT64  __fun = (UINT64)(FUN);					\
++    UINT64  __ctx = (UINT64)(CTX);					\
++    UINT64  __flags = (UINT64)(FLAGS);					\
++    memcpy (__tramp, trampoline, sizeof (trampoline));			\
++    memcpy (__tramp + 12, &__fun, sizeof (__fun));			\
++    memcpy (__tramp + 20, &__ctx, sizeof (__ctx));			\
++    memcpy (__tramp + 28, &__flags, sizeof (__flags));			\
++    ffi_clear_cache(__tramp, __tramp + FFI_TRAMPOLINE_SIZE);		\
++  })
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure* closure,
++                      ffi_cif* cif,
++                      void (*fun)(ffi_cif*,void*,void**,void*),
++                      void *user_data,
++                      void *codeloc)
++{
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
++
++  FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_SYSV, codeloc,
++		       cif->aarch64_flags);
++
++  closure->cif  = cif;
++  closure->user_data = user_data;
++  closure->fun  = fun;
++
++  return FFI_OK;
++}
++
++/* Primary handler to setup and invoke a function within a closure.
++
++   A closure when invoked enters via the assembler wrapper
++   ffi_closure_SYSV(). The wrapper allocates a call context on the
++   stack, saves the interesting registers (from the perspective of
++   the calling convention) into the context then passes control to
++   ffi_closure_SYSV_inner() passing the saved context and a pointer to
++   the stack at the point ffi_closure_SYSV() was invoked.
++
++   On the return path the assembler wrapper will reload call context
++   registers.
++
++   ffi_closure_SYSV_inner() marshalls the call context into ffi value
++   descriptors, invokes the wrapped function, then marshalls the return
++   value back into the call context.  */
++
++void FFI_HIDDEN
++ffi_closure_SYSV_inner (ffi_closure *closure, struct call_context *context,
++			void *stack)
++{
++  ffi_cif *cif = closure->cif;
++  void **avalue = (void**) alloca (cif->nargs * sizeof (void*));
++  void *rvalue = NULL;
++  int i;
++  struct arg_state state;
++
++  arg_init (&state, ALIGN(cif->bytes, 16));
++
++  for (i = 0; i < cif->nargs; i++)
++    {
++      ffi_type *ty = cif->arg_types[i];
++
++      switch (ty->type)
++	{
++	case FFI_TYPE_VOID:
++	  FFI_ASSERT (0);
++	  break;
++
++	case FFI_TYPE_UINT8:
++	case FFI_TYPE_SINT8:
++	case FFI_TYPE_UINT16:
++	case FFI_TYPE_SINT16:
++	case FFI_TYPE_UINT32:
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_INT:
++	case FFI_TYPE_POINTER:
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	case  FFI_TYPE_FLOAT:
++	case  FFI_TYPE_DOUBLE:
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++	case  FFI_TYPE_LONGDOUBLE:
++	  avalue[i] = allocate_to_register_or_stack (context, stack,
++						     &state, ty->type);
++	  break;
++#endif
++
++	case FFI_TYPE_STRUCT:
++	  if (is_hfa (ty))
++	    {
++	      unsigned n = element_count (ty);
++	      if (available_v (&state) < n)
++		{
++		  state.nsrn = N_V_ARG_REG;
++		  avalue[i] = allocate_to_stack (&state, stack, ty->alignment,
++						 ty->size);
++		}
++	      else
++		{
++		  switch (get_homogeneous_type (ty))
++		    {
++		    case FFI_TYPE_FLOAT:
++		      {
++			/* Eeek! We need a pointer to the structure,
++			   however the homogeneous float elements are
++			   being passed in individual S registers,
++			   therefore the structure is not represented as
++			   a contiguous sequence of bytes in our saved
++			   register context. We need to fake up a copy
++			   of the structure laid out in memory
++			   correctly. The fake can be tossed once the
++			   closure function has returned hence alloca()
++			   is sufficient. */
++			int j;
++			UINT32 *p = avalue[i] = alloca (ty->size);
++			for (j = 0; j < element_count (ty); j++)
++			  memcpy (&p[j],
++				  allocate_to_s (context, &state),
++				  sizeof (*p));
++			break;
++		      }
++
++		    case FFI_TYPE_DOUBLE:
++		      {
++			/* Eeek! We need a pointer to the structure,
++			   however the homogeneous float elements are
++			   being passed in individual S registers,
++			   therefore the structure is not represented as
++			   a contiguous sequence of bytes in our saved
++			   register context. We need to fake up a copy
++			   of the structure laid out in memory
++			   correctly. The fake can be tossed once the
++			   closure function has returned hence alloca()
++			   is sufficient. */
++			int j;
++			UINT64 *p = avalue[i] = alloca (ty->size);
++			for (j = 0; j < element_count (ty); j++)
++			  memcpy (&p[j],
++				  allocate_to_d (context, &state),
++				  sizeof (*p));
++			break;
++		      }
++
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++		    case FFI_TYPE_LONGDOUBLE:
++			  memcpy (&avalue[i],
++				  allocate_to_v (context, &state),
++				  sizeof (*avalue));
++		      break;
++#endif
++
++		    default:
++		      FFI_ASSERT (0);
++		      break;
++		    }
++		}
++	    }
++	  else if (ty->size > 16)
++	    {
++	      /* Replace Composite type of size greater than 16 with a
++		 pointer.  */
++	      memcpy (&avalue[i],
++		      allocate_to_register_or_stack (context, stack,
++						     &state, FFI_TYPE_POINTER),
++		      sizeof (avalue[i]));
++	    }
++	  else if (available_x (&state) >= (ty->size + 7) / 8)
++	    {
++	      avalue[i] = get_x_addr (context, state.ngrn);
++	      state.ngrn += (ty->size + 7) / 8;
++	    }
++	  else
++	    {
++	      state.ngrn = N_X_ARG_REG;
++
++	      avalue[i] = allocate_to_stack (&state, stack, ty->alignment,
++					     ty->size);
++	    }
++	  break;
++
++	default:
++	  FFI_ASSERT (0);
++	  break;
++	}
++    }
++
++  /* Figure out where the return value will be passed, either in
++     registers or in a memory block allocated by the caller and passed
++     in x8.  */
++
++  if (is_register_candidate (cif->rtype))
++    {
++      /* Register candidates are *always* returned in registers. */
++
++      /* Allocate a scratchpad for the return value, we will let the
++         callee scrible the result into the scratch pad then move the
++         contents into the appropriate return value location for the
++         call convention.  */
++      rvalue = alloca (cif->rtype->size);
++      (closure->fun) (cif, rvalue, avalue, closure->user_data);
++
++      /* Copy the return value into the call context so that it is returned
++         as expected to our caller.  */
++      switch (cif->rtype->type)
++        {
++        case FFI_TYPE_VOID:
++          break;
++
++        case FFI_TYPE_UINT8:
++        case FFI_TYPE_UINT16:
++        case FFI_TYPE_UINT32:
++        case FFI_TYPE_POINTER:
++        case FFI_TYPE_UINT64:
++        case FFI_TYPE_SINT8:
++        case FFI_TYPE_SINT16:
++        case FFI_TYPE_INT:
++        case FFI_TYPE_SINT32:
++        case FFI_TYPE_SINT64:
++        case FFI_TYPE_FLOAT:
++        case FFI_TYPE_DOUBLE:
++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
++        case FFI_TYPE_LONGDOUBLE:
++#endif
++	  {
++	    void *addr = get_basic_type_addr (cif->rtype->type, context, 0);
++	    copy_basic_type (addr, rvalue, cif->rtype->type);
++            break;
++	  }
++        case FFI_TYPE_STRUCT:
++          if (is_hfa (cif->rtype))
++	    {
++	      int j;
++	      unsigned short type = get_homogeneous_type (cif->rtype);
++	      unsigned elems = element_count (cif->rtype);
++	      for (j = 0; j < elems; j++)
++		{
++		  void *reg = get_basic_type_addr (type, context, j);
++		  copy_basic_type (reg, rvalue, type);
++		  rvalue += get_basic_type_size (type);
++		}
++	    }
++          else if ((cif->rtype->size + 7) / 8 < N_X_ARG_REG)
++            {
++              size_t size = ALIGN (cif->rtype->size, sizeof (UINT64)) ;
++              memcpy (get_x_addr (context, 0), rvalue, size);
++            }
++          else
++            {
++              FFI_ASSERT (0);
++            }
++          break;
++        default:
++          FFI_ASSERT (0);
++          break;
++        }
++    }
++  else
++    {
++      memcpy (&rvalue, get_x_addr (context, 8), sizeof (UINT64));
++      (closure->fun) (cif, rvalue, avalue, closure->user_data);
++    }
++}
++
+diff --git a/js/src/ctypes/libffi/src/aarch64/ffitarget.h b/js/src/ctypes/libffi/src/aarch64/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/aarch64/ffitarget.h
+@@ -0,0 +1,59 @@
++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++``Software''), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++#ifndef LIBFFI_ASM
++typedef unsigned long ffi_arg;
++typedef signed long ffi_sarg;
++
++typedef enum ffi_abi
++  {
++    FFI_FIRST_ABI = 0,
++    FFI_SYSV,
++    FFI_LAST_ABI,
++    FFI_DEFAULT_ABI = FFI_SYSV
++  } ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 36
++#define FFI_NATIVE_RAW_API 0
++
++/* ---- Internal ---- */
++
++
++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags
++
++#define AARCH64_FFI_WITH_V_BIT 0
++
++#define AARCH64_N_XREG 32
++#define AARCH64_N_VREG 32
++#define AARCH64_CALL_CONTEXT_SIZE (AARCH64_N_XREG * 8 + AARCH64_N_VREG * 16)
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/aarch64/sysv.S b/js/src/ctypes/libffi/src/aarch64/sysv.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/aarch64/sysv.S
+@@ -0,0 +1,327 @@
++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++``Software''), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++#ifdef HAVE_MACHINE_ASM_H
++#include <machine/asm.h>
++#else
++#ifdef __USER_LABEL_PREFIX__
++#define CONCAT1(a, b) CONCAT2(a, b)
++#define CONCAT2(a, b) a ## b
++
++/* Use the right prefix for global labels.  */
++#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
++#else
++#define CNAME(x) x
++#endif
++#endif
++
++#define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
++#define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
++#define cfi_restore(reg)		.cfi_restore reg
++#define cfi_def_cfa_register(reg)	.cfi_def_cfa_register reg
++
++        .text
++        .globl CNAME(ffi_call_SYSV)
++#ifdef __ELF__
++        .type CNAME(ffi_call_SYSV), #function
++#endif
++
++/* ffi_call_SYSV()
++
++   Create a stack frame, setup an argument context, call the callee
++   and extract the result.
++
++   The maximum required argument stack size is provided,
++   ffi_call_SYSV() allocates that stack space then calls the
++   prepare_fn to populate register context and stack.  The
++   argument passing registers are loaded from the register
++   context and the callee called, on return the register passing
++   register are saved back to the context.  Our caller will
++   extract the return value from the final state of the saved
++   register context.
++
++   Prototype:
++
++   extern unsigned
++   ffi_call_SYSV (void (*)(struct call_context *context, unsigned char *,
++			   extended_cif *),
++                  struct call_context *context,
++                  extended_cif *,
++                  size_t required_stack_size,
++                  void (*fn)(void));
++
++   Therefore on entry we have:
++
++   x0 prepare_fn
++   x1 &context
++   x2 &ecif
++   x3 bytes
++   x4 fn
++
++   This function uses the following stack frame layout:
++
++   ==
++                saved x30(lr)
++   x29(fp)->    saved x29(fp)
++                saved x24
++                saved x23
++                saved x22
++   sp'    ->    saved x21
++                ...
++   sp     ->    (constructed callee stack arguments)
++   ==
++
++   Voila! */
++
++#define ffi_call_SYSV_FS (8 * 4)
++
++        .cfi_startproc
++CNAME(ffi_call_SYSV):
++        stp     x29, x30, [sp, #-16]!
++	cfi_adjust_cfa_offset (16)
++        cfi_rel_offset (x29, 0)
++        cfi_rel_offset (x30, 8)
++
++        mov     x29, sp
++	cfi_def_cfa_register (x29)
++        sub     sp, sp, #ffi_call_SYSV_FS
++
++        stp     x21, x22, [sp, #0]
++        cfi_rel_offset (x21, 0 - ffi_call_SYSV_FS)
++        cfi_rel_offset (x22, 8 - ffi_call_SYSV_FS)
++
++        stp     x23, x24, [sp, #16]
++        cfi_rel_offset (x23, 16 - ffi_call_SYSV_FS)
++        cfi_rel_offset (x24, 24 - ffi_call_SYSV_FS)
++
++        mov     x21, x1
++        mov     x22, x2
++        mov     x24, x4
++
++        /* Allocate the stack space for the actual arguments, many
++           arguments will be passed in registers, but we assume
++           worst case and allocate sufficient stack for ALL of
++           the arguments.  */
++        sub     sp, sp, x3
++
++        /* unsigned (*prepare_fn) (struct call_context *context,
++				   unsigned char *stack, extended_cif *ecif);
++	 */
++        mov     x23, x0
++        mov     x0, x1
++        mov     x1, sp
++        /* x2 already in place */
++        blr     x23
++
++        /* Preserve the flags returned.  */
++        mov     x23, x0
++
++        /* Figure out if we should touch the vector registers.  */
++        tbz     x23, #AARCH64_FFI_WITH_V_BIT, 1f
++
++        /* Load the vector argument passing registers.  */
++        ldp     q0, q1, [x21, #8*32 +  0]
++        ldp     q2, q3, [x21, #8*32 + 32]
++        ldp     q4, q5, [x21, #8*32 + 64]
++        ldp     q6, q7, [x21, #8*32 + 96]
++1:
++        /* Load the core argument passing registers.  */
++        ldp     x0, x1, [x21,  #0]
++        ldp     x2, x3, [x21, #16]
++        ldp     x4, x5, [x21, #32]
++        ldp     x6, x7, [x21, #48]
++
++        /* Don't forget x8 which may be holding the address of a return buffer.
++	 */
++        ldr     x8,     [x21, #8*8]
++
++        blr     x24
++
++        /* Save the core argument passing registers.  */
++        stp     x0, x1, [x21,  #0]
++        stp     x2, x3, [x21, #16]
++        stp     x4, x5, [x21, #32]
++        stp     x6, x7, [x21, #48]
++
++        /* Note nothing useful ever comes back in x8!  */
++
++        /* Figure out if we should touch the vector registers.  */
++        tbz     x23, #AARCH64_FFI_WITH_V_BIT, 1f
++
++        /* Save the vector argument passing registers.  */
++        stp     q0, q1, [x21, #8*32 + 0]
++        stp     q2, q3, [x21, #8*32 + 32]
++        stp     q4, q5, [x21, #8*32 + 64]
++        stp     q6, q7, [x21, #8*32 + 96]
++1:
++        /* All done, unwind our stack frame.  */
++        ldp     x21, x22, [x29,  # - ffi_call_SYSV_FS]
++        cfi_restore (x21)
++        cfi_restore (x22)
++
++        ldp     x23, x24, [x29,  # - ffi_call_SYSV_FS + 16]
++        cfi_restore (x23)
++        cfi_restore (x24)
++
++        mov     sp, x29
++	cfi_def_cfa_register (sp)
++
++        ldp     x29, x30, [sp], #16
++	cfi_adjust_cfa_offset (-16)
++        cfi_restore (x29)
++        cfi_restore (x30)
++
++        ret
++
++        .cfi_endproc
++#ifdef __ELF__
++        .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV)
++#endif
++
++#define ffi_closure_SYSV_FS (8 * 2 + AARCH64_CALL_CONTEXT_SIZE)
++
++/* ffi_closure_SYSV
++
++   Closure invocation glue. This is the low level code invoked directly by
++   the closure trampoline to setup and call a closure.
++
++   On entry x17 points to a struct trampoline_data, x16 has been clobbered
++   all other registers are preserved.
++
++   We allocate a call context and save the argument passing registers,
++   then invoked the generic C ffi_closure_SYSV_inner() function to do all
++   the real work, on return we load the result passing registers back from
++   the call context.
++
++   On entry
++
++   extern void
++   ffi_closure_SYSV (struct trampoline_data *);
++
++   struct trampoline_data
++   {
++        UINT64 *ffi_closure;
++        UINT64 flags;
++   };
++
++   This function uses the following stack frame layout:
++
++   ==
++                saved x30(lr)
++   x29(fp)->    saved x29(fp)
++                saved x22
++                saved x21
++                ...
++   sp     ->    call_context
++   ==
++
++   Voila!  */
++
++        .text
++        .globl CNAME(ffi_closure_SYSV)
++        .cfi_startproc
++CNAME(ffi_closure_SYSV):
++        stp     x29, x30, [sp, #-16]!
++	cfi_adjust_cfa_offset (16)
++        cfi_rel_offset (x29, 0)
++        cfi_rel_offset (x30, 8)
++
++        mov     x29, sp
++        cfi_def_cfa_register (x29)
++
++        sub     sp, sp, #ffi_closure_SYSV_FS
++
++        stp     x21, x22, [x29, #-16]
++        cfi_rel_offset (x21, -16)
++        cfi_rel_offset (x22, -8)
++
++        /* Load x21 with &call_context.  */
++        mov     x21, sp
++        /* Preserve our struct trampoline_data *  */
++        mov     x22, x17
++
++        /* Save the rest of the argument passing registers.  */
++        stp     x0, x1, [x21, #0]
++        stp     x2, x3, [x21, #16]
++        stp     x4, x5, [x21, #32]
++        stp     x6, x7, [x21, #48]
++        /* Don't forget we may have been given a result scratch pad address.
++	 */
++        str     x8,     [x21, #64]
++
++        /* Figure out if we should touch the vector registers.  */
++        ldr     x0, [x22, #8]
++        tbz     x0, #AARCH64_FFI_WITH_V_BIT, 1f
++
++        /* Save the argument passing vector registers.  */
++        stp     q0, q1, [x21, #8*32 + 0]
++        stp     q2, q3, [x21, #8*32 + 32]
++        stp     q4, q5, [x21, #8*32 + 64]
++        stp     q6, q7, [x21, #8*32 + 96]
++1:
++        /* Load &ffi_closure..  */
++        ldr     x0, [x22, #0]
++        mov     x1, x21
++        /* Compute the location of the stack at the point that the
++           trampoline was called.  */
++        add     x2, x29, #16
++
++        bl      CNAME(ffi_closure_SYSV_inner)
++
++        /* Figure out if we should touch the vector registers.  */
++        ldr     x0, [x22, #8]
++        tbz     x0, #AARCH64_FFI_WITH_V_BIT, 1f
++
++        /* Load the result passing vector registers.  */
++        ldp     q0, q1, [x21, #8*32 + 0]
++        ldp     q2, q3, [x21, #8*32 + 32]
++        ldp     q4, q5, [x21, #8*32 + 64]
++        ldp     q6, q7, [x21, #8*32 + 96]
++1:
++        /* Load the result passing core registers.  */
++        ldp     x0, x1, [x21,  #0]
++        ldp     x2, x3, [x21, #16]
++        ldp     x4, x5, [x21, #32]
++        ldp     x6, x7, [x21, #48]
++        /* Note nothing useful is returned in x8.  */
++
++        /* We are done, unwind our frame.  */
++        ldp     x21, x22, [x29,  #-16]
++        cfi_restore (x21)
++        cfi_restore (x22)
++
++        mov     sp, x29
++        cfi_def_cfa_register (sp)
++
++        ldp     x29, x30, [sp], #16
++	cfi_adjust_cfa_offset (-16)
++        cfi_restore (x29)
++        cfi_restore (x30)
++
++        ret
++        .cfi_endproc
++#ifdef __ELF__
++        .size CNAME(ffi_closure_SYSV), .-CNAME(ffi_closure_SYSV)
++#endif
+diff --git a/js/src/ctypes/libffi/src/alpha/ffi.c b/js/src/ctypes/libffi/src/alpha/ffi.c
+--- a/js/src/ctypes/libffi/src/alpha/ffi.c
++++ b/js/src/ctypes/libffi/src/alpha/ffi.c
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 1998, 2001, 2007, 2008  Red Hat, Inc.
++   ffi.c - Copyright (c) 2012  Anthony Green
++           Copyright (c) 1998, 2001, 2007, 2008  Red Hat, Inc.
+    
+    Alpha Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -173,16 +174,19 @@ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*, void*, void**, void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   unsigned int *tramp;
+ 
++  if (cif->abi != FFI_OSF)
++    return FFI_BAD_ABI;
++
+   tramp = (unsigned int *) &closure->tramp[0];
+   tramp[0] = 0x47fb0401;	/* mov $27,$1		*/
+   tramp[1] = 0xa77b0010;	/* ldq $27,16($27)	*/
+   tramp[2] = 0x6bfb0000;	/* jmp $31,($27),0	*/
+   tramp[3] = 0x47ff041f;	/* nop			*/
+   *(void **) &tramp[4] = ffi_closure_osf;
+ 
+   closure->cif = cif;
+diff --git a/js/src/ctypes/libffi/src/alpha/ffitarget.h b/js/src/ctypes/libffi/src/alpha/ffitarget.h
+--- a/js/src/ctypes/libffi/src/alpha/ffitarget.h
++++ b/js/src/ctypes/libffi/src/alpha/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for Alpha.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_OSF,
+   FFI_LAST_ABI,
+diff --git a/js/src/ctypes/libffi/src/alpha/osf.S b/js/src/ctypes/libffi/src/alpha/osf.S
+--- a/js/src/ctypes/libffi/src/alpha/osf.S
++++ b/js/src/ctypes/libffi/src/alpha/osf.S
+@@ -1,10 +1,10 @@
+ /* -----------------------------------------------------------------------
+-   osf.S - Copyright (c) 1998, 2001, 2007, 2008 Red Hat
++   osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011 Red Hat
+    
+    Alpha/OSF Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -294,73 +294,94 @@ ffi_closure_osf:
+ 	|| FFI_TYPE_SINT64 != 12	\
+ 	|| FFI_TYPE_STRUCT != 13	\
+ 	|| FFI_TYPE_POINTER != 14	\
+ 	|| FFI_TYPE_LAST != 14
+ #error "osf.S out of sync with ffi.h"
+ #endif
+ 
+ #ifdef __ELF__
++# define UA_SI		.4byte
++# define FDE_ENCODING	0x1b	/* pcrel sdata4 */
++# define FDE_ENCODE(X)	.4byte X-.
++# define FDE_ARANGE(X)	.4byte X
++#elif defined __osf__
++# define UA_SI		.align 0; .long
++# define FDE_ENCODING	0x50	/* aligned absolute */
++# define FDE_ENCODE(X)	.align 3; .quad X
++# define FDE_ARANGE(X)	.align 0; .quad X
++#endif
++
++#ifdef __ELF__
+ 	.section	.eh_frame,EH_FRAME_FLAGS,@progbits
++#elif defined __osf__
++	.data
++	.align 3
++	.globl _GLOBAL__F_ffi_call_osf
++_GLOBAL__F_ffi_call_osf:
++#endif
+ __FRAME_BEGIN__:
+-	.4byte	$LECIE1-$LSCIE1	# Length of Common Information Entry
++	UA_SI	$LECIE1-$LSCIE1	# Length of Common Information Entry
+ $LSCIE1:
+-	.4byte	0x0		# CIE Identifier Tag
++	UA_SI	0x0		# CIE Identifier Tag
+ 	.byte	0x1		# CIE Version
+ 	.ascii "zR\0"		# CIE Augmentation
+ 	.byte	0x1		# uleb128 0x1; CIE Code Alignment Factor
+ 	.byte	0x78		# sleb128 -8; CIE Data Alignment Factor
+ 	.byte	26		# CIE RA Column
+ 	.byte	0x1		# uleb128 0x1; Augmentation size
+-	.byte	0x1b		# FDE Encoding (pcrel sdata4)
++	.byte	FDE_ENCODING	# FDE Encoding
+ 	.byte	0xc		# DW_CFA_def_cfa
+ 	.byte	30		# uleb128 column 30
+ 	.byte	0		# uleb128 offset 0
+ 	.align 3
+ $LECIE1:
+ $LSFDE1:
+-	.4byte	$LEFDE1-$LASFDE1		# FDE Length
++	UA_SI	$LEFDE1-$LASFDE1		# FDE Length
+ $LASFDE1:
+-	.4byte	$LASFDE1-__FRAME_BEGIN__	# FDE CIE offset
+-	.4byte	$LFB1-.		# FDE initial location
+-	.4byte	$LFE1-$LFB1	# FDE address range
++	UA_SI	$LASFDE1-__FRAME_BEGIN__	# FDE CIE offset
++	FDE_ENCODE($LFB1)			# FDE initial location
++	FDE_ARANGE($LFE1-$LFB1)			# FDE address range
+ 	.byte	0x0		# uleb128 0x0; Augmentation size
+ 
+ 	.byte	0x4		# DW_CFA_advance_loc4
+-	.4byte	$LCFI1-$LFB1
++	UA_SI	$LCFI1-$LFB1
+ 	.byte	0x9a		# DW_CFA_offset, column 26
+ 	.byte	4		# uleb128 4*-8
+ 	.byte	0x8f		# DW_CFA_offset, column 15
+ 	.byte	0x3		# uleb128 3*-8
+ 	.byte	0xc		# DW_CFA_def_cfa
+ 	.byte	15		# uleb128 column 15
+ 	.byte	32		# uleb128 offset 32
+ 
+ 	.byte	0x4		# DW_CFA_advance_loc4
+-	.4byte	$LCFI2-$LCFI1
++	UA_SI	$LCFI2-$LCFI1
+ 	.byte	0xda		# DW_CFA_restore, column 26
+ 	.align 3
+ $LEFDE1:
+ 
+ $LSFDE3:
+-	.4byte	$LEFDE3-$LASFDE3		# FDE Length
++	UA_SI	$LEFDE3-$LASFDE3		# FDE Length
+ $LASFDE3:
+-	.4byte	$LASFDE3-__FRAME_BEGIN__	# FDE CIE offset
+-	.4byte	$LFB2-.		# FDE initial location
+-	.4byte	$LFE2-$LFB2	# FDE address range
++	UA_SI	$LASFDE3-__FRAME_BEGIN__	# FDE CIE offset
++	FDE_ENCODE($LFB2)			# FDE initial location
++	FDE_ARANGE($LFE2-$LFB2)			# FDE address range
+ 	.byte	0x0		# uleb128 0x0; Augmentation size
+ 
+ 	.byte	0x4		# DW_CFA_advance_loc4
+-	.4byte	$LCFI5-$LFB2
++	UA_SI	$LCFI5-$LFB2
+ 	.byte	0xe		# DW_CFA_def_cfa_offset
+ 	.byte	0x80,0x1	# uleb128 128
+ 
+ 	.byte	0x4		# DW_CFA_advance_loc4
+-	.4byte	$LCFI6-$LCFI5
++	UA_SI	$LCFI6-$LCFI5
+ 	.byte	0x9a		# DW_CFA_offset, column 26
+ 	.byte	16		# uleb128 offset 16*-8
+ 	.align 3
+ $LEFDE3:
++#if defined __osf__
++	.align 0
++	.long	0		# End of Table
++#endif
+ 
+-#ifdef __linux__
++#if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",@progbits
+ #endif
+-#endif
+diff --git a/js/src/ctypes/libffi/src/arc/arcompact.S b/js/src/ctypes/libffi/src/arc/arcompact.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/arc/arcompact.S
+@@ -0,0 +1,135 @@
++/* -----------------------------------------------------------------------
++   arcompact.S - Copyright (c) 2013 Synposys, Inc. (www.synopsys.com)
++   
++   ARCompact Foreign Function Interface 
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++#ifdef HAVE_MACHINE_ASM_H
++#include <machine/asm.h>
++#else
++#define CNAME(x) x
++#define ENTRY(x) .globl CNAME(x)` .type CNAME(x),%function` CNAME(x):
++#endif
++
++.text
++
++        /* R0:   ffi_prep_args */
++        /* R1:   &ecif */
++        /* R2:   cif->bytes */
++        /* R3:   fig->flags */
++        /* R4:   ecif.rvalue */
++        /* R5:   fn */
++ENTRY(ffi_call_ARCompact)
++        /* Save registers.  */
++        st.a       fp, [sp, -4]        /* fp + 20, fp */
++        push_s     blink               /* fp + 16, blink */
++        st.a       r4, [sp, -4]        /* fp + 12, ecif.rvalue */
++        push_s     r3                  /* fp +  8, fig->flags */
++        st.a       r5, [sp, -4]        /* fp +  4, fn */
++        push_s     r2                  /* fp +  0, cif->bytes */
++        mov        fp, sp
++
++        /* Make room for all of the new args.  */
++        sub        sp, sp, r2
++
++        /* Place all of the ffi_prep_args in position.  */
++        /* ffi_prep_args(char *stack, extended_cif *ecif) */
++        /* R1 already set.  */
++
++        /* And call.  */
++        jl_s.d     [r0]
++        mov_s      r0, sp
++
++        ld.ab      r12, [fp, 4]        /* cif->bytes */
++        ld.ab      r11, [fp, 4]        /* fn */
++
++        /* Move first 8 parameters in registers...  */
++        ld_s       r0, [sp]
++        ld_s       r1, [sp, 4]
++        ld_s       r2, [sp, 8]
++        ld_s       r3, [sp, 12]
++        ld         r4, [sp, 16]
++        ld         r5, [sp, 20]
++        ld         r6, [sp, 24]
++        ld         r7, [sp, 28]
++
++        /* ...and adjust the stack.  */
++        min        r12, r12, 32
++
++        /* Call the function.  */
++        jl.d       [r11]
++        add        sp, sp, r12 
++
++        mov        sp, fp        
++        pop_s      r3        /* fig->flags, return type */
++        pop_s      r2        /* ecif.rvalue, pointer for return value */
++
++        /* If the return value pointer is NULL, assume no return value.  */
++        breq.d     r2, 0, epilogue
++        pop_s      blink
++
++        /* Return INT.  */
++        brne       r3, FFI_TYPE_INT, return_double
++        b.d        epilogue
++        st_s       r0, [r2]        
++
++return_double:
++        brne       r3, FFI_TYPE_DOUBLE, epilogue
++        st_s       r0, [r2]        
++        st_s       r1, [r2,4]
++
++epilogue:
++        j_s.d      [blink]
++        ld.ab      fp, [sp, 4]
++
++ENTRY(ffi_closure_ARCompact)
++        st.a       r0, [sp, -32]
++        st_s       r1, [sp, 4]
++        st_s       r2, [sp, 8]
++        st_s       r3, [sp, 12]
++        st         r4, [sp, 16]
++        st         r5, [sp, 20]
++        st         r6, [sp, 24]
++        st         r7, [sp, 28]
++
++        /* pointer to arguments */
++        mov_s      r2, sp
++
++        /* return value goes here */
++        sub        sp, sp, 8
++        mov_s      r1, sp
++
++        push_s     blink
++        
++        bl.d       ffi_closure_inner_ARCompact
++        mov_s      r0, r8                /* codeloc, set by trampoline */
++
++        pop_s      blink
++
++        /* set return value to r1:r0 */
++        pop_s      r0
++        pop_s      r1
++        j_s.d      [blink]
++        add_s      sp, sp, 32
+diff --git a/js/src/ctypes/libffi/src/arc/ffi.c b/js/src/ctypes/libffi/src/arc/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/arc/ffi.c
+@@ -0,0 +1,268 @@
++/* -----------------------------------------------------------------------
++   ffi.c - Copyright (c) 2013  Synopsys, Inc. (www.synopsys.com)
++   
++   ARC Foreign Function Interface 
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++#include <stdint.h>
++
++#include <sys/cachectl.h>
++
++/* for little endian ARC, the code is in fact stored as mixed endian for
++   performance reasons */
++#if __BIG_ENDIAN__
++#define CODE_ENDIAN(x) (x)
++#else
++#define CODE_ENDIAN(x) ( (((uint32_t) (x)) << 16) | (((uint32_t) (x)) >> 16))
++#endif
++
++/* ffi_prep_args is called by the assembly routine once stack
++   space has been allocated for the function's arguments.  */
++
++void
++ffi_prep_args (char *stack, extended_cif * ecif)
++{
++  unsigned int i;
++  int tmp;
++  void **p_argv;
++  char *argp;
++  ffi_type **p_arg;
++
++  tmp = 0;
++  argp = stack;
++
++  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT)
++    {
++      *(void **) argp = ecif->rvalue;
++      argp += 4;
++    }
++
++  p_argv = ecif->avalue;
++
++  for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
++       (i != 0); i--, p_arg++)
++    {
++      size_t z;
++      int alignment;
++
++      /* align alignment to 4 */
++      alignment = (((*p_arg)->alignment - 1) | 3) + 1;
++
++      /* Align if necessary.  */
++      if ((alignment - 1) & (unsigned) argp)
++	argp = (char *) ALIGN (argp, alignment);
++
++      z = (*p_arg)->size;
++      if (z < sizeof (int))
++	{
++	  z = sizeof (int);
++
++	  switch ((*p_arg)->type)
++	    {
++	    case FFI_TYPE_SINT8:
++	      *(signed int *) argp = (signed int) *(SINT8 *) (*p_argv);
++	      break;
++
++	    case FFI_TYPE_UINT8:
++	      *(unsigned int *) argp = (unsigned int) *(UINT8 *) (*p_argv);
++	      break;
++
++	    case FFI_TYPE_SINT16:
++	      *(signed int *) argp = (signed int) *(SINT16 *) (*p_argv);
++	      break;
++
++	    case FFI_TYPE_UINT16:
++	      *(unsigned int *) argp = (unsigned int) *(UINT16 *) (*p_argv);
++	      break;
++
++	    case FFI_TYPE_STRUCT:
++	      memcpy (argp, *p_argv, (*p_arg)->size);
++	      break;
++
++	    default:
++	      FFI_ASSERT (0);
++	    }
++	}
++      else if (z == sizeof (int))
++	{
++	  *(unsigned int *) argp = (unsigned int) *(UINT32 *) (*p_argv);
++	}
++      else
++	{
++	  if ((*p_arg)->type == FFI_TYPE_STRUCT)
++	    {
++	      memcpy (argp, *p_argv, z);
++	    }
++	  else
++	    {
++	      /* Double or long long 64bit.  */
++	      memcpy (argp, *p_argv, z);
++	    }
++	}
++      p_argv++;
++      argp += z;
++    }
++
++  return;
++}
++
++/* Perform machine dependent cif processing.  */
++ffi_status
++ffi_prep_cif_machdep (ffi_cif * cif)
++{
++  /* Set the return type flag.  */
++  switch (cif->rtype->type)
++    {
++    case FFI_TYPE_VOID:
++      cif->flags = (unsigned) cif->rtype->type;
++      break;
++
++    case FFI_TYPE_STRUCT:
++      cif->flags = (unsigned) cif->rtype->type;
++      break;
++
++    case FFI_TYPE_SINT64:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_DOUBLE:
++      cif->flags = FFI_TYPE_DOUBLE;
++      break;
++
++    case FFI_TYPE_FLOAT:
++    default:
++      cif->flags = FFI_TYPE_INT;
++      break;
++    }
++
++  return FFI_OK;
++}
++
++extern void ffi_call_ARCompact (void (*)(char *, extended_cif *),
++				extended_cif *, unsigned, unsigned,
++				unsigned *, void (*fn) (void));
++
++void
++ffi_call (ffi_cif * cif, void (*fn) (void), void *rvalue, void **avalue)
++{
++  extended_cif ecif;
++
++  ecif.cif = cif;
++  ecif.avalue = avalue;
++
++  /* If the return value is a struct and we don't have
++     a return value address then we need to make one.  */
++  if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT))
++    {
++      ecif.rvalue = alloca (cif->rtype->size);
++    }
++  else
++    ecif.rvalue = rvalue;
++
++  switch (cif->abi)
++    {
++    case FFI_ARCOMPACT:
++      ffi_call_ARCompact (ffi_prep_args, &ecif, cif->bytes,
++			  cif->flags, ecif.rvalue, fn);
++      break;
++
++    default:
++      FFI_ASSERT (0);
++      break;
++    }
++}
++
++int
++ffi_closure_inner_ARCompact (ffi_closure * closure, void *rvalue,
++			     ffi_arg * args)
++{
++  void **arg_area, **p_argv;
++  ffi_cif *cif = closure->cif;
++  char *argp = (char *) args;
++  ffi_type **p_argt;
++  int i;
++
++  arg_area = (void **) alloca (cif->nargs * sizeof (void *));
++
++  /* handle hidden argument */
++  if (cif->flags == FFI_TYPE_STRUCT)
++    {
++      rvalue = *(void **) argp;
++      argp += 4;
++    }
++
++  p_argv = arg_area;
++
++  for (i = 0, p_argt = cif->arg_types; i < cif->nargs;
++       i++, p_argt++, p_argv++)
++    {
++      size_t z;
++      int alignment;
++
++      /* align alignment to 4 */
++      alignment = (((*p_argt)->alignment - 1) | 3) + 1;
++
++      /* Align if necessary.  */
++      if ((alignment - 1) & (unsigned) argp)
++	argp = (char *) ALIGN (argp, alignment);
++
++      z = (*p_argt)->size;
++      *p_argv = (void *) argp;
++      argp += z;
++    }
++
++  (closure->fun) (cif, rvalue, arg_area, closure->user_data);
++
++  return cif->flags;
++}
++
++extern void ffi_closure_ARCompact (void);
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif,
++		      void (*fun) (ffi_cif *, void *, void **, void *),
++		      void *user_data, void *codeloc)
++{
++  uint32_t *tramp = (uint32_t *) & (closure->tramp[0]);
++
++  switch (cif->abi)
++    {
++    case FFI_ARCOMPACT:
++      FFI_ASSERT (tramp == codeloc);
++      tramp[0] = CODE_ENDIAN (0x200a1fc0);	/* mov r8, pcl  */
++      tramp[1] = CODE_ENDIAN (0x20200f80);	/* j [long imm] */
++      tramp[2] = CODE_ENDIAN (ffi_closure_ARCompact);
++      break;
++
++    default:
++      return FFI_BAD_ABI;
++    }
++
++  closure->cif = cif;
++  closure->fun = fun;
++  closure->user_data = user_data;
++  cacheflush (codeloc, FFI_TRAMPOLINE_SIZE, BCACHE);
++
++  return FFI_OK;
++}
+diff --git a/js/src/ctypes/libffi/src/arc/ffitarget.h b/js/src/ctypes/libffi/src/arc/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/arc/ffitarget.h
+@@ -0,0 +1,53 @@
++/* -----------------------------------------------------------------------
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 2013  Synopsys, Inc. (www.synopsys.com)
++   Target configuration macros for ARC.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++
++   ----------------------------------------------------------------------- */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++/* ---- Generic type definitions ----------------------------------------- */
++
++#ifndef LIBFFI_ASM
++typedef unsigned long ffi_arg;
++typedef signed long ffi_sarg;
++
++typedef enum ffi_abi
++{
++  FFI_FIRST_ABI = 0,
++  FFI_ARCOMPACT,
++  FFI_LAST_ABI,
++  FFI_DEFAULT_ABI = FFI_ARCOMPACT
++} ffi_abi;
++#endif
++
++#define FFI_CLOSURES 		1
++#define FFI_TRAMPOLINE_SIZE	12
++#define FFI_NATIVE_RAW_API 	0
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/arm/ffi.c b/js/src/ctypes/libffi/src/arm/ffi.c
+--- a/js/src/ctypes/libffi/src/arm/ffi.c
++++ b/js/src/ctypes/libffi/src/arm/ffi.c
+@@ -1,12 +1,16 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 1998, 2008  Red Hat, Inc.
+-   
+-   ARM Foreign Function Interface 
++   ffi.c - Copyright (c) 2011 Timothy Wall
++           Copyright (c) 2011 Plausible Labs Cooperative, Inc.
++           Copyright (c) 2011 Anthony Green
++	   Copyright (c) 2011 Free Software Foundation
++           Copyright (c) 1998, 2008, 2011  Red Hat, Inc.
++
++   ARM Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+@@ -28,110 +32,205 @@
+ #include <ffi_common.h>
+ 
+ #include <stdlib.h>
+ 
+ /* Forward declares. */
+ static int vfp_type_p (ffi_type *);
+ static void layout_vfp_args (ffi_cif *);
+ 
++int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space);
++int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space);
++
++static char* ffi_align(ffi_type **p_arg, char *argp)
++{
++  /* Align if necessary */
++  register size_t alignment = (*p_arg)->alignment;
++  if (alignment < 4)
++  {
++    alignment = 4;
++  }
++#ifdef _WIN32_WCE
++  if (alignment > 4)
++  {
++    alignment = 4;
++  }
++#endif
++  if ((alignment - 1) & (unsigned) argp)
++  {
++    argp = (char *) ALIGN(argp, alignment);
++  }
++
++  if ((*p_arg)->type == FFI_TYPE_STRUCT)
++  {
++    argp = (char *) ALIGN(argp, 4);
++  }
++  return argp;
++}
++
++static size_t ffi_put_arg(ffi_type **arg_type, void **arg, char *stack)
++{
++	register char* argp = stack;
++	register ffi_type **p_arg = arg_type;
++	register void **p_argv = arg;
++	register size_t z = (*p_arg)->size;
++  if (z < sizeof(int))
++    {
++		z = sizeof(int);
++		switch ((*p_arg)->type)
++      {
++      case FFI_TYPE_SINT8:
++        *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv);
++        break;
++        
++      case FFI_TYPE_UINT8:
++        *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv);
++        break;
++        
++      case FFI_TYPE_SINT16:
++        *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv);
++        break;
++        
++      case FFI_TYPE_UINT16:
++        *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv);
++        break;
++        
++      case FFI_TYPE_STRUCT:
++        memcpy(argp, *p_argv, (*p_arg)->size);
++        break;
++
++      default:
++        FFI_ASSERT(0);
++      }
++    }
++  else if (z == sizeof(int))
++    {
++		if ((*p_arg)->type == FFI_TYPE_FLOAT)
++			*(float *) argp = *(float *)(* p_argv);
++		else
++			*(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv);
++    }
++	else if (z == sizeof(double) && (*p_arg)->type == FFI_TYPE_DOUBLE)
++		{
++			*(double *) argp = *(double *)(* p_argv);
++		}
++  else
++    {
++      memcpy(argp, *p_argv, z);
++    }
++  return z;
++}
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments
+    
+    The vfp_space parameter is the load area for VFP regs, the return
+    value is cif->vfp_used (word bitset of VFP regs used for passing
+    arguments). These are only used for the VFP hard-float ABI.
+ */
+-int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space)
++int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space)
+ {
+-  register unsigned int i, vi = 0;
++  register unsigned int i;
+   register void **p_argv;
+   register char *argp;
+   register ffi_type **p_arg;
+-
+   argp = stack;
++  
+ 
+   if ( ecif->cif->flags == FFI_TYPE_STRUCT ) {
+     *(void **) argp = ecif->rvalue;
+     argp += 4;
+   }
+ 
+   p_argv = ecif->avalue;
+ 
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        (i != 0);
+-       i--, p_arg++)
++       i--, p_arg++, p_argv++)
+     {
+-      size_t z;
++    argp = ffi_align(p_arg, argp);
++    argp += ffi_put_arg(p_arg, p_argv, argp);
++    }
++
++  return 0;
++}
++
++int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space)
++{
++  // make sure we are using FFI_VFP
++  FFI_ASSERT(ecif->cif->abi == FFI_VFP);
++
++  register unsigned int i, vi = 0;
++  register void **p_argv;
++  register char *argp, *regp, *eo_regp;
++  register ffi_type **p_arg;
++  char stack_used = 0;
++  char done_with_regs = 0;
++  char is_vfp_type;
++
++  /* the first 4 words on the stack are used for values passed in core
++   * registers. */
++  regp = stack;
++  eo_regp = argp = regp + 16;
++  
++
++  /* if the function returns an FFI_TYPE_STRUCT in memory, that address is
++   * passed in r0 to the function */
++  if ( ecif->cif->flags == FFI_TYPE_STRUCT ) {
++    *(void **) regp = ecif->rvalue;
++    regp += 4;
++  }
++
++  p_argv = ecif->avalue;
++
++  for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
++       (i != 0);
++       i--, p_arg++, p_argv++)
++    {
++      is_vfp_type = vfp_type_p (*p_arg);
+ 
+       /* Allocated in VFP registers. */
+-      if (ecif->cif->abi == FFI_VFP
+-	  && vi < ecif->cif->vfp_nargs && vfp_type_p (*p_arg))
+-	{
+-	  float* vfp_slot = vfp_space + ecif->cif->vfp_args[vi++];
+-	  if ((*p_arg)->type == FFI_TYPE_FLOAT)
+-	    *((float*)vfp_slot) = *((float*)*p_argv);
+-	  else if ((*p_arg)->type == FFI_TYPE_DOUBLE)
+-	    *((double*)vfp_slot) = *((double*)*p_argv);
+-	  else
+-	    memcpy(vfp_slot, *p_argv, (*p_arg)->size);
+-	  p_argv++;
+-	  continue;
+-	}
+-
+-      /* Align if necessary */
+-      if (((*p_arg)->alignment - 1) & (unsigned) argp) {
+-	argp = (char *) ALIGN(argp, (*p_arg)->alignment);
+-      }
+-
+-      if ((*p_arg)->type == FFI_TYPE_STRUCT)
+-	argp = (char *) ALIGN(argp, 4);
+-
+-	  z = (*p_arg)->size;
+-	  if (z < sizeof(int))
+-	    {
+-	      z = sizeof(int);
+-	      switch ((*p_arg)->type)
+-		{
+-		case FFI_TYPE_SINT8:
+-		  *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv);
+-		  break;
+-		  
+-		case FFI_TYPE_UINT8:
+-		  *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv);
+-		  break;
+-		  
+-		case FFI_TYPE_SINT16:
+-		  *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv);
+-		  break;
+-		  
+-		case FFI_TYPE_UINT16:
+-		  *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv);
+-		  break;
+-		  
+-		case FFI_TYPE_STRUCT:
+-		  memcpy(argp, *p_argv, (*p_arg)->size);
+-		  break;
+-
+-		default:
+-		  FFI_ASSERT(0);
+-		}
+-	    }
+-	  else if (z == sizeof(int))
+-	    {
+-	      *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv);
+-	    }
+-	  else
+-	    {
+-	      memcpy(argp, *p_argv, z);
+-	    }
+-	  p_argv++;
+-	  argp += z;
++      if(vi < ecif->cif->vfp_nargs && is_vfp_type)
++        {
++          char *vfp_slot = (char *)(vfp_space + ecif->cif->vfp_args[vi++]);
++          ffi_put_arg(p_arg, p_argv, vfp_slot);
++          continue;
++        }
++      /* Try allocating in core registers. */
++      else if (!done_with_regs && !is_vfp_type)
++        {
++          char *tregp = ffi_align(p_arg, regp);
++          size_t size = (*p_arg)->size; 
++          size = (size < 4)? 4 : size; // pad
++          /* Check if there is space left in the aligned register area to place
++           * the argument */
++          if(tregp + size <= eo_regp)
++            {
++              regp = tregp + ffi_put_arg(p_arg, p_argv, tregp);
++              done_with_regs = (regp == argp);
++              // ensure we did not write into the stack area
++              FFI_ASSERT(regp <= argp);
++              continue;
++            }
++          /* In case there are no arguments in the stack area yet, 
++          the argument is passed in the remaining core registers and on the
++          stack. */
++          else if (!stack_used) 
++            {
++              stack_used = 1;
++              done_with_regs = 1;
++              argp = tregp + ffi_put_arg(p_arg, p_argv, tregp);
++              FFI_ASSERT(eo_regp < argp);
++              continue;
++            }
++        }
++      /* Base case, arguments are passed on the stack */
++      stack_used = 1;
++      argp = ffi_align(p_arg, argp);
++      argp += ffi_put_arg(p_arg, p_argv, argp);
+     }
+-
+   /* Indicate the VFP registers used. */
+   return ecif->cif->vfp_used;
+ }
+ 
+ /* Perform machine dependent cif processing */
+ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
+ {
+   int type_code;
+@@ -181,36 +280,48 @@ ffi_status ffi_prep_cif_machdep(ffi_cif 
+      The VFP hard-float calling conventions are slightly more sophisticated than
+      the base calling conventions, so we do it here instead of in ffi_prep_args(). */
+   if (cif->abi == FFI_VFP)
+     layout_vfp_args (cif);
+ 
+   return FFI_OK;
+ }
+ 
++/* Perform machine dependent cif processing for variadic calls */
++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif,
++				    unsigned int nfixedargs,
++				    unsigned int ntotalargs)
++{
++  /* VFP variadic calls actually use the SYSV ABI */
++  if (cif->abi == FFI_VFP)
++	cif->abi = FFI_SYSV;
++
++  return ffi_prep_cif_machdep(cif);
++}
++
+ /* Prototypes for assembly functions, in sysv.S */
+ extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *);
+ extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *);
+ 
+ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+   int small_struct = (cif->flags == FFI_TYPE_INT 
+ 		      && cif->rtype->type == FFI_TYPE_STRUCT);
+   int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT
+ 		    || cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE);
+ 
++  unsigned int temp;
++  
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+ 
+-  unsigned int temp;
+-  
+   /* If the return value is a struct and we don't have a return	*/
+-  /* value address then we need to make one		        */
++  /* value address then we need to make one			*/
+ 
+   if ((rvalue == NULL) && 
+       (cif->flags == FFI_TYPE_STRUCT))
+     {
+       ecif.rvalue = alloca(cif->rtype->size);
+     }
+   else if (small_struct)
+     ecif.rvalue = &temp;
+@@ -224,159 +335,473 @@ void ffi_call(ffi_cif *cif, void (*fn)(v
+ 
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+       ffi_call_SYSV (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue);
+       break;
+ 
+     case FFI_VFP:
++#ifdef __ARM_EABI__
+       ffi_call_VFP (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue);
+       break;
++#endif
+ 
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+   if (small_struct)
+-    memcpy (rvalue, &temp, cif->rtype->size);
++    {
++      FFI_ASSERT(rvalue != NULL);
++      memcpy (rvalue, &temp, cif->rtype->size);
++    }
++    
+   else if (vfp_struct)
+-    memcpy (rvalue, ecif.rvalue, cif->rtype->size);
++    {
++      FFI_ASSERT(rvalue != NULL);
++      memcpy (rvalue, ecif.rvalue, cif->rtype->size);
++    }
++    
+ }
+ 
+ /** private members **/
+ 
+ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
+ 					 void** args, ffi_cif* cif, float *vfp_stack);
+ 
++static void ffi_prep_incoming_args_VFP (char *stack, void **ret,
++					 void** args, ffi_cif* cif, float *vfp_stack);
++
+ void ffi_closure_SYSV (ffi_closure *);
+ 
+ void ffi_closure_VFP (ffi_closure *);
+ 
+ /* This function is jumped to by the trampoline */
+ 
+-unsigned int
+-ffi_closure_SYSV_inner (closure, respp, args, vfp_args)
+-     ffi_closure *closure;
+-     void **respp;
+-     void *args;
+-     void *vfp_args;
++unsigned int FFI_HIDDEN
++ffi_closure_inner (ffi_closure *closure, 
++		   void **respp, void *args, void *vfp_args)
+ {
+   // our various things...
+   ffi_cif       *cif;
+   void         **arg_area;
+ 
+   cif         = closure->cif;
+   arg_area    = (void**) alloca (cif->nargs * sizeof (void*));  
+ 
+   /* this call will initialize ARG_AREA, such that each
+    * element in that array points to the corresponding 
+    * value on the stack; and if the function returns
+    * a structure, it will re-set RESP to point to the
+    * structure return address.  */
+-
+-  ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args);
++  if (cif->abi == FFI_VFP)
++    ffi_prep_incoming_args_VFP(args, respp, arg_area, cif, vfp_args);
++  else
++    ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args);
+ 
+   (closure->fun) (cif, *respp, arg_area, closure->user_data);
+ 
+   return cif->flags;
+ }
+ 
+ /*@-exportheader@*/
+ static void 
+ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
+ 			    void **avalue, ffi_cif *cif,
+ 			    /* Used only under VFP hard-float ABI. */
+ 			    float *vfp_stack)
+ /*@=exportheader@*/
+ {
+-  register unsigned int i, vi = 0;
++  register unsigned int i;
+   register void **p_argv;
+   register char *argp;
+   register ffi_type **p_arg;
+ 
+   argp = stack;
+ 
+   if ( cif->flags == FFI_TYPE_STRUCT ) {
+     *rvalue = *(void **) argp;
+     argp += 4;
+   }
+ 
+   p_argv = avalue;
+ 
+   for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++)
+     {
+       size_t z;
+-      size_t alignment;
+-  
+-      if (cif->abi == FFI_VFP
+-	  && vi < cif->vfp_nargs && vfp_type_p (*p_arg))
+-	{
+-	  *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]);
+-	  continue;
+-	}
+ 
+-      alignment = (*p_arg)->alignment;
+-      if (alignment < 4)
+-	alignment = 4;
+-      /* Align if necessary */
+-      if ((alignment - 1) & (unsigned) argp) {
+-	argp = (char *) ALIGN(argp, alignment);
+-      }
++      argp = ffi_align(p_arg, argp);
+ 
+       z = (*p_arg)->size;
+ 
+       /* because we're little endian, this is what it turns into.   */
+ 
+       *p_argv = (void*) argp;
+ 
+       p_argv++;
+       argp += z;
+     }
+   
+   return;
+ }
+ 
++/*@-exportheader@*/
++static void 
++ffi_prep_incoming_args_VFP(char *stack, void **rvalue,
++			    void **avalue, ffi_cif *cif,
++			    /* Used only under VFP hard-float ABI. */
++			    float *vfp_stack)
++/*@=exportheader@*/
++{
++  register unsigned int i, vi = 0;
++  register void **p_argv;
++  register char *argp, *regp, *eo_regp;
++  register ffi_type **p_arg;
++  char done_with_regs = 0;
++  char stack_used = 0;
++  char is_vfp_type;
++
++  FFI_ASSERT(cif->abi == FFI_VFP);
++  regp = stack;
++  eo_regp = argp = regp + 16;
++
++  if ( cif->flags == FFI_TYPE_STRUCT ) {
++    *rvalue = *(void **) regp;
++    regp += 4;
++  }
++
++  p_argv = avalue;
++
++  for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++)
++    {
++    size_t z;
++    is_vfp_type = vfp_type_p (*p_arg); 
++
++    if(vi < cif->vfp_nargs && is_vfp_type)
++      {
++        *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]);
++        continue;
++      }
++    else if (!done_with_regs && !is_vfp_type)
++      {
++        char* tregp = ffi_align(p_arg, regp);
++
++        z = (*p_arg)->size; 
++        z = (z < 4)? 4 : z; // pad
++        
++        /* if the arguments either fits into the registers or uses registers
++         * and stack, while we haven't read other things from the stack */
++        if(tregp + z <= eo_regp || !stack_used) 
++          {
++          /* because we're little endian, this is what it turns into. */
++          *p_argv = (void*) tregp;
++
++          p_argv++;
++          regp = tregp + z;
++          // if we read past the last core register, make sure we have not read
++          // from the stack before and continue reading after regp
++          if(regp > eo_regp)
++            {
++            if(stack_used)
++              {
++                abort(); // we should never read past the end of the register
++                         // are if the stack is already in use
++              }
++            argp = regp;
++            }
++          if(regp >= eo_regp)
++            {
++            done_with_regs = 1;
++            stack_used = 1;
++            }
++          continue;
++          }
++      }
++    stack_used = 1;
++
++    argp = ffi_align(p_arg, argp);
++
++    z = (*p_arg)->size;
++
++    /* because we're little endian, this is what it turns into.   */
++
++    *p_argv = (void*) argp;
++
++    p_argv++;
++    argp += z;
++    }
++  
++  return;
++}
++
+ /* How to make a trampoline.  */
+ 
++extern unsigned int ffi_arm_trampoline[3];
++
++#if FFI_EXEC_TRAMPOLINE_TABLE
++
++#include <mach/mach.h>
++#include <pthread.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++extern void *ffi_closure_trampoline_table_page;
++
++typedef struct ffi_trampoline_table ffi_trampoline_table;
++typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry;
++
++struct ffi_trampoline_table {
++  /* contiguous writable and executable pages */
++  vm_address_t config_page;
++  vm_address_t trampoline_page;
++
++  /* free list tracking */
++  uint16_t free_count;
++  ffi_trampoline_table_entry *free_list;
++  ffi_trampoline_table_entry *free_list_pool;
++
++  ffi_trampoline_table *prev;
++  ffi_trampoline_table *next;
++};
++
++struct ffi_trampoline_table_entry {
++  void *(*trampoline)();
++  ffi_trampoline_table_entry *next;
++};
++
++/* Override the standard architecture trampoline size */
++// XXX TODO - Fix
++#undef FFI_TRAMPOLINE_SIZE
++#define FFI_TRAMPOLINE_SIZE 12
++
++/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */
++#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080));
++
++/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */
++#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16
++
++/* Total number of trampolines that fit in one trampoline table */
++#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE)
++
++static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER;
++static ffi_trampoline_table *ffi_trampoline_tables = NULL;
++
++static ffi_trampoline_table *
++ffi_trampoline_table_alloc ()
++{
++  ffi_trampoline_table *table = NULL;
++
++  /* Loop until we can allocate two contiguous pages */
++  while (table == NULL) {
++    vm_address_t config_page = 0x0;
++    kern_return_t kt;
++
++    /* Try to allocate two pages */
++    kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE);
++    if (kt != KERN_SUCCESS) {
++      fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
++      break;
++    }
++
++    /* Now drop the second half of the allocation to make room for the trampoline table */
++    vm_address_t trampoline_page = config_page+PAGE_SIZE;
++    kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE);
++    if (kt != KERN_SUCCESS) {
++      fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
++      break;
++    }
++
++    /* Remap the trampoline table to directly follow the config page */
++    vm_prot_t cur_prot;
++    vm_prot_t max_prot;
++
++    kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE);
++
++    /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */
++    if (kt != KERN_SUCCESS) {
++      /* Log unexpected failures */
++      if (kt != KERN_NO_SPACE) {
++        fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
++      }
++
++      vm_deallocate (mach_task_self (), config_page, PAGE_SIZE);
++      continue;
++    }
++
++    /* We have valid trampoline and config pages */
++    table = calloc (1, sizeof(ffi_trampoline_table));
++    table->free_count = FFI_TRAMPOLINE_COUNT;
++    table->config_page = config_page;
++    table->trampoline_page = trampoline_page;
++
++    /* Create and initialize the free list */
++    table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry));
++
++    uint16_t i;
++    for (i = 0; i < table->free_count; i++) {
++      ffi_trampoline_table_entry *entry = &table->free_list_pool[i];
++      entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE));
++
++      if (i < table->free_count - 1)
++        entry->next = &table->free_list_pool[i+1];
++    }
++
++    table->free_list = table->free_list_pool;
++  }
++
++  return table;
++}
++
++void *
++ffi_closure_alloc (size_t size, void **code)
++{
++  /* Create the closure */
++  ffi_closure *closure = malloc(size);
++  if (closure == NULL)
++    return NULL;
++
++  pthread_mutex_lock(&ffi_trampoline_lock);
++
++  /* Check for an active trampoline table with available entries. */
++  ffi_trampoline_table *table = ffi_trampoline_tables;
++  if (table == NULL || table->free_list == NULL) {
++    table = ffi_trampoline_table_alloc ();
++    if (table == NULL) {
++      free(closure);
++      return NULL;
++    }
++
++    /* Insert the new table at the top of the list */
++    table->next = ffi_trampoline_tables;
++    if (table->next != NULL)
++        table->next->prev = table;
++
++    ffi_trampoline_tables = table;
++  }
++
++  /* Claim the free entry */
++  ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list;
++  ffi_trampoline_tables->free_list = entry->next;
++  ffi_trampoline_tables->free_count--;
++  entry->next = NULL;
++
++  pthread_mutex_unlock(&ffi_trampoline_lock);
++
++  /* Initialize the return values */
++  *code = entry->trampoline;
++  closure->trampoline_table = table;
++  closure->trampoline_table_entry = entry;
++
++  return closure;
++}
++
++void
++ffi_closure_free (void *ptr)
++{
++  ffi_closure *closure = ptr;
++
++  pthread_mutex_lock(&ffi_trampoline_lock);
++
++  /* Fetch the table and entry references */
++  ffi_trampoline_table *table = closure->trampoline_table;
++  ffi_trampoline_table_entry *entry = closure->trampoline_table_entry;
++
++  /* Return the entry to the free list */
++  entry->next = table->free_list;
++  table->free_list = entry;
++  table->free_count++;
++
++  /* If all trampolines within this table are free, and at least one other table exists, deallocate
++   * the table */
++  if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) {
++    /* Remove from the list */
++    if (table->prev != NULL)
++      table->prev->next = table->next;
++
++    if (table->next != NULL)
++      table->next->prev = table->prev;
++
++    /* Deallocate pages */
++    kern_return_t kt;
++    kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE);
++    if (kt != KERN_SUCCESS)
++      fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
++
++    kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE);
++    if (kt != KERN_SUCCESS)
++      fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__);
++
++    /* Deallocate free list */
++    free (table->free_list_pool);
++    free (table);
++  } else if (ffi_trampoline_tables != table) {
++    /* Otherwise, bump this table to the top of the list */
++    table->prev = NULL;
++    table->next = ffi_trampoline_tables;
++    if (ffi_trampoline_tables != NULL)
++      ffi_trampoline_tables->prev = table;
++
++    ffi_trampoline_tables = table;
++  }
++
++  pthread_mutex_unlock (&ffi_trampoline_lock);
++
++  /* Free the closure */
++  free (closure);
++}
++
++#else
++
+ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX)				\
+ ({ unsigned char *__tramp = (unsigned char*)(TRAMP);			\
+    unsigned int  __fun = (unsigned int)(FUN);				\
+    unsigned int  __ctx = (unsigned int)(CTX);				\
+-   *(unsigned int*) &__tramp[0] = 0xe92d000f; /* stmfd sp!, {r0-r3} */	\
+-   *(unsigned int*) &__tramp[4] = 0xe59f0000; /* ldr r0, [pc] */	\
+-   *(unsigned int*) &__tramp[8] = 0xe59ff000; /* ldr pc, [pc] */	\
++   unsigned char *insns = (unsigned char *)(CTX);                       \
++   memcpy (__tramp, ffi_arm_trampoline, sizeof ffi_arm_trampoline);     \
+    *(unsigned int*) &__tramp[12] = __ctx;				\
+    *(unsigned int*) &__tramp[16] = __fun;				\
+-   __clear_cache((&__tramp[0]), (&__tramp[19]));			\
++   __clear_cache((&__tramp[0]), (&__tramp[19])); /* Clear data mapping.  */ \
++   __clear_cache(insns, insns + 3 * sizeof (unsigned int));             \
++                                                 /* Clear instruction   \
++                                                    mapping.  */        \
+  })
+ 
++#endif
+ 
+ /* the cif must already be prep'ed */
+ 
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*,void*,void**,void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   void (*closure_func)(ffi_closure*) = NULL;
+ 
+   if (cif->abi == FFI_SYSV)
+     closure_func = &ffi_closure_SYSV;
++#ifdef __ARM_EABI__
+   else if (cif->abi == FFI_VFP)
+     closure_func = &ffi_closure_VFP;
++#endif
+   else
+-    FFI_ASSERT (0);
+-    
++    return FFI_BAD_ABI;
++
++#if FFI_EXEC_TRAMPOLINE_TABLE
++  void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc);
++  config[0] = closure;
++  config[1] = closure_func;
++#else
+   FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
+ 		       closure_func,  \
+ 		       codeloc);
+-    
++#endif
++
+   closure->cif  = cif;
+   closure->user_data = user_data;
+   closure->fun  = fun;
+ 
+   return FFI_OK;
+ }
+ 
+ /* Below are routines for VFP hard-float support. */
+@@ -439,19 +864,19 @@ static int vfp_type_p (ffi_type *t)
+ 		       ? FFI_TYPE_STRUCT_VFP_FLOAT
+ 		       : FFI_TYPE_STRUCT_VFP_DOUBLE);
+ 	}
+       return (int) t->type;
+     }
+   return 0;
+ }
+ 
+-static void place_vfp_arg (ffi_cif *cif, ffi_type *t)
++static int place_vfp_arg (ffi_cif *cif, ffi_type *t)
+ {
+-  int reg = cif->vfp_reg_free;
++  short reg = cif->vfp_reg_free;
+   int nregs = t->size / sizeof (float);
+   int align = ((t->type == FFI_TYPE_STRUCT_VFP_FLOAT
+ 		|| t->type == FFI_TYPE_FLOAT) ? 1 : 2);
+   /* Align register number. */
+   if ((reg & 1) && align == 2)
+     reg++;
+   while (reg + nregs <= 16)
+     {
+@@ -472,29 +897,35 @@ static void place_vfp_arg (ffi_cif *cif,
+       /* Update vfp_reg_free. */
+       if (cif->vfp_used & (1 << cif->vfp_reg_free))
+ 	{
+ 	  reg += nregs;
+ 	  while (cif->vfp_used & (1 << reg))
+ 	    reg += 1;
+ 	  cif->vfp_reg_free = reg;
+ 	}
+-      return;
++      return 0;
+     next_reg: ;
+     }
++  // done, mark all regs as used
++  cif->vfp_reg_free = 16;
++  cif->vfp_used = 0xFFFF;
++  return 1;
+ }
+ 
+ static void layout_vfp_args (ffi_cif *cif)
+ {
+   int i;
+   /* Init VFP fields */
+   cif->vfp_used = 0;
+   cif->vfp_nargs = 0;
+   cif->vfp_reg_free = 0;
+   memset (cif->vfp_args, -1, 16); /* Init to -1. */
+ 
+   for (i = 0; i < cif->nargs; i++)
+     {
+       ffi_type *t = cif->arg_types[i];
+-      if (vfp_type_p (t))
+-	place_vfp_arg (cif, t);
++      if (vfp_type_p (t) && place_vfp_arg (cif, t) == 1)
++        {
++          break;
++        }
+     }
+ }
+diff --git a/js/src/ctypes/libffi/src/arm/ffitarget.h b/js/src/ctypes/libffi/src/arm/ffitarget.h
+--- a/js/src/ctypes/libffi/src/arm/ffitarget.h
++++ b/js/src/ctypes/libffi/src/arm/ffitarget.h
+@@ -1,10 +1,13 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 2010  CodeSourcery
++                 Copyright (c) 1996-2003  Red Hat, Inc.
++
+    Target configuration macros for ARM.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,42 +25,47 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_SYSV,
+   FFI_VFP,
+   FFI_LAST_ABI,
+ #ifdef __ARM_PCS_VFP
+-  FFI_DEFAULT_ABI = FFI_VFP
++  FFI_DEFAULT_ABI = FFI_VFP,
+ #else
+-  FFI_DEFAULT_ABI = FFI_SYSV
++  FFI_DEFAULT_ABI = FFI_SYSV,
+ #endif
+ } ffi_abi;
+ #endif
+ 
+ #define FFI_EXTRA_CIF_FIELDS			\
+   int vfp_used;					\
+   short vfp_reg_free, vfp_nargs;		\
+   signed char vfp_args[16]			\
+ 
+ /* Internally used. */
+ #define FFI_TYPE_STRUCT_VFP_FLOAT  (FFI_TYPE_LAST + 1)
+ #define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2)
+ 
++#define FFI_TARGET_SPECIFIC_VARIADIC
++
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #define FFI_CLOSURES 1
+ #define FFI_TRAMPOLINE_SIZE 20
+ #define FFI_NATIVE_RAW_API 0
+ 
+ #endif
+-
+diff --git a/js/src/ctypes/libffi/src/arm/gentramp.sh b/js/src/ctypes/libffi/src/arm/gentramp.sh
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/arm/gentramp.sh
+@@ -0,0 +1,118 @@
++#!/bin/sh
++
++# -----------------------------------------------------------------------
++#  gentramp.sh - Copyright (c) 2010, Plausible Labs Cooperative, Inc.
++#  
++#  ARM Trampoline Page Generator
++#
++#  Permission is hereby granted, free of charge, to any person obtaining
++#  a copy of this software and associated documentation files (the
++#  ``Software''), to deal in the Software without restriction, including
++#  without limitation the rights to use, copy, modify, merge, publish,
++#  distribute, sublicense, and/or sell copies of the Software, and to
++#  permit persons to whom the Software is furnished to do so, subject to
++#  the following conditions:
++#
++#  The above copyright notice and this permission notice shall be included
++#  in all copies or substantial portions of the Software.
++#
++#  THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++#  NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++#  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++#  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++#  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++#  DEALINGS IN THE SOFTWARE.
++#  -----------------------------------------------------------------------
++
++PROGNAME=$0
++
++# Each trampoline is exactly 3 instructions, or 12 bytes. If any of these values change,
++# the entire arm trampoline implementation must be updated to match, too.
++
++# Size of an individual trampoline, in bytes
++TRAMPOLINE_SIZE=12
++
++# Page size, in bytes
++PAGE_SIZE=4096
++
++# Compute the size of the reachable config page; The first 16 bytes of the config page
++# are unreachable due to our maximum pc-relative ldr offset.
++PAGE_AVAIL=`expr $PAGE_SIZE - 16`
++
++# Compute the number of of available trampolines. 
++TRAMPOLINE_COUNT=`expr $PAGE_AVAIL / $TRAMPOLINE_SIZE`
++
++header () {
++    echo "# GENERATED CODE - DO NOT EDIT"
++    echo "# This file was generated by $PROGNAME"
++    echo ""
++
++    # Write out the license header
++cat << EOF
++#  Copyright (c) 2010, Plausible Labs Cooperative, Inc.
++#  
++#  Permission is hereby granted, free of charge, to any person obtaining
++#  a copy of this software and associated documentation files (the
++#  ``Software''), to deal in the Software without restriction, including
++#  without limitation the rights to use, copy, modify, merge, publish,
++#  distribute, sublicense, and/or sell copies of the Software, and to
++#  permit persons to whom the Software is furnished to do so, subject to
++#  the following conditions:
++#
++#  The above copyright notice and this permission notice shall be included
++#  in all copies or substantial portions of the Software.
++#
++#  THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++#  NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++#  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++#  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++#  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++#  DEALINGS IN THE SOFTWARE.
++#  -----------------------------------------------------------------------
++
++EOF
++
++    # Write out the trampoline table, aligned to the page boundary
++    echo ".text"
++    echo ".align 12"
++    echo ".globl _ffi_closure_trampoline_table_page"
++    echo "_ffi_closure_trampoline_table_page:"
++}
++
++
++# WARNING - Don't modify the trampoline code size without also updating the relevant libffi code
++trampoline () {
++    cat << END
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++END
++}
++
++main () {
++    # Write out the header
++    header
++
++    # Write out the trampolines
++    local i=0
++    while [ $i -lt ${TRAMPOLINE_COUNT} ]; do
++        trampoline
++        local i=`expr $i + 1`
++    done
++}
++
++main
+diff --git a/js/src/ctypes/libffi/src/arm/sysv.S b/js/src/ctypes/libffi/src/arm/sysv.S
+--- a/js/src/ctypes/libffi/src/arm/sysv.S
++++ b/js/src/ctypes/libffi/src/arm/sysv.S
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   sysv.S - Copyright (c) 1998, 2008 Red Hat, Inc.
++   sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc.
++	    Copyright (c) 2011 Plausible Labs Cooperative, Inc.
+    
+    ARM Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -34,25 +35,35 @@
+ #define CONCAT1(a, b) CONCAT2(a, b)
+ #define CONCAT2(a, b) a ## b
+ 
+ /* Use the right prefix for global labels.  */
+ #define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+ #else
+ #define CNAME(x) x
+ #endif
++#ifdef __APPLE__
++#define ENTRY(x) .globl _##x; _##x:
++#else
+ #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
++#endif /* __APPLE__ */
+ #endif
+ 
+ #ifdef __ELF__
+ #define LSYM(x) .x
+ #else
+ #define LSYM(x) x
+ #endif
+ 
++/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI
++  Function Call Guide */
++#ifdef __APPLE__
++#define __SOFTFP__
++#endif
++
+ /* We need a better way of testing for this, but for now, this is all 
+    we can do.  */
+ @ This selects the minimum architecture level required.
+ #define __ARM_ARCH__ 3
+ 
+ #if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
+ # undef __ARM_ARCH__
+ # define __ARM_ARCH__ 4
+@@ -93,40 +104,37 @@
+ 
+ /* Conditionally compile unwinder directives.  */
+ #ifdef __ARM_EABI__
+ #define UNWIND
+ #else
+ #define UNWIND @
+ #endif	
+ 
+-	
++.syntax unified
++
+ #if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
+-.macro	ARM_FUNC_START name
+-	.text
+-	.align 0
+-	.thumb
+-	.thumb_func
+-	ENTRY(\name)
+-	bx	pc
+-	nop
+-	.arm
++#define ARM_FUNC_START(name) \
++	.text; \
++	.align 2; \
++	.thumb; \
++	.thumb_func; \
++	ENTRY(name); \
++	bx pc; \
++	nop; \
++	.arm; \
++	UNWIND .fnstart; \
++_L__##name:
++#else
++#define ARM_FUNC_START(name) \
++	.text; \
++	.align 2; \
++	.arm; \
++	ENTRY(name); \
+ 	UNWIND .fnstart
+-/* A hook to tell gdb that we've switched to ARM mode.  Also used to call
+-   directly from other local arm routines.  */
+-_L__\name:		
+-.endm
+-#else
+-.macro	ARM_FUNC_START name
+-	.text
+-	.align 0
+-	.arm
+-	ENTRY(\name)
+-	UNWIND .fnstart
+-.endm
+ #endif
+ 
+ .macro	RETLDM	regs=, cond=, dirn=ia
+ #if defined (__INTERWORKING__)
+ 	.ifc "\regs",""
+ 	ldr\cond	lr, [sp], #4
+ 	.else
+ 	ldm\cond\dirn	sp!, {\regs, lr}
+@@ -136,41 +144,40 @@
+ 	.ifc "\regs",""
+ 	ldr\cond	pc, [sp], #4
+ 	.else
+ 	ldm\cond\dirn	sp!, {\regs, pc}
+ 	.endif
+ #endif
+ .endm
+ 
+-
+-	@ r0:   fn
++	@ r0:   ffi_prep_args
+ 	@ r1:   &ecif
+ 	@ r2:   cif->bytes
+ 	@ r3:   fig->flags
+ 	@ sp+0: ecif.rvalue
+ 
+ 	@ This assumes we are using gas.
+-ARM_FUNC_START ffi_call_SYSV
++ARM_FUNC_START(ffi_call_SYSV)
+ 	@ Save registers
+         stmfd	sp!, {r0-r3, fp, lr}
+ 	UNWIND .save	{r0-r3, fp, lr}
+ 	mov	fp, sp
+ 
+ 	UNWIND .setfp	fp, sp
+ 
+ 	@ Make room for all of the new args.
+ 	sub	sp, fp, r2
+ 
+ 	@ Place all of the ffi_prep_args in position
+ 	mov	r0, sp
+ 	@     r1 already set
+ 
+ 	@ Call ffi_prep_args(stack, &ecif)
+-	bl	ffi_prep_args
++	bl	CNAME(ffi_prep_args_SYSV)
+ 
+ 	@ move first 4 parameters in registers
+ 	ldmia	sp, {r0-r3}
+ 
+ 	@ and adjust stack
+ 	sub	lr, fp, sp	@ cif->bytes == fp - sp
+ 	ldr	ip, [fp]	@ load fn() in advance
+ 	cmp	lr, #16
+@@ -201,156 +208,65 @@ ARM_FUNC_START ffi_call_SYSV
+ 	streq	r0, [r2]
+ 	beq	LSYM(Lepilogue)
+ 
+ 	@ return INT64
+ 	cmp	r3, #FFI_TYPE_SINT64
+ #if defined(__SOFTFP__) || defined(__ARM_EABI__)
+ 	cmpne	r3, #FFI_TYPE_DOUBLE
+ #endif
+-	stmeqia	r2, {r0, r1}
++	stmiaeq	r2, {r0, r1}
+ 
+ #if !defined(__SOFTFP__) && !defined(__ARM_EABI__)
+ 	beq	LSYM(Lepilogue)
+ 
+ @ return FLOAT
+ 	cmp	r3, #FFI_TYPE_FLOAT
+ 	stfeqs	f0, [r2]
+ 	beq	LSYM(Lepilogue)
+ 
+ @ return DOUBLE or LONGDOUBLE
+ 	cmp	r3, #FFI_TYPE_DOUBLE
+ 	stfeqd	f0, [r2]
+ #endif
+ 
+ LSYM(Lepilogue):
+-	RETLDM	"r0-r3,fp"
++#if defined (__INTERWORKING__)
++	ldmia   sp!, {r0-r3,fp, lr}
++	bx	lr
++#else
++	ldmia   sp!, {r0-r3,fp, pc}
++#endif
+ 
+ .ffi_call_SYSV_end:
+ 	UNWIND .fnend
++#ifdef __ELF__
+         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
++#endif
+ 
+ 
+-/* Below are VFP hard-float ABI call and closure implementations.
+-   Add VFP FPU directive here. */
+-	.fpu	vfp
+-
+-	@ r0:   fn
+-	@ r1:   &ecif
+-	@ r2:   cif->bytes
+-	@ r3:   fig->flags
+-	@ sp+0: ecif.rvalue
+-
+-ARM_FUNC_START ffi_call_VFP
+-	@ Save registers
+-        stmfd	sp!, {r0-r3, fp, lr}
+-	UNWIND .save	{r0-r3, fp, lr}
+-	mov	fp, sp
+-	UNWIND .setfp	fp, sp
+-
+-	@ Make room for all of the new args.
+-	sub	sp, sp, r2
+-
+-	@ Make room for loading VFP args
+-	sub	sp, sp, #64
+-
+-	@ Place all of the ffi_prep_args in position
+-	mov	r0, sp
+-	@     r1 already set
+-	sub	r2, fp, #64   @ VFP scratch space
+-
+-	@ Call ffi_prep_args(stack, &ecif, vfp_space)
+-	bl	ffi_prep_args
+-
+-	@ Load VFP register args if needed
+-	cmp	r0, #0
+-	beq	LSYM(Lbase_args)
+-
+-	@ Load only d0 if possible
+-	cmp	r0, #3
+-	sub	ip, fp, #64
+-	flddle	d0, [ip]
+-	fldmiadgt	ip, {d0-d7}
+-
+-LSYM(Lbase_args):
+-	@ move first 4 parameters in registers
+-	ldmia	sp, {r0-r3}
+-
+-	@ and adjust stack
+-	sub	lr, ip, sp	@ cif->bytes == (fp - 64) - sp
+-	ldr	ip, [fp]	@ load fn() in advance
+-        cmp	lr, #16
+-	movhs	lr, #16
+-        add	sp, sp, lr
+-
+-	@ call (fn) (...)
+-	call_reg(ip)
+-
+-	@ Remove the space we pushed for the args
+-	mov	sp, fp
+-
+-	@ Load r2 with the pointer to storage for
+-	@ the return value
+-	ldr	r2, [sp, #24]
+-
+-	@ Load r3 with the return type code 
+-	ldr	r3, [sp, #12]
+-
+-	@ If the return value pointer is NULL,
+-	@ assume no return value.
+-	cmp	r2, #0
+-	beq	LSYM(Lepilogue_vfp)
+-	
+-	cmp	r3, #FFI_TYPE_INT
+-	streq	r0, [r2]
+-	beq	LSYM(Lepilogue_vfp)
+-
+-	cmp	r3, #FFI_TYPE_SINT64
+-	stmeqia	r2, {r0, r1}
+-	beq	LSYM(Lepilogue_vfp)
+-
+-	cmp	r3, #FFI_TYPE_FLOAT
+-	fstseq	s0, [r2]
+-	beq	LSYM(Lepilogue_vfp)
+-	
+-	cmp	r3, #FFI_TYPE_DOUBLE
+-	fstdeq	d0, [r2]
+-	beq	LSYM(Lepilogue_vfp)
+-
+-	cmp	r3, #FFI_TYPE_STRUCT_VFP_FLOAT
+-	cmpne	r3, #FFI_TYPE_STRUCT_VFP_DOUBLE
+-	fstmiadeq	r2, {d0-d3}
+-
+-LSYM(Lepilogue_vfp):
+-	RETLDM	"r0-r3,fp"
+-
+-.ffi_call_VFP_end:
+-	UNWIND .fnend
+-        .size    CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
+-	
+-	
+ /*
+ 	unsigned int FFI_HIDDEN
+-	ffi_closure_SYSV_inner (closure, respp, args)
++	ffi_closure_inner (closure, respp, args)
+ 	     ffi_closure *closure;
+ 	     void **respp;
+   	     void *args;
+ */
+ 
+-ARM_FUNC_START ffi_closure_SYSV
++ARM_FUNC_START(ffi_closure_SYSV)
+ 	UNWIND .pad #16
+ 	add	ip, sp, #16
+ 	stmfd	sp!, {ip, lr}
+ 	UNWIND .save	{r0, lr}
+ 	add	r2, sp, #8
+-	.pad #16
++	UNWIND .pad #16
+ 	sub	sp, sp, #16
+ 	str	sp, [sp, #8]
+ 	add	r1, sp, #8
+-	bl	ffi_closure_SYSV_inner
++	bl	CNAME(ffi_closure_inner)
+ 	cmp	r0, #FFI_TYPE_INT
+ 	beq	.Lretint
+ 
+ 	cmp	r0, #FFI_TYPE_FLOAT
+ #if defined(__SOFTFP__) || defined(__ARM_EABI__)
+ 	beq	.Lretint
+ #else
+ 	beq	.Lretfloat
+@@ -392,33 +308,136 @@ ARM_FUNC_START ffi_closure_SYSV
+ 	b	.Lclosure_epilogue
+ .Lretlongdouble:
+ 	ldfd	f0, [sp]
+ 	b	.Lclosure_epilogue
+ #endif
+ 
+ .ffi_closure_SYSV_end:
+ 	UNWIND .fnend
++#ifdef __ELF__
+         .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
++#endif
+ 
+ 
+-ARM_FUNC_START ffi_closure_VFP
++/* Below are VFP hard-float ABI call and closure implementations.
++   Add VFP FPU directive here. This is only compiled into the library
++   under EABI.  */
++#ifdef __ARM_EABI__
++	.fpu	vfp
++
++	@ r0:   fn
++	@ r1:   &ecif
++	@ r2:   cif->bytes
++	@ r3:   fig->flags
++	@ sp+0: ecif.rvalue
++
++ARM_FUNC_START(ffi_call_VFP)
++	@ Save registers
++        stmfd	sp!, {r0-r3, fp, lr}
++	UNWIND .save	{r0-r3, fp, lr}
++	mov	fp, sp
++	UNWIND .setfp	fp, sp
++
++	@ Make room for all of the new args.
++	sub	sp, sp, r2
++
++	@ Make room for loading VFP args
++	sub	sp, sp, #64
++
++	@ Place all of the ffi_prep_args in position
++	mov	r0, sp
++	@     r1 already set
++	sub	r2, fp, #64   @ VFP scratch space
++
++	@ Call ffi_prep_args(stack, &ecif, vfp_space)
++	bl	CNAME(ffi_prep_args_VFP)
++
++	@ Load VFP register args if needed
++	cmp	r0, #0
++	mov	ip, fp
++	beq	LSYM(Lbase_args)
++
++	@ Load only d0 if possible
++	cmp	r0, #3
++	sub	ip, fp, #64
++	flddle	d0, [ip]
++	fldmiadgt	ip, {d0-d7}
++
++LSYM(Lbase_args):
++	@ move first 4 parameters in registers
++	ldmia	sp, {r0-r3}
++
++	@ and adjust stack
++	sub	lr, ip, sp	@ cif->bytes == (fp - 64) - sp
++	ldr	ip, [fp]	@ load fn() in advance
++        cmp	lr, #16
++	movhs	lr, #16
++        add	sp, sp, lr
++
++	@ call (fn) (...)
++	call_reg(ip)
++
++	@ Remove the space we pushed for the args
++	mov	sp, fp
++
++	@ Load r2 with the pointer to storage for
++	@ the return value
++	ldr	r2, [sp, #24]
++
++	@ Load r3 with the return type code 
++	ldr	r3, [sp, #12]
++
++	@ If the return value pointer is NULL,
++	@ assume no return value.
++	cmp	r2, #0
++	beq	LSYM(Lepilogue_vfp)
++
++	cmp	r3, #FFI_TYPE_INT
++	streq	r0, [r2]
++	beq	LSYM(Lepilogue_vfp)
++
++	cmp	r3, #FFI_TYPE_SINT64
++	stmeqia	r2, {r0, r1}
++	beq	LSYM(Lepilogue_vfp)
++
++	cmp	r3, #FFI_TYPE_FLOAT
++	fstseq	s0, [r2]
++	beq	LSYM(Lepilogue_vfp)
++	
++	cmp	r3, #FFI_TYPE_DOUBLE
++	fstdeq	d0, [r2]
++	beq	LSYM(Lepilogue_vfp)
++
++	cmp	r3, #FFI_TYPE_STRUCT_VFP_FLOAT
++	cmpne	r3, #FFI_TYPE_STRUCT_VFP_DOUBLE
++	fstmiadeq	r2, {d0-d3}
++
++LSYM(Lepilogue_vfp):
++	RETLDM	"r0-r3,fp"
++
++.ffi_call_VFP_end:
++	UNWIND .fnend
++        .size    CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
++
++
++ARM_FUNC_START(ffi_closure_VFP)
+ 	fstmfdd	sp!, {d0-d7}
+ 	@ r0-r3, then d0-d7
+ 	UNWIND .pad #80
+ 	add	ip, sp, #80
+ 	stmfd	sp!, {ip, lr}
+ 	UNWIND .save	{r0, lr}
+ 	add	r2, sp, #72
+ 	add	r3, sp, #8
+-	.pad #72
++	UNWIND .pad #72
+ 	sub	sp, sp, #72
+ 	str	sp, [sp, #64]
+ 	add	r1, sp, #64
+-	bl	ffi_closure_SYSV_inner
++	bl	CNAME(ffi_closure_inner)
+ 
+ 	cmp	r0, #FFI_TYPE_INT
+ 	beq	.Lretint_vfp
+ 
+ 	cmp	r0, #FFI_TYPE_FLOAT
+ 	beq	.Lretfloat_vfp
+ 
+ 	cmp	r0, #FFI_TYPE_DOUBLE
+@@ -455,12 +474,18 @@ ARM_FUNC_START ffi_closure_VFP
+ 	b	.Lclosure_epilogue_vfp
+ .Lretdouble_struct_vfp:
+ 	fldmiad	sp, {d0-d3}
+ 	b	.Lclosure_epilogue_vfp
+ 
+ .ffi_closure_VFP_end:
+ 	UNWIND .fnend
+         .size    CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP)
++#endif
++
++ENTRY(ffi_arm_trampoline)
++	stmfd sp!, {r0-r3}
++	ldr r0, [pc]
++	ldr pc, [pc]
+ 
+ #if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",%progbits
+ #endif
+diff --git a/js/src/ctypes/libffi/src/arm/trampoline.S b/js/src/ctypes/libffi/src/arm/trampoline.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/arm/trampoline.S
+@@ -0,0 +1,4450 @@
++# GENERATED CODE - DO NOT EDIT
++# This file was generated by src/arm/gentramp.sh
++
++#  Copyright (c) 2010, Plausible Labs Cooperative, Inc.
++#  
++#  Permission is hereby granted, free of charge, to any person obtaining
++#  a copy of this software and associated documentation files (the
++#  Software''), to deal in the Software without restriction, including
++#  without limitation the rights to use, copy, modify, merge, publish,
++#  distribute, sublicense, and/or sell copies of the Software, and to
++#  permit persons to whom the Software is furnished to do so, subject to
++#  the following conditions:
++#
++#  The above copyright notice and this permission notice shall be included
++#  in all copies or substantial portions of the Software.
++#
++#  THE SOFTWARE IS PROVIDED AS IS'', WITHOUT WARRANTY OF ANY KIND,
++#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++#  NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++#  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++#  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++#  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++#  DEALINGS IN THE SOFTWARE.
++#  -----------------------------------------------------------------------
++
++.text
++.align 12
++.globl _ffi_closure_trampoline_table_page
++_ffi_closure_trampoline_table_page:
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
++
++    // trampoline
++    // Save to stack
++    stmfd sp!, {r0-r3}
++
++    // Load the context argument from the config page.
++    // This places the first usable config value at _ffi_closure_trampoline_table-4080
++    // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc.
++    ldr r0, [pc, #-4092]
++
++    // Load the jump address from the config page.
++    ldr pc, [pc, #-4092]
++
+diff --git a/js/src/ctypes/libffi/src/avr32/ffi.c b/js/src/ctypes/libffi/src/avr32/ffi.c
+--- a/js/src/ctypes/libffi/src/avr32/ffi.c
++++ b/js/src/ctypes/libffi/src/avr32/ffi.c
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 2009  Bradley Smith <brad@brad-smith.co.uk>
++   ffi.c - Copyright (c) 2011  Anthony Green
++           Copyright (c) 2009  Bradley Smith <brad@brad-smith.co.uk>
+ 
+    AVR32 Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -389,17 +390,18 @@ unsigned int ffi_closure_SYSV_inner(ffi_
+ 
+     return cif->flags;
+ }
+ 
+ ffi_status ffi_prep_closure_loc(ffi_closure* closure, ffi_cif* cif,
+     void (*fun)(ffi_cif*, void*, void**, void*), void *user_data,
+     void *codeloc)
+ {
+-    FFI_ASSERT(cif->abi == FFI_SYSV);
++    if (cif->abi != FFI_SYSV)
++      return FFI_BAD_ABI;
+ 
+     unsigned char *__tramp = (unsigned char*)(&closure->tramp[0]);
+     unsigned int  __fun = (unsigned int)(&ffi_closure_SYSV);
+     unsigned int  __ctx = (unsigned int)(codeloc);
+     unsigned int  __rstruct_flag = (unsigned int)(cif->rstruct_flag);
+     unsigned int  __inner = (unsigned int)(&ffi_closure_SYSV_inner);
+     *(unsigned int*) &__tramp[0] = 0xebcd1f00;    /* pushm  r8-r12 */
+     *(unsigned int*) &__tramp[4] = 0xfefc0010;    /* ld.w   r12, pc[16] */
+diff --git a/js/src/ctypes/libffi/src/avr32/ffitarget.h b/js/src/ctypes/libffi/src/avr32/ffitarget.h
+--- a/js/src/ctypes/libffi/src/avr32/ffitarget.h
++++ b/js/src/ctypes/libffi/src/avr32/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 2009  Bradley Smith <brad@brad-smith.co.uk>
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 2009  Bradley Smith <brad@brad-smith.co.uk>
+    Target configuration macros for AVR32.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_SYSV,
+   FFI_LAST_ABI,
+diff --git a/js/src/ctypes/libffi/src/bfin/ffi.c b/js/src/ctypes/libffi/src/bfin/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/bfin/ffi.c
+@@ -0,0 +1,196 @@
++/* -----------------------------------------------------------------------
++   ffi.c - Copyright (c) 2012  Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>,
++							   Paulo Pizarro <paulo.pizarro@gmail.com>
++
++   Blackfin Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++#include <stdio.h>
++
++/* Maximum number of GPRs available for argument passing.  */
++#define MAX_GPRARGS 3
++
++/*
++ * Return types
++ */
++#define FFIBFIN_RET_VOID 0
++#define FFIBFIN_RET_BYTE 1
++#define FFIBFIN_RET_HALFWORD 2
++#define FFIBFIN_RET_INT64 3
++#define FFIBFIN_RET_INT32 4
++
++/*====================================================================*/
++/*                          PROTOTYPE          *
++ /*====================================================================*/
++void ffi_prep_args(unsigned char *, extended_cif *);
++
++/*====================================================================*/
++/*                          Externals                                 */
++/*                          (Assembly)                                */
++/*====================================================================*/
++
++extern void ffi_call_SYSV(unsigned, extended_cif *, void(*)(unsigned char *, extended_cif *), unsigned, void *, void(*fn)(void));
++
++/*====================================================================*/
++/*                          Implementation                            */
++/*                                                            */
++/*====================================================================*/
++
++
++/*
++ * This function calculates the return type (size) based on type.
++ */
++
++ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
++{
++   /* --------------------------------------*
++    *   Return handling                *
++    * --------------------------------------*/
++   switch (cif->rtype->type) {
++      case FFI_TYPE_VOID:
++         cif->flags = FFIBFIN_RET_VOID;
++         break;
++      case FFI_TYPE_UINT16:
++      case FFI_TYPE_SINT16:
++         cif->flags = FFIBFIN_RET_HALFWORD;
++         break;
++      case FFI_TYPE_UINT8:
++         cif->flags = FFIBFIN_RET_BYTE;
++         break;
++      case FFI_TYPE_INT:
++      case FFI_TYPE_UINT32:
++      case FFI_TYPE_SINT32:
++      case FFI_TYPE_FLOAT:
++      case FFI_TYPE_POINTER:
++      case FFI_TYPE_SINT8:
++         cif->flags = FFIBFIN_RET_INT32;
++         break;
++      case FFI_TYPE_SINT64:
++      case FFI_TYPE_UINT64:
++      case FFI_TYPE_DOUBLE:
++          cif->flags = FFIBFIN_RET_INT64;
++          break;
++      case FFI_TYPE_STRUCT:
++         if (cif->rtype->size <= 4){
++        	 cif->flags = FFIBFIN_RET_INT32;
++         }else if (cif->rtype->size == 8){
++        	 cif->flags = FFIBFIN_RET_INT64;
++         }else{
++        	 //it will return via a hidden pointer in P0
++        	 cif->flags = FFIBFIN_RET_VOID;
++         }
++         break;
++      default:
++         FFI_ASSERT(0);
++         break;
++   }
++   return FFI_OK;
++}
++
++/*
++ * This will prepare the arguments and will call the assembly routine
++ * cif = the call interface
++ * fn = the function to be called
++ * rvalue = the return value
++ * avalue = the arguments
++ */
++void ffi_call(ffi_cif *cif, void(*fn)(void), void *rvalue, void **avalue)
++{
++   int ret_type = cif->flags;
++   extended_cif ecif;
++   ecif.cif = cif;
++   ecif.avalue = avalue;
++   ecif.rvalue = rvalue;
++
++   switch (cif->abi) {
++      case FFI_SYSV:
++         ffi_call_SYSV(cif->bytes, &ecif, ffi_prep_args, ret_type, ecif.rvalue, fn);
++         break;
++      default:
++         FFI_ASSERT(0);
++         break;
++   }
++}
++
++
++/*
++* This function prepares the parameters (copies them from the ecif to the stack)
++*  to call the function (ffi_prep_args is called by the assembly routine in file
++*  sysv.S, which also calls the actual function)
++*/
++void ffi_prep_args(unsigned char *stack, extended_cif *ecif)
++{
++   register unsigned int i = 0;
++   void **p_argv;
++   unsigned char *argp;
++   ffi_type **p_arg;
++   argp = stack;
++   p_argv = ecif->avalue;
++   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
++        (i != 0);
++        i--, p_arg++) {
++      size_t z;
++      z = (*p_arg)->size;
++      if (z < sizeof(int)) {
++         z = sizeof(int);
++         switch ((*p_arg)->type) {
++            case FFI_TYPE_SINT8: {
++                  signed char v = *(SINT8 *)(* p_argv);
++                  signed int t = v;
++                  *(signed int *) argp = t;
++               }
++               break;
++            case FFI_TYPE_UINT8: {
++                  unsigned char v = *(UINT8 *)(* p_argv);
++                  unsigned int t = v;
++                  *(unsigned int *) argp = t;
++               }
++               break;
++            case FFI_TYPE_SINT16:
++               *(signed int *) argp = (signed int) * (SINT16 *)(* p_argv);
++               break;
++            case FFI_TYPE_UINT16:
++               *(unsigned int *) argp = (unsigned int) * (UINT16 *)(* p_argv);
++               break;
++            case FFI_TYPE_STRUCT:
++               memcpy(argp, *p_argv, (*p_arg)->size);
++               break;
++            default:
++               FFI_ASSERT(0);
++               break;
++         }
++      } else if (z == sizeof(int)) {
++         *(unsigned int *) argp = (unsigned int) * (UINT32 *)(* p_argv);
++      } else {
++         memcpy(argp, *p_argv, z);
++      }
++      p_argv++;
++      argp += z;
++   }
++}
++
++
++
+diff --git a/js/src/ctypes/libffi/src/bfin/ffitarget.h b/js/src/ctypes/libffi/src/bfin/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/bfin/ffitarget.h
+@@ -0,0 +1,43 @@
++/* -----------------------------------------------------------------------
++   ffitarget.h - Copyright (c) 2012  Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>
++
++   Blackfin Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_ASM
++typedef unsigned long          ffi_arg;
++typedef signed 	 long          ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_SYSV,
++  FFI_LAST_ABI,
++  FFI_DEFAULT_ABI = FFI_SYSV
++} ffi_abi;
++#endif
++
++#endif
++
+diff --git a/js/src/ctypes/libffi/src/bfin/sysv.S b/js/src/ctypes/libffi/src/bfin/sysv.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/bfin/sysv.S
+@@ -0,0 +1,179 @@
++/* -----------------------------------------------------------------------
++   sysv.S - Copyright (c) 2012  Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>,
++                                Paulo Pizarro <paulo.pizarro@gmail.com>
++
++   Blackfin Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++.text
++.align 4
++
++	/*
++	 There is a "feature" in the bfin toolchain that it puts a _ before function names
++	 that's why the function here it's called _ffi_call_SYSV and not ffi_call_SYSV
++	 */
++	.global _ffi_call_SYSV;
++	.type _ffi_call_SYSV, STT_FUNC;
++	.func ffi_call_SYSV
++
++	/*
++         cif->bytes    = R0    (fp+8)
++         &ecif         = R1    (fp+12)
++         ffi_prep_args = R2    (fp+16)
++         ret_type      = stack (fp+20)
++         ecif.rvalue   = stack (fp+24)
++         fn            = stack (fp+28)
++                           got (fp+32)
++
++        There is room for improvement here (we can use temporary registers
++        instead of saving the values in the memory)
++        REGS:
++        P5 => Stack pointer (function arguments)
++        R5 => cif->bytes
++        R4 => ret->type
++
++        FP-20 = P3
++        FP-16 = SP (parameters area)
++        FP-12 = SP (temp)
++        FP-08 = function return part 1 [R0]
++        FP-04 = function return part 2 [R1]
++	*/
++
++_ffi_call_SYSV:
++.prologue:
++	LINK 20;
++	[FP-20] = P3;
++	[FP+8] = R0;
++	[FP+12] = R1;
++	[FP+16] = R2;
++
++.allocate_stack:
++	//alocate cif->bytes into the stack
++	R1 = [FP+8];
++	R0 = SP;
++	R0 = R0 - R1;
++	R1 = 4;
++	R0 = R0 - R1;
++	[FP-12] = SP;
++	SP = R0;
++	[FP-16] = SP;
++
++.call_prep_args:
++	//get the addr of prep_args
++	P0 = [P3 + _ffi_prep_args@FUNCDESC_GOT17M4];
++	P1 = [P0];
++	P3 = [P0+4];
++	R0 = [FP-16];//SP (parameter area)
++	R1 = [FP+12];//ecif
++	call (P1);
++
++.call_user_function:
++	//ajust SP so as to allow the user function access the parameters on the stack
++	SP = [FP-16]; //point to function parameters
++	R0 = [SP];
++	R1 = [SP+4];
++	R2 = [SP+8];
++	//load user function address
++	P0 = FP;
++	P0 +=28;
++	P1 = [P0];
++	P1 = [P1];
++	P3 = [P0+4];
++	/*
++		For functions returning aggregate values (struct) occupying more than 8 bytes,
++		the caller allocates the return value object on the stack and the address
++		of this object is passed to the callee as a hidden argument in register P0.
++	*/
++	P0 = [FP+24];
++
++	call (P1);
++	SP = [FP-12];
++.compute_return:
++	P2 = [FP-20];
++	[FP-8] = R0;
++	[FP-4] = R1;
++
++	R0 = [FP+20];
++	R1 = R0 << 2;
++
++	R0 = [P2+.rettable@GOT17M4];
++	R0 = R1 + R0;
++	P2 = R0;
++	R1 = [P2];
++
++	P2 = [FP+-20];
++	R0 = [P2+.rettable@GOT17M4];
++	R0 = R1 + R0;
++	P2 = R0;
++	R0 = [FP-8];
++	R1 = [FP-4];
++	jump (P2);
++
++/*
++#define FFIBFIN_RET_VOID 0
++#define FFIBFIN_RET_BYTE 1
++#define FFIBFIN_RET_HALFWORD 2
++#define FFIBFIN_RET_INT64 3
++#define FFIBFIN_RET_INT32 4
++*/
++.align 4
++.align 4
++.rettable:
++	.dd .epilogue - .rettable
++	.dd	.rbyte - .rettable;
++	.dd	.rhalfword - .rettable;
++	.dd	.rint64 - .rettable;
++	.dd	.rint32 - .rettable;
++
++.rbyte:
++	P0 = [FP+24];
++	R0 = R0.B (Z);
++	[P0] = R0;
++	JUMP .epilogue
++.rhalfword:
++	P0 = [FP+24];
++	R0 = R0.L;
++	[P0] = R0;
++	JUMP .epilogue
++.rint64:
++	P0 = [FP+24];// &rvalue
++	[P0] = R0;
++	[P0+4] = R1;
++	JUMP .epilogue
++.rint32:
++	P0 = [FP+24];
++	[P0] = R0;
++.epilogue:
++	R0 = [FP+8];
++	R1 = [FP+12];
++	R2 = [FP+16];
++	P3 = [FP-20];
++	UNLINK;
++	RTS;
++
++.size _ffi_call_SYSV,.-_ffi_call_SYSV;
++.endfunc
+diff --git a/js/src/ctypes/libffi/src/closures.c b/js/src/ctypes/libffi/src/closures.c
+--- a/js/src/ctypes/libffi/src/closures.c
++++ b/js/src/ctypes/libffi/src/closures.c
+@@ -1,11 +1,12 @@
+ /* -----------------------------------------------------------------------
+-   closures.c - Copyright (c) 2007  Red Hat, Inc.
+-   Copyright (C) 2007, 2009 Free Software Foundation, Inc
++   closures.c - Copyright (c) 2007, 2009, 2010  Red Hat, Inc.
++                Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc
++                Copyright (c) 2011 Plausible Labs Cooperative, Inc.
+ 
+    Code to allocate and deallocate memory for closures.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -27,18 +28,18 @@
+ 
+ #if defined __linux__ && !defined _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+-#ifndef FFI_MMAP_EXEC_WRIT
+-# if __gnu_linux__
++#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE
++# if __gnu_linux__ && !defined(__ANDROID__)
+ /* This macro indicates it may be forbidden to map anonymous memory
+    with both write and execute permission.  Code compiled when this
+    option is defined will attempt to map such pages once, but if it
+    fails, it falls back to creating a temporary file in a writable and
+    executable filesystem and mapping pages from it into separate
+    locations in the virtual memory space, one location writable and
+    another executable.  */
+ #  define FFI_MMAP_EXEC_WRIT 1
+@@ -58,17 +59,21 @@
+    don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that
+    might cause audit messages.  */
+ #  define FFI_MMAP_EXEC_SELINUX 1
+ # endif
+ #endif
+ 
+ #if FFI_CLOSURES
+ 
+-# if FFI_MMAP_EXEC_WRIT
++# if FFI_EXEC_TRAMPOLINE_TABLE
++
++// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations.
++
++# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */
+ 
+ #define USE_LOCKS 1
+ #define USE_DL_PREFIX 1
+ #ifdef __GNUC__
+ #ifndef USE_BUILTIN_FFS
+ #define USE_BUILTIN_FFS 1
+ #endif
+ #endif
+@@ -162,25 +167,48 @@ selinux_enabled_check (void)
+ 			      : (selinux_enabled = selinux_enabled_check ()))
+ 
+ #else
+ 
+ #define is_selinux_enabled() 0
+ 
+ #endif /* !FFI_MMAP_EXEC_SELINUX */
+ 
+-#elif defined (__CYGWIN__)
++/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */
++#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX
++#include <stdlib.h>
++
++static int emutramp_enabled = -1;
++
++static int
++emutramp_enabled_check (void)
++{
++  if (getenv ("FFI_DISABLE_EMUTRAMP") == NULL)
++    return 1;
++  else
++    return 0;
++}
++
++#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \
++                               : (emutramp_enabled = emutramp_enabled_check ()))
++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */
++
++#elif defined (__CYGWIN__) || defined(__INTERIX)
+ 
+ #include <sys/mman.h>
+ 
+ /* Cygwin is Linux-like, but not quite that Linux-like.  */
+ #define is_selinux_enabled() 0
+ 
+ #endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */
+ 
++#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX
++#define is_emutramp_enabled() 0
++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */
++
+ /* Declare all functions defined in dlmalloc.c as static.  */
+ static void *dlmalloc(size_t);
+ static void dlfree(void*);
+ static void *dlcalloc(size_t, size_t) MAYBE_UNUSED;
+ static void *dlrealloc(void *, size_t) MAYBE_UNUSED;
+ static void *dlmemalign(size_t, size_t) MAYBE_UNUSED;
+ static void *dlvalloc(size_t) MAYBE_UNUSED;
+ static int dlmallopt(int, int) MAYBE_UNUSED;
+@@ -188,31 +216,31 @@ static size_t dlmalloc_footprint(void) M
+ static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED;
+ static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED;
+ static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED;
+ static void *dlpvalloc(size_t) MAYBE_UNUSED;
+ static int dlmalloc_trim(size_t) MAYBE_UNUSED;
+ static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED;
+ static void dlmalloc_stats(void) MAYBE_UNUSED;
+ 
+-#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__)
++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX)
+ /* Use these for mmap and munmap within dlmalloc.c.  */
+ static void *dlmmap(void *, size_t, int, int, int, off_t);
+ static int dlmunmap(void *, size_t);
+-#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) */
++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */
+ 
+ #define mmap dlmmap
+ #define munmap dlmunmap
+ 
+ #include "dlmalloc.c"
+ 
+ #undef mmap
+ #undef munmap
+ 
+-#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__)
++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX)
+ 
+ /* A mutex used to synchronize access to *exec* variables in this file.  */
+ static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER;
+ 
+ /* A file descriptor of a temporary file from which we'll map
+    executable pages.  */
+ static int execfd = -1;
+ 
+@@ -231,17 +259,17 @@ open_temp_exec_file_name (char *name)
+   return fd;
+ }
+ 
+ /* Open a temporary file in the named directory.  */
+ static int
+ open_temp_exec_file_dir (const char *dir)
+ {
+   static const char suffix[] = "/ffiXXXXXX";
+-  int lendir = strlen (dir);
++  size_t lendir = strlen (dir);
+   char *tempname = __builtin_alloca (lendir + sizeof (suffix));
+ 
+   if (!tempname)
+     return -1;
+ 
+   memcpy (tempname, dir, lendir);
+   memcpy (tempname + lendir, suffix, sizeof (suffix));
+ 
+@@ -289,17 +317,17 @@ open_temp_exec_file_mnt (const char *mou
+     return -1;
+ 
+   for (;;)
+     {
+       int fd;
+       struct mntent mnt;
+       char buf[MAXPATHLEN * 3];
+ 
+-      if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)))
++      if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL)
+ 	return -1;
+ 
+       if (hasmntopt (&mnt, "ro")
+ 	  || hasmntopt (&mnt, "noexec")
+ 	  || access (mnt.mnt_dir, W_OK))
+ 	continue;
+ 
+       fd = open_temp_exec_file_dir (mnt.mnt_dir);
+@@ -349,17 +377,17 @@ open_temp_exec_file_opts_next (void)
+       open_temp_exec_file_opts_idx = 0;
+       return 1;
+     }
+ 
+   return 0;
+ }
+ 
+ /* Return a file descriptor of a temporary zero-sized file in a
+-   writable and exexutable filesystem.  */
++   writable and executable filesystem.  */
+ static int
+ open_temp_exec_file (void)
+ {
+   int fd;
+ 
+   do
+     {
+       fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func
+@@ -448,16 +476,22 @@ dlmmap (void *start, size_t length, int 
+ 	  && prot == (PROT_READ | PROT_WRITE)
+ 	  && flags == (MAP_PRIVATE | MAP_ANONYMOUS)
+ 	  && fd == -1 && offset == 0);
+ 
+ #if FFI_CLOSURE_TEST
+   printf ("mapping in %zi\n", length);
+ #endif
+ 
++  if (execfd == -1 && is_emutramp_enabled ())
++    {
++      ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset);
++      return ptr;
++    }
++
+   if (execfd == -1 && !is_selinux_enabled ())
+     {
+       ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset);
+ 
+       if (ptr != MFAIL || (errno != EPERM && errno != EACCES))
+ 	/* Cool, no need to mess with separate segments.  */
+ 	return ptr;
+ 
+@@ -517,17 +551,17 @@ segment_holding_code (mstate m, char* ad
+ 	&& addr < add_segment_exec_offset (sp->base, sp) + sp->size)
+       return sp;
+     if ((sp = sp->next) == 0)
+       return 0;
+   }
+ }
+ #endif
+ 
+-#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) */
++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */
+ 
+ /* Allocate a chunk of memory with the given size.  Returns a pointer
+    to the writable address, and sets *CODE to the executable
+    corresponding virtual address.  */
+ void *
+ ffi_closure_alloc (size_t size, void **code)
+ {
+   void *ptr;
+diff --git a/js/src/ctypes/libffi/src/cris/ffi.c b/js/src/ctypes/libffi/src/cris/ffi.c
+--- a/js/src/ctypes/libffi/src/cris/ffi.c
++++ b/js/src/ctypes/libffi/src/cris/ffi.c
+@@ -148,31 +148,34 @@ ffi_prep_args (char *stack, extended_cif
+ 	}
+       p_argv++;
+       argp += z;
+     }
+ 
+   return (struct_count);
+ }
+ 
+-ffi_status
+-ffi_prep_cif (ffi_cif * cif,
+-	      ffi_abi abi, unsigned int nargs,
+-	      ffi_type * rtype, ffi_type ** atypes)
++ffi_status FFI_HIDDEN
++ffi_prep_cif_core (ffi_cif * cif,
++	           ffi_abi abi, unsigned int isvariadic,
++		   unsigned int nfixedargs, unsigned int ntotalargs,
++	           ffi_type * rtype, ffi_type ** atypes)
+ {
+   unsigned bytes = 0;
+   unsigned int i;
+   ffi_type **ptr;
+ 
+   FFI_ASSERT (cif != NULL);
++  FFI_ASSERT((!isvariadic) || (nfixedargs >= 1));
++  FFI_ASSERT(nfixedargs <= ntotalargs);
+   FFI_ASSERT (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI);
+ 
+   cif->abi = abi;
+   cif->arg_types = atypes;
+-  cif->nargs = nargs;
++  cif->nargs = ntotalargs;
+   cif->rtype = rtype;
+ 
+   cif->flags = 0;
+ 
+   if ((cif->rtype->size == 0)
+       && (initialize_aggregate_packed_struct (cif->rtype) != FFI_OK))
+     return FFI_BAD_TYPEDEF;
+ 
+diff --git a/js/src/ctypes/libffi/src/cris/ffitarget.h b/js/src/ctypes/libffi/src/cris/ffitarget.h
+--- a/js/src/ctypes/libffi/src/cris/ffitarget.h
++++ b/js/src/ctypes/libffi/src/cris/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for CRIS.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_SYSV,
+   FFI_LAST_ABI,
+diff --git a/js/src/ctypes/libffi/src/dlmalloc.c b/js/src/ctypes/libffi/src/dlmalloc.c
+--- a/js/src/ctypes/libffi/src/dlmalloc.c
++++ b/js/src/ctypes/libffi/src/dlmalloc.c
+@@ -617,16 +617,19 @@ DEFAULT_MMAP_THRESHOLD       default: 25
+ */
+ 
+ /* #define HAVE_USR_INCLUDE_MALLOC_H */
+ 
+ #ifdef HAVE_USR_INCLUDE_MALLOC_H
+ #include "/usr/include/malloc.h"
+ #else /* HAVE_USR_INCLUDE_MALLOC_H */
+ 
++/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */
++#define _STRUCT_MALLINFO
++
+ struct mallinfo {
+   MALLINFO_FIELD_TYPE arena;    /* non-mmapped space allocated from system */
+   MALLINFO_FIELD_TYPE ordblks;  /* number of free chunks */
+   MALLINFO_FIELD_TYPE smblks;   /* always 0 */
+   MALLINFO_FIELD_TYPE hblks;    /* always 0 */
+   MALLINFO_FIELD_TYPE hblkhd;   /* space in mmapped regions */
+   MALLINFO_FIELD_TYPE usmblks;  /* maximum total allocated space */
+   MALLINFO_FIELD_TYPE fsmblks;  /* always 0 */
+@@ -1247,17 +1250,17 @@ extern void*     sbrk(ptrdiff_t);
+ 
+ /* ------------------- size_t and alignment properties -------------------- */
+ 
+ /* The byte and bit size of a size_t */
+ #define SIZE_T_SIZE         (sizeof(size_t))
+ #define SIZE_T_BITSIZE      (sizeof(size_t) << 3)
+ 
+ /* Some constants coerced to size_t */
+-/* Annoying but necessary to avoid errors on some plaftorms */
++/* Annoying but necessary to avoid errors on some platforms */
+ #define SIZE_T_ZERO         ((size_t)0)
+ #define SIZE_T_ONE          ((size_t)1)
+ #define SIZE_T_TWO          ((size_t)2)
+ #define TWO_SIZE_T_SIZES    (SIZE_T_SIZE<<1)
+ #define FOUR_SIZE_T_SIZES   (SIZE_T_SIZE<<2)
+ #define SIX_SIZE_T_SIZES    (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
+ #define HALF_MAX_SIZE_T     (MAX_SIZE_T / 2U)
+ 
+@@ -1401,17 +1404,17 @@ static int win32munmap(void* ptr, size_t
+ #endif /* HAVE_MMAP && HAVE_MREMAP */
+ 
+ #if HAVE_MORECORE
+ #define CALL_MORECORE(S)     MORECORE(S)
+ #else  /* HAVE_MORECORE */
+ #define CALL_MORECORE(S)     MFAIL
+ #endif /* HAVE_MORECORE */
+ 
+-/* mstate bit set if continguous morecore disabled or failed */
++/* mstate bit set if contiguous morecore disabled or failed */
+ #define USE_NONCONTIGUOUS_BIT (4U)
+ 
+ /* segment bit set in create_mspace_with_base */
+ #define EXTERN_BIT            (8U)
+ 
+ 
+ /* --------------------------- Lock preliminaries ------------------------ */
+ 
+@@ -1653,17 +1656,17 @@ struct malloc_chunk {
+   size_t               head;       /* Size and inuse bits. */
+   struct malloc_chunk* fd;         /* double links -- used only if free. */
+   struct malloc_chunk* bk;
+ };
+ 
+ typedef struct malloc_chunk  mchunk;
+ typedef struct malloc_chunk* mchunkptr;
+ typedef struct malloc_chunk* sbinptr;  /* The type of bins of chunks */
+-typedef unsigned int bindex_t;         /* Described below */
++typedef size_t bindex_t;               /* Described below */
+ typedef unsigned int binmap_t;         /* Described below */
+ typedef unsigned int flag_t;           /* The type of various bit flag sets */
+ 
+ /* ------------------- Chunks sizes and alignments ----------------------- */
+ 
+ #define MCHUNK_SIZE         (sizeof(mchunk))
+ 
+ #if FOOTERS
+@@ -3082,18 +3085,18 @@ static void internal_malloc_stats(mstate
+ 
+ /*
+   Unlink steps:
+ 
+   1. If x is a chained node, unlink it from its same-sized fd/bk links
+      and choose its bk node as its replacement.
+   2. If x was the last node of its size, but not a leaf node, it must
+      be replaced with a leaf node (not merely one with an open left or
+-     right), to make sure that lefts and rights of descendents
+-     correspond properly to bit masks.  We use the rightmost descendent
++     right), to make sure that lefts and rights of descendants
++     correspond properly to bit masks.  We use the rightmost descendant
+      of x.  We could use any other leaf, but this is easy to locate and
+      tends to counteract removal of leftmosts elsewhere, and so keeps
+      paths shorter than minimally guaranteed.  This doesn't loop much
+      because on average a node in a tree is near the bottom.
+   3. If x is the base of a chain (i.e., has parent links) relink
+      x's parent and children to x's replacement (or null if none).
+ */
+ 
+@@ -3380,17 +3383,17 @@ static void add_segment(mstate m, char* 
+   init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
+ 
+   /* Set up segment record */
+   assert(is_aligned(ss));
+   set_size_and_pinuse_of_inuse_chunk(m, sp, ssize);
+   *ss = m->seg; /* Push current record */
+   m->seg.base = tbase;
+   m->seg.size = tsize;
+-  set_segment_flags(&m->seg, mmapped);
++  (void)set_segment_flags(&m->seg, mmapped);
+   m->seg.next = ss;
+ 
+   /* Insert trailing fenceposts */
+   for (;;) {
+     mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE);
+     p->head = FENCEPOST_HEAD;
+     ++nfences;
+     if ((char*)(&(nextp->head)) < old_end)
+@@ -3540,17 +3543,17 @@ static void* sys_alloc(mstate m, size_t 
+   if (tbase != CMFAIL) {
+ 
+     if ((m->footprint += tsize) > m->max_footprint)
+       m->max_footprint = m->footprint;
+ 
+     if (!is_initialized(m)) { /* first-time initialization */
+       m->seg.base = m->least_addr = tbase;
+       m->seg.size = tsize;
+-      set_segment_flags(&m->seg, mmap_flag);
++      (void)set_segment_flags(&m->seg, mmap_flag);
+       m->magic = mparams.magic;
+       init_bins(m);
+       if (is_global(m)) 
+         init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
+       else {
+         /* Offset top by embedded malloc_state */
+         mchunkptr mn = next_chunk(mem2chunk(m));
+         init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE);
+@@ -5083,20 +5086,20 @@ History:
+       * Add linux mremap support code from HJ Liu
+ 
+     V2.6.2 Tue Dec  5 06:52:55 1995  Doug Lea  (dl at gee)
+       * Integrated most documentation with the code.
+       * Add support for mmap, with help from
+         Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
+       * Use last_remainder in more cases.
+       * Pack bins using idea from  colin@nyx10.cs.du.edu
+-      * Use ordered bins instead of best-fit threshhold
++      * Use ordered bins instead of best-fit threshold
+       * Eliminate block-local decls to simplify tracing and debugging.
+       * Support another case of realloc via move into top
+-      * Fix error occuring when initial sbrk_base not word-aligned.
++      * Fix error occurring when initial sbrk_base not word-aligned.
+       * Rely on page size for units instead of SBRK_UNIT to
+         avoid surprises about sbrk alignment conventions.
+       * Add mallinfo, mallopt. Thanks to Raymond Nijssen
+         (raymond@es.ele.tue.nl) for the suggestion.
+       * Add `pad' argument to malloc_trim and top_pad mallopt parameter.
+       * More precautions for cases where other routines call sbrk,
+         courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
+       * Added macros etc., allowing use in linux libc from
+diff --git a/js/src/ctypes/libffi/src/frv/ffitarget.h b/js/src/ctypes/libffi/src/frv/ffitarget.h
+--- a/js/src/ctypes/libffi/src/frv/ffitarget.h
++++ b/js/src/ctypes/libffi/src/frv/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2004  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2004  Red Hat, Inc.
+    Target configuration macros for FR-V
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+diff --git a/js/src/ctypes/libffi/src/ia64/ffi.c b/js/src/ctypes/libffi/src/ia64/ffi.c
+--- a/js/src/ctypes/libffi/src/ia64/ffi.c
++++ b/js/src/ctypes/libffi/src/ia64/ffi.c
+@@ -1,11 +1,12 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 1998, 2007, 2008 Red Hat, Inc.
++   ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc.
+ 	   Copyright (c) 2000 Hewlett Packard Company
++	   Copyright (c) 2011 Anthony Green
+    
+    IA64 Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -319,23 +320,27 @@ ffi_call(ffi_cif *cif, void (*fn)(void),
+ 
+ 	case FFI_TYPE_POINTER:
+ 	  stack->gp_regs[gpcount++] = (UINT64)(PTR64) *(void **)avalue[i];
+ 	  break;
+ 
+ 	case FFI_TYPE_FLOAT:
+ 	  if (gpcount < 8 && fpcount < 8)
+ 	    stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
+-	  stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i];
++	  {
++	    UINT32 tmp;
++	    memcpy (&tmp, avalue[i], sizeof (UINT32));
++	    stack->gp_regs[gpcount++] = tmp;
++	  }
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+ 	  if (gpcount < 8 && fpcount < 8)
+ 	    stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
+-	  stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i];
++	  memcpy (&stack->gp_regs[gpcount++], avalue[i], sizeof (UINT64));
+ 	  break;
+ 
+ 	case FFI_TYPE_LONGDOUBLE:
+ 	  if (gpcount & 1)
+ 	    gpcount++;
+ 	  if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8)
+ 	    stf_spill (&stack->fp_regs[fpcount++], *(__float80 *)avalue[i]);
+ 	  memcpy (&stack->gp_regs[gpcount], avalue[i], 16);
+@@ -391,17 +396,17 @@ ffi_call(ffi_cif *cif, void (*fn)(void),
+    interpreted procedure, into a closure.
+ 
+    For IA64, function pointer are already pairs consisting of a code
+    pointer, and a gp pointer.  The latter is needed to access global
+    variables.  Here we set up such a pair as the first two words of
+    the closure (in the "trampoline" area), but we replace the gp
+    pointer with a pointer to the closure itself.  We also add the real
+    gp pointer to the closure.  This allows the function entry code to
+-   both retrieve the user data, and to restire the correct gp pointer.  */
++   both retrieve the user data, and to restore the correct gp pointer.  */
+ 
+ extern void ffi_closure_unix ();
+ 
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*,void*,void**,void*),
+ 		      void *user_data,
+@@ -420,17 +425,18 @@ ffi_prep_closure_loc (ffi_closure* closu
+     UINT64 code_pointer;	/* Pointer to ffi_closure_unix.  */
+     UINT64 fake_gp;		/* Pointer to closure, installed as gp.  */
+     UINT64 real_gp;		/* Real gp value.  */
+   };
+ 
+   struct ffi_ia64_trampoline_struct *tramp;
+   struct ia64_fd *fd;
+ 
+-  FFI_ASSERT (cif->abi == FFI_UNIX);
++  if (cif->abi != FFI_UNIX)
++    return FFI_BAD_ABI;
+ 
+   tramp = (struct ffi_ia64_trampoline_struct *)closure->tramp;
+   fd = (struct ia64_fd *)(void *)ffi_closure_unix;
+ 
+   tramp->code_pointer = fd->code_pointer;
+   tramp->real_gp = fd->gp;
+   tramp->fake_gp = (UINT64)(PTR64)codeloc;
+   closure->cif = cif;
+diff --git a/js/src/ctypes/libffi/src/ia64/ffitarget.h b/js/src/ctypes/libffi/src/ia64/ffitarget.h
+--- a/js/src/ctypes/libffi/src/ia64/ffitarget.h
++++ b/js/src/ctypes/libffi/src/ia64/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for IA-64.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifndef LIBFFI_ASM
+ typedef unsigned long long          ffi_arg;
+ typedef signed long long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_UNIX,   	/* Linux and all Unix variants use the same conventions	*/
+   FFI_LAST_ABI,
+diff --git a/js/src/ctypes/libffi/src/java_raw_api.c b/js/src/ctypes/libffi/src/java_raw_api.c
+--- a/js/src/ctypes/libffi/src/java_raw_api.c
++++ b/js/src/ctypes/libffi/src/java_raw_api.c
+@@ -306,17 +306,17 @@ void ffi_java_raw_call (ffi_cif *cif, vo
+ static void
+ ffi_java_translate_args (ffi_cif *cif, void *rvalue,
+ 		    void **avalue, void *user_data)
+ {
+   ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif));
+   ffi_raw_closure *cl = (ffi_raw_closure*)user_data;
+ 
+   ffi_java_ptrarray_to_raw (cif, avalue, raw);
+-  (*cl->fun) (cif, rvalue, raw, cl->user_data);
++  (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data);
+   ffi_java_raw_to_rvalue (cif, rvalue);
+ }
+ 
+ ffi_status
+ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl,
+ 			       ffi_cif *cif,
+ 			       void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
+ 			       void *user_data,
+diff --git a/js/src/ctypes/libffi/src/m32r/ffitarget.h b/js/src/ctypes/libffi/src/m32r/ffitarget.h
+--- a/js/src/ctypes/libffi/src/m32r/ffitarget.h
++++ b/js/src/ctypes/libffi/src/m32r/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 2004  Renesas Technology.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 2004  Renesas Technology.
+    Target configuration macros for M32R.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -21,16 +22,20 @@
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- Generic type definitions ----------------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi
+   {
+diff --git a/js/src/ctypes/libffi/src/m68k/ffi.c b/js/src/ctypes/libffi/src/m68k/ffi.c
+--- a/js/src/ctypes/libffi/src/m68k/ffi.c
++++ b/js/src/ctypes/libffi/src/m68k/ffi.c
+@@ -1,21 +1,30 @@
+ /* -----------------------------------------------------------------------
+    ffi.c
+-   
+-   m68k Foreign Function Interface 
++
++   m68k Foreign Function Interface
+    ----------------------------------------------------------------------- */
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+ #include <stdlib.h>
+ #include <unistd.h>
++#ifdef __rtems__
++void rtems_cache_flush_multiple_data_lines( const void *, size_t );
++#else
+ #include <sys/syscall.h>
++#ifdef __MINT__
++#include <mint/mintbind.h>
++#include <mint/ssystem.h>
++#else
+ #include <asm/cachectl.h>
++#endif
++#endif
+ 
+ void ffi_call_SYSV (extended_cif *,
+ 		    unsigned, unsigned,
+ 		    void *, void (*fn) ());
+ void *ffi_prep_args (void *stack, extended_cif *ecif);
+ void ffi_closure_SYSV (ffi_closure *);
+ void ffi_closure_struct_SYSV (ffi_closure *);
+ unsigned int ffi_closure_SYSV_inner (ffi_closure *closure,
+@@ -30,34 +39,38 @@ ffi_prep_args (void *stack, extended_cif
+   unsigned int i;
+   void **p_argv;
+   char *argp;
+   ffi_type **p_arg;
+   void *struct_value_ptr;
+ 
+   argp = stack;
+ 
+-  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
+-      && !ecif->cif->flags)
++  if (
++#ifdef __MINT__
++      (ecif->cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
++#endif
++      (((ecif->cif->rtype->type == FFI_TYPE_STRUCT)
++        && !ecif->cif->flags)))
+     struct_value_ptr = ecif->rvalue;
+   else
+     struct_value_ptr = NULL;
+ 
+   p_argv = ecif->avalue;
+ 
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        i != 0;
+        i--, p_arg++)
+     {
+-      size_t z;
++      size_t z = (*p_arg)->size;
++      int type = (*p_arg)->type;
+ 
+-      z = (*p_arg)->size;
+       if (z < sizeof (int))
+ 	{
+-	  switch ((*p_arg)->type)
++	  switch (type)
+ 	    {
+ 	    case FFI_TYPE_SINT8:
+ 	      *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
+ 	      break;
+ 
+ 	    case FFI_TYPE_UINT8:
+ 	      *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv;
+ 	      break;
+@@ -66,17 +79,24 @@ ffi_prep_args (void *stack, extended_cif
+ 	      *(signed int *) argp = (signed int) *(SINT16 *) *p_argv;
+ 	      break;
+ 
+ 	    case FFI_TYPE_UINT16:
+ 	      *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv;
+ 	      break;
+ 
+ 	    case FFI_TYPE_STRUCT:
++#ifdef __MINT__
++	      if (z == 1 || z == 2)
++		memcpy (argp + 2, *p_argv, z);
++              else
++		memcpy (argp, *p_argv, z);
++#else
+ 	      memcpy (argp + sizeof (int) - z, *p_argv, z);
++#endif
+ 	      break;
+ 
+ 	    default:
+ 	      FFI_ASSERT (0);
+ 	    }
+ 	  z = sizeof (int);
+ 	}
+       else
+@@ -98,40 +118,59 @@ ffi_prep_args (void *stack, extended_cif
+ #define CIF_FLAGS_INT		1
+ #define CIF_FLAGS_DINT		2
+ #define CIF_FLAGS_FLOAT		4
+ #define CIF_FLAGS_DOUBLE	8
+ #define CIF_FLAGS_LDOUBLE	16
+ #define CIF_FLAGS_POINTER	32
+ #define CIF_FLAGS_STRUCT1	64
+ #define CIF_FLAGS_STRUCT2	128
++#define CIF_FLAGS_SINT8		256
++#define CIF_FLAGS_SINT16	512
+ 
+ /* Perform machine dependent cif processing */
+ ffi_status
+ ffi_prep_cif_machdep (ffi_cif *cif)
+ {
+   /* Set the return type flag */
+   switch (cif->rtype->type)
+     {
+     case FFI_TYPE_VOID:
+       cif->flags = 0;
+       break;
+ 
+     case FFI_TYPE_STRUCT:
++      if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT &&
++          cif->rtype->elements[1])
++        {
++          cif->flags = 0;
++          break;
++        }
++
+       switch (cif->rtype->size)
+ 	{
+ 	case 1:
++#ifdef __MINT__
++	  cif->flags = CIF_FLAGS_STRUCT2;
++#else
+ 	  cif->flags = CIF_FLAGS_STRUCT1;
++#endif
+ 	  break;
+ 	case 2:
+ 	  cif->flags = CIF_FLAGS_STRUCT2;
+ 	  break;
++#ifdef __MINT__
++	case 3:
++#endif
+ 	case 4:
+ 	  cif->flags = CIF_FLAGS_INT;
+ 	  break;
++#ifdef __MINT__
++	case 7:
++#endif
+ 	case 8:
+ 	  cif->flags = CIF_FLAGS_DINT;
+ 	  break;
+ 	default:
+ 	  cif->flags = 0;
+ 	  break;
+ 	}
+       break;
+@@ -139,29 +178,43 @@ ffi_prep_cif_machdep (ffi_cif *cif)
+     case FFI_TYPE_FLOAT:
+       cif->flags = CIF_FLAGS_FLOAT;
+       break;
+ 
+     case FFI_TYPE_DOUBLE:
+       cif->flags = CIF_FLAGS_DOUBLE;
+       break;
+ 
++#if (FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE)
+     case FFI_TYPE_LONGDOUBLE:
++#ifdef __MINT__
++      cif->flags = 0;
++#else
+       cif->flags = CIF_FLAGS_LDOUBLE;
++#endif
+       break;
++#endif
+ 
+     case FFI_TYPE_POINTER:
+       cif->flags = CIF_FLAGS_POINTER;
+       break;
+ 
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_UINT64:
+       cif->flags = CIF_FLAGS_DINT;
+       break;
+ 
++    case FFI_TYPE_SINT16:
++      cif->flags = CIF_FLAGS_SINT16;
++      break;
++
++    case FFI_TYPE_SINT8:
++      cif->flags = CIF_FLAGS_SINT8;
++      break;
++
+     default:
+       cif->flags = CIF_FLAGS_INT;
+       break;
+     }
+ 
+   return FFI_OK;
+ }
+ 
+@@ -207,16 +260,36 @@ ffi_prep_incoming_args_SYSV (char *stack
+   argp = stack;
+   p_argv = avalue;
+ 
+   for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++)
+     {
+       size_t z;
+ 
+       z = (*p_arg)->size;
++#ifdef __MINT__
++      if (cif->flags &&
++          cif->rtype->type == FFI_TYPE_STRUCT &&
++          (z == 1 || z == 2))
++ 	{
++	  *p_argv = (void *) (argp + 2);
++
++	  z = 4;
++	}
++      else
++      if (cif->flags &&
++          cif->rtype->type == FFI_TYPE_STRUCT &&
++          (z == 3 || z == 4))
++ 	{
++	  *p_argv = (void *) (argp);
++
++	  z = 4;
++	}
++      else
++#endif
+       if (z <= 4)
+ 	{
+ 	  *p_argv = (void *) (argp + 4 - z);
+ 
+ 	  z = 4;
+ 	}
+       else
+ 	{
+@@ -250,29 +323,40 @@ ffi_closure_SYSV_inner (ffi_closure *clo
+ 
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*,void*,void**,void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+-  FFI_ASSERT (cif->abi == FFI_SYSV);
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
+ 
+   *(unsigned short *)closure->tramp = 0x207c;
+   *(void **)(closure->tramp + 2) = codeloc;
+   *(unsigned short *)(closure->tramp + 6) = 0x4ef9;
+-  if (cif->rtype->type == FFI_TYPE_STRUCT
+-      && !cif->flags)
++
++  if (
++#ifdef __MINT__
++      (cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
++#endif
++      (((cif->rtype->type == FFI_TYPE_STRUCT)
++         && !cif->flags)))
+     *(void **)(closure->tramp + 8) = ffi_closure_struct_SYSV;
+   else
+     *(void **)(closure->tramp + 8) = ffi_closure_SYSV;
+ 
++#ifdef __rtems__
++  rtems_cache_flush_multiple_data_lines( codeloc, FFI_TRAMPOLINE_SIZE );
++#elif defined(__MINT__)
++  Ssystem(S_FLUSHCACHE, codeloc, FFI_TRAMPOLINE_SIZE);
++#else
+   syscall(SYS_cacheflush, codeloc, FLUSH_SCOPE_LINE,
+ 	  FLUSH_CACHE_BOTH, FFI_TRAMPOLINE_SIZE);
++#endif
+ 
+   closure->cif  = cif;
+   closure->user_data = user_data;
+   closure->fun  = fun;
+ 
+   return FFI_OK;
+ }
+-
+diff --git a/js/src/ctypes/libffi/src/m68k/ffitarget.h b/js/src/ctypes/libffi/src/m68k/ffitarget.h
+--- a/js/src/ctypes/libffi/src/m68k/ffitarget.h
++++ b/js/src/ctypes/libffi/src/m68k/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for Motorola 68K.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_SYSV,
+   FFI_LAST_ABI,
+diff --git a/js/src/ctypes/libffi/src/m68k/sysv.S b/js/src/ctypes/libffi/src/m68k/sysv.S
+--- a/js/src/ctypes/libffi/src/m68k/sysv.S
++++ b/js/src/ctypes/libffi/src/m68k/sysv.S
+@@ -1,13 +1,16 @@
+ /* -----------------------------------------------------------------------
+-   sysv.S - Copyright (c) 1998 Andreas Schwab
+-	    Copyright (c) 2008 Red Hat, Inc. 
+-   
+-   m68k Foreign Function Interface 
++	
++   sysv.S - Copyright (c) 2012 Alan Hourihane
++	    Copyright (c) 1998, 2012 Andreas Schwab
++	    Copyright (c) 2008 Red Hat, Inc.
++	    Copyright (c) 2012 Thorsten Glaser
++
++   m68k Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+@@ -36,61 +39,76 @@
+ #define CFI_ENDPROC()		.cfi_endproc
+ #else
+ #define CFI_STARTPROC()
+ #define CFI_OFFSET(reg,off)
+ #define CFI_DEF_CFA(reg,off)
+ #define CFI_ENDPROC()
+ #endif
+ 
++#ifdef __MINT__
++#define CALLFUNC(funcname) _ ## funcname
++#else
++#define CALLFUNC(funcname) funcname
++#endif
++
+ 	.text
+ 
+-	.globl	ffi_call_SYSV
+-	.type	ffi_call_SYSV,@function
++	.globl	CALLFUNC(ffi_call_SYSV)
++	.type	CALLFUNC(ffi_call_SYSV),@function
+ 	.align	4
+ 
+-ffi_call_SYSV:
++CALLFUNC(ffi_call_SYSV):
+ 	CFI_STARTPROC()
+ 	link	%fp,#0
+ 	CFI_OFFSET(14,-8)
+ 	CFI_DEF_CFA(14,8)
+ 	move.l	%d2,-(%sp)
+ 	CFI_OFFSET(2,-12)
+ 
+ 	| Make room for all of the new args.
+ 	sub.l	12(%fp),%sp
+ 
+ 	| Call ffi_prep_args
+ 	move.l	8(%fp),-(%sp)
+ 	pea	4(%sp)
+ #if !defined __PIC__
+-	jsr	ffi_prep_args
++	jsr	CALLFUNC(ffi_prep_args)
+ #else
+-	bsr.l	ffi_prep_args@PLTPC
++	bsr.l	CALLFUNC(ffi_prep_args@PLTPC)
+ #endif
+ 	addq.l	#8,%sp	
+ 
+ 	| Pass pointer to struct value, if any
++#ifdef __MINT__
++	move.l	%d0,%a1
++#else
+ 	move.l	%a0,%a1
++#endif
+ 
+ 	| Call the function
+ 	move.l	24(%fp),%a0
+ 	jsr	(%a0)
+ 
+ 	| Remove the space we pushed for the args
+ 	add.l	12(%fp),%sp
+ 
+ 	| Load the pointer to storage for the return value
+ 	move.l	20(%fp),%a1
+ 
+ 	| Load the return type code 
+ 	move.l	16(%fp),%d2
+ 
+ 	| If the return value pointer is NULL, assume no return value.
++	| NOTE: On the mc68000, tst on an address register is not supported.
++#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
++	cmp.w	#0, %a1
++#else
+ 	tst.l	%a1
++#endif
+ 	jbeq	noretval
+ 
+ 	btst	#0,%d2
+ 	jbeq	retlongint
+ 	move.l	%d0,(%a1)
+ 	jbra	epilogue
+ 
+ retlongint:
+@@ -98,137 +116,215 @@ retlongint:
+ 	jbeq	retfloat
+ 	move.l	%d0,(%a1)
+ 	move.l	%d1,4(%a1)
+ 	jbra	epilogue
+ 
+ retfloat:
+ 	btst	#2,%d2
+ 	jbeq	retdouble
++#if defined(__MC68881__) || defined(__HAVE_68881__)
+ 	fmove.s	%fp0,(%a1)
++#else
++	move.l	%d0,(%a1)
++#endif
+ 	jbra	epilogue
+ 
+ retdouble:
+ 	btst	#3,%d2
+ 	jbeq	retlongdouble
++#if defined(__MC68881__) || defined(__HAVE_68881__)
+ 	fmove.d	%fp0,(%a1)
++#else
++	move.l	%d0,(%a1)+
++	move.l	%d1,(%a1)
++#endif
+ 	jbra	epilogue
+ 
+ retlongdouble:
+ 	btst	#4,%d2
+ 	jbeq	retpointer
++#if defined(__MC68881__) || defined(__HAVE_68881__)
+ 	fmove.x	%fp0,(%a1)
++#else
++	move.l	%d0,(%a1)+
++	move.l	%d1,(%a1)+
++	move.l	%d2,(%a1)
++#endif
+ 	jbra	epilogue
+ 
+ retpointer:
+ 	btst	#5,%d2
+ 	jbeq	retstruct1
++#ifdef __MINT__
++	move.l	%d0,(%a1)
++#else
+ 	move.l	%a0,(%a1)
++#endif
+ 	jbra	epilogue
+ 
+ retstruct1:
+ 	btst	#6,%d2
+ 	jbeq	retstruct2
+ 	move.b	%d0,(%a1)
+ 	jbra	epilogue
+ 
+ retstruct2:
+ 	btst	#7,%d2
++	jbeq	retsint8
++	move.w	%d0,(%a1)
++	jbra	epilogue
++
++retsint8:
++	btst	#8,%d2
++	jbeq	retsint16
++	| NOTE: On the mc68000, extb is not supported. 8->16, then 16->32.
++#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
++	ext.w	%d0
++	ext.l	%d0
++#else
++	extb.l	%d0
++#endif
++	move.l	%d0,(%a1)
++	jbra	epilogue
++
++retsint16:
++	btst	#9,%d2
+ 	jbeq	noretval
+-	move.w	%d0,(%a1)
++	ext.l	%d0
++	move.l	%d0,(%a1)
+ 
+ noretval:
+ epilogue:
+ 	move.l	(%sp)+,%d2
+ 	unlk	%fp
+ 	rts
+ 	CFI_ENDPROC()
+-	.size	ffi_call_SYSV,.-ffi_call_SYSV
++	.size	CALLFUNC(ffi_call_SYSV),.-CALLFUNC(ffi_call_SYSV)
+ 
+-	.globl	ffi_closure_SYSV
+-	.type	ffi_closure_SYSV, @function
++	.globl	CALLFUNC(ffi_closure_SYSV)
++	.type	CALLFUNC(ffi_closure_SYSV), @function
+ 	.align	4
+ 
+-ffi_closure_SYSV:
++CALLFUNC(ffi_closure_SYSV):
+ 	CFI_STARTPROC()
+ 	link	%fp,#-12
+ 	CFI_OFFSET(14,-8)
+ 	CFI_DEF_CFA(14,8)
+ 	move.l	%sp,-12(%fp)
+ 	pea	8(%fp)
+ 	pea	-12(%fp)
+ 	move.l	%a0,-(%sp)
+ #if !defined __PIC__
+-	jsr	ffi_closure_SYSV_inner
++	jsr	CALLFUNC(ffi_closure_SYSV_inner)
+ #else
+-	bsr.l	ffi_closure_SYSV_inner@PLTPC
++	bsr.l	CALLFUNC(ffi_closure_SYSV_inner@PLTPC)
+ #endif
+ 
+ 	lsr.l	#1,%d0
+ 	jne	1f
+ 	jcc	.Lcls_epilogue
++	| CIF_FLAGS_INT
+ 	move.l	-12(%fp),%d0
+ .Lcls_epilogue:
++	| no CIF_FLAGS_*
+ 	unlk	%fp
+ 	rts
+ 1:
+ 	lea	-12(%fp),%a0
+ 	lsr.l	#2,%d0
+ 	jne	1f
+ 	jcs	.Lcls_ret_float
++	| CIF_FLAGS_DINT
+ 	move.l	(%a0)+,%d0
+ 	move.l	(%a0),%d1
+ 	jra	.Lcls_epilogue
+ .Lcls_ret_float:
++#if defined(__MC68881__) || defined(__HAVE_68881__)
+ 	fmove.s	(%a0),%fp0
++#else
++	move.l	(%a0),%d0
++#endif
+ 	jra	.Lcls_epilogue
+ 1:
+ 	lsr.l	#2,%d0
+ 	jne	1f
+ 	jcs	.Lcls_ret_ldouble
++	| CIF_FLAGS_DOUBLE
++#if defined(__MC68881__) || defined(__HAVE_68881__)
+ 	fmove.d	(%a0),%fp0
++#else
++	move.l	(%a0)+,%d0
++	move.l	(%a0),%d1
++#endif
+ 	jra	.Lcls_epilogue
+ .Lcls_ret_ldouble:
++#if defined(__MC68881__) || defined(__HAVE_68881__)
+ 	fmove.x	(%a0),%fp0
++#else
++	move.l	(%a0)+,%d0
++	move.l	(%a0)+,%d1
++	move.l	(%a0),%d2
++#endif
+ 	jra	.Lcls_epilogue
+ 1:
+ 	lsr.l	#2,%d0
+-	jne	.Lcls_ret_struct2
++	jne	1f
+ 	jcs	.Lcls_ret_struct1
++	| CIF_FLAGS_POINTER
+ 	move.l	(%a0),%a0
+ 	move.l	%a0,%d0
+ 	jra	.Lcls_epilogue
+ .Lcls_ret_struct1:
+ 	move.b	(%a0),%d0
+ 	jra	.Lcls_epilogue
+-.Lcls_ret_struct2:
++1:
++	lsr.l	#2,%d0
++	jne	1f
++	jcs	.Lcls_ret_sint8
++	| CIF_FLAGS_STRUCT2
+ 	move.w	(%a0),%d0
+ 	jra	.Lcls_epilogue
++.Lcls_ret_sint8:
++	move.l	(%a0),%d0
++	| NOTE: On the mc68000, extb is not supported. 8->16, then 16->32.
++#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
++	ext.w	%d0
++	ext.l	%d0
++#else
++	extb.l	%d0
++#endif
++	jra	.Lcls_epilogue
++1:
++	| CIF_FLAGS_SINT16
++	move.l	(%a0),%d0
++	ext.l	%d0
++	jra	.Lcls_epilogue
+ 	CFI_ENDPROC()
+ 
+-	.size	ffi_closure_SYSV,.-ffi_closure_SYSV
++	.size	CALLFUNC(ffi_closure_SYSV),.-CALLFUNC(ffi_closure_SYSV)
+ 
+-	.globl	ffi_closure_struct_SYSV
+-	.type	ffi_closure_struct_SYSV, @function
++	.globl	CALLFUNC(ffi_closure_struct_SYSV)
++	.type	CALLFUNC(ffi_closure_struct_SYSV), @function
+ 	.align	4
+ 
+-ffi_closure_struct_SYSV:
++CALLFUNC(ffi_closure_struct_SYSV):
+ 	CFI_STARTPROC()
+ 	link	%fp,#0
+ 	CFI_OFFSET(14,-8)
+ 	CFI_DEF_CFA(14,8)
+ 	move.l	%sp,-12(%fp)
+ 	pea	8(%fp)
+ 	move.l	%a1,-(%sp)
+ 	move.l	%a0,-(%sp)
+ #if !defined __PIC__
+-	jsr	ffi_closure_SYSV_inner
++	jsr	CALLFUNC(ffi_closure_SYSV_inner)
+ #else
+-	bsr.l	ffi_closure_SYSV_inner@PLTPC
++	bsr.l	CALLFUNC(ffi_closure_SYSV_inner@PLTPC)
+ #endif
+ 	unlk	%fp
+ 	rts
+ 	CFI_ENDPROC()
+-	.size	ffi_closure_struct_SYSV,.-ffi_closure_struct_SYSV
++	.size	CALLFUNC(ffi_closure_struct_SYSV),.-CALLFUNC(ffi_closure_struct_SYSV)
+ 
+ #if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",@progbits
+ #endif
+diff --git a/js/src/ctypes/libffi/src/m88k/ffi.c b/js/src/ctypes/libffi/src/m88k/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/m88k/ffi.c
+@@ -0,0 +1,400 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat.  <miod@openbsd.org>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ * 
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ * 
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * m88k Foreign Function Interface
++ *
++ * This file attempts to provide all the FFI entry points which can reliably
++ * be implemented in C.
++ *
++ * Only OpenBSD/m88k is currently supported; other platforms (such as
++ * Motorola's SysV/m88k) could be supported with the following tweaks:
++ *
++ * - non-OpenBSD systems use an `outgoing parameter area' as part of the
++ *   88BCS calling convention, which is not supported under OpenBSD from
++ *   release 3.6 onwards.  Supporting it should be as easy as taking it
++ *   into account when adjusting the stack, in the assembly code.
++ *
++ * - the logic deciding whether a function argument gets passed through
++ *   registers, or on the stack, has changed several times in OpenBSD in
++ *   edge cases (especially for structs larger than 32 bytes being passed
++ *   by value). The code below attemps to match the logic used by the
++ *   system compiler of OpenBSD 5.3, i.e. gcc 3.3.6 with many m88k backend
++ *   fixes.
++ */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++#include <unistd.h>
++
++void ffi_call_OBSD (unsigned int, extended_cif *, unsigned int, void *,
++		    void (*fn) ());
++void *ffi_prep_args (void *, extended_cif *);
++void ffi_closure_OBSD (ffi_closure *);
++void ffi_closure_struct_OBSD (ffi_closure *);
++unsigned int ffi_closure_OBSD_inner (ffi_closure *, void *, unsigned int *,
++				     char *);
++void ffi_cacheflush_OBSD (unsigned int, unsigned int);
++
++#define CIF_FLAGS_INT		(1 << 0)
++#define CIF_FLAGS_DINT		(1 << 1)
++
++/*
++ * Foreign Function Interface API
++ */
++
++/* ffi_prep_args is called by the assembly routine once stack space has
++   been allocated for the function's arguments.  */
++
++void *
++ffi_prep_args (void *stack, extended_cif *ecif)
++{
++  unsigned int i;
++  void **p_argv;
++  char *argp, *stackp;
++  unsigned int *regp;
++  unsigned int regused;
++  ffi_type **p_arg;
++  void *struct_value_ptr;
++
++  regp = (unsigned int *)stack;
++  stackp = (char *)(regp + 8);
++  regused = 0;
++
++  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
++      && !ecif->cif->flags)
++    struct_value_ptr = ecif->rvalue;
++  else
++    struct_value_ptr = NULL;
++
++  p_argv = ecif->avalue;
++
++  for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i != 0; i--, p_arg++)
++    {
++      size_t z;
++      unsigned short t, a;
++
++      z = (*p_arg)->size;
++      t = (*p_arg)->type;
++      a = (*p_arg)->alignment;
++
++      /*
++       * Figure out whether the argument can be passed through registers
++       * or on the stack.
++       * The rule is that registers can only receive simple types not larger
++       * than 64 bits, or structs the exact size of a register and aligned to
++       * the size of a register.
++       */
++      if (t == FFI_TYPE_STRUCT)
++	{
++	  if (z == sizeof (int) && a == sizeof (int) && regused < 8)
++	    argp = (char *)regp;
++	  else
++	    argp = stackp;
++	}
++      else
++	{
++	  if (z > sizeof (int) && regused < 8 - 1)
++	    {
++	      /* align to an even register pair */
++	      if (regused & 1)
++		{
++		  regp++;
++		  regused++;
++		}
++	    }
++	  if (regused < 8)
++	    argp = (char *)regp;
++	  else
++	    argp = stackp;
++	}
++
++      /* Enforce proper stack alignment of 64-bit types */
++      if (argp == stackp && a > sizeof (int))
++	{
++	  stackp = (char *) ALIGN(stackp, a);
++	  argp = stackp;
++	}
++
++      switch (t)
++	{
++	case FFI_TYPE_SINT8:
++	  *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
++	  break;
++
++	case FFI_TYPE_UINT8:
++	  *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv;
++	  break;
++
++	case FFI_TYPE_SINT16:
++	  *(signed int *) argp = (signed int) *(SINT16 *) *p_argv;
++	  break;
++
++	case FFI_TYPE_UINT16:
++	  *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv;
++	  break;
++
++	case FFI_TYPE_INT:
++	case FFI_TYPE_FLOAT:
++	case FFI_TYPE_UINT32:
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_POINTER:
++	  *(unsigned int *) argp = *(unsigned int *) *p_argv;
++	  break;
++
++	case FFI_TYPE_DOUBLE:
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	case FFI_TYPE_STRUCT:
++	  memcpy (argp, *p_argv, z);
++	  break;
++
++	default:
++	  FFI_ASSERT (0);
++	}
++
++      /* Align if necessary.  */
++      if ((sizeof (int) - 1) & z)
++	z = ALIGN(z, sizeof (int));
++
++      p_argv++;
++
++      /* Be careful, once all registers are filled, and about to continue
++         on stack, regp == stackp.  Therefore the check for regused as well. */
++      if (argp == (char *)regp && regused < 8)
++	{
++	  regp += z / sizeof (int);
++	  regused += z / sizeof (int);
++	}
++      else
++	stackp += z;
++    }
++
++  return struct_value_ptr;
++}
++
++/* Perform machine dependent cif processing */
++ffi_status
++ffi_prep_cif_machdep (ffi_cif *cif)
++{
++  /* Set the return type flag */
++  switch (cif->rtype->type)
++    {
++    case FFI_TYPE_VOID:
++      cif->flags = 0;
++      break;
++
++    case FFI_TYPE_STRUCT:
++      if (cif->rtype->size == sizeof (int) &&
++	  cif->rtype->alignment == sizeof (int))
++	cif->flags = CIF_FLAGS_INT;
++      else
++	cif->flags = 0;
++      break;
++
++    case FFI_TYPE_DOUBLE:
++    case FFI_TYPE_SINT64:
++    case FFI_TYPE_UINT64:
++      cif->flags = CIF_FLAGS_DINT;
++      break;
++
++    default:
++      cif->flags = CIF_FLAGS_INT;
++      break;
++    }
++
++  return FFI_OK;
++}
++
++void
++ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue)
++{
++  extended_cif ecif;
++
++  ecif.cif = cif;
++  ecif.avalue = avalue;
++
++  /* If the return value is a struct and we don't have a return value
++     address then we need to make one.  */
++
++  if (rvalue == NULL
++      && cif->rtype->type == FFI_TYPE_STRUCT
++      && (cif->rtype->size != sizeof (int)
++	  || cif->rtype->alignment != sizeof (int)))
++    ecif.rvalue = alloca (cif->rtype->size);
++  else
++    ecif.rvalue = rvalue;
++
++  switch (cif->abi)
++    {
++    case FFI_OBSD:
++      ffi_call_OBSD (cif->bytes, &ecif, cif->flags, ecif.rvalue, fn);
++      break;
++
++    default:
++      FFI_ASSERT (0);
++      break;
++    }
++}
++
++/*
++ * Closure API
++ */
++
++static void
++ffi_prep_closure_args_OBSD (ffi_cif *cif, void **avalue, unsigned int *regp,
++			    char *stackp)
++{
++  unsigned int i;
++  void **p_argv;
++  char *argp;
++  unsigned int regused;
++  ffi_type **p_arg;
++
++  regused = 0;
++
++  p_argv = avalue;
++
++  for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
++    {
++      size_t z;
++      unsigned short t, a;
++
++      z = (*p_arg)->size;
++      t = (*p_arg)->type;
++      a = (*p_arg)->alignment;
++
++      /*
++       * Figure out whether the argument has been passed through registers
++       * or on the stack.
++       * The rule is that registers can only receive simple types not larger
++       * than 64 bits, or structs the exact size of a register and aligned to
++       * the size of a register.
++       */
++      if (t == FFI_TYPE_STRUCT)
++	{
++	  if (z == sizeof (int) && a == sizeof (int) && regused < 8)
++	    argp = (char *)regp;
++	  else
++	    argp = stackp;
++	}
++      else
++	{
++	  if (z > sizeof (int) && regused < 8 - 1)
++	    {
++	      /* align to an even register pair */
++	      if (regused & 1)
++		{
++		  regp++;
++		  regused++;
++		}
++	    }
++	  if (regused < 8)
++	    argp = (char *)regp;
++	  else
++	    argp = stackp;
++	}
++
++      /* Enforce proper stack alignment of 64-bit types */
++      if (argp == stackp && a > sizeof (int))
++	{
++	  stackp = (char *) ALIGN(stackp, a);
++	  argp = stackp;
++	}
++
++      if (z < sizeof (int) && t != FFI_TYPE_STRUCT)
++	*p_argv = (void *) (argp + sizeof (int) - z);
++      else
++	*p_argv = (void *) argp;
++
++      /* Align if necessary */
++      if ((sizeof (int) - 1) & z)
++	z = ALIGN(z, sizeof (int));
++
++      p_argv++;
++
++      /* Be careful, once all registers are exhausted, and about to fetch from
++	 stack, regp == stackp.  Therefore the check for regused as well. */
++      if (argp == (char *)regp && regused < 8)
++	{
++	  regp += z / sizeof (int);
++	  regused += z / sizeof (int);
++	}
++      else
++	stackp += z;
++    }
++}
++
++unsigned int
++ffi_closure_OBSD_inner (ffi_closure *closure, void *resp, unsigned int *regp,
++			char *stackp)
++{
++  ffi_cif *cif;
++  void **arg_area;
++
++  cif = closure->cif;
++  arg_area = (void**) alloca (cif->nargs * sizeof (void *));
++
++  ffi_prep_closure_args_OBSD(cif, arg_area, regp, stackp);
++
++  (closure->fun) (cif, resp, arg_area, closure->user_data);
++
++  return cif->flags;
++}
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure* closure, ffi_cif* cif,
++		      void (*fun)(ffi_cif*,void*,void**,void*),
++		      void *user_data, void *codeloc)
++{
++  unsigned int *tramp = (unsigned int *) codeloc;
++  void *fn;
++
++  FFI_ASSERT (cif->abi == FFI_OBSD);
++
++  if (cif->rtype->type == FFI_TYPE_STRUCT && !cif->flags)
++    fn = &ffi_closure_struct_OBSD;
++  else
++    fn = &ffi_closure_OBSD;
++
++  /* or.u %r10, %r0, %hi16(fn) */
++  tramp[0] = 0x5d400000 | (((unsigned int)fn) >> 16);
++  /* or.u %r13, %r0, %hi16(closure) */
++  tramp[1] = 0x5da00000 | ((unsigned int)closure >> 16);
++  /* or %r10, %r10, %lo16(fn) */
++  tramp[2] = 0x594a0000 | (((unsigned int)fn) & 0xffff);
++  /* jmp.n %r10 */
++  tramp[3] = 0xf400c40a;
++  /* or %r13, %r13, %lo16(closure) */
++  tramp[4] = 0x59ad0000 | ((unsigned int)closure & 0xffff);
++
++  ffi_cacheflush_OBSD((unsigned int)codeloc, FFI_TRAMPOLINE_SIZE);
++
++  closure->cif  = cif;
++  closure->user_data = user_data;
++  closure->fun  = fun;
++
++  return FFI_OK;
++}
+diff --git a/js/src/ctypes/libffi/src/m88k/ffitarget.h b/js/src/ctypes/libffi/src/m88k/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/m88k/ffitarget.h
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat.  <miod@openbsd.org>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ * 
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ * 
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * m88k Foreign Function Interface
++ */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_ASM
++typedef unsigned long ffi_arg;
++typedef signed long ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_OBSD,
++  FFI_DEFAULT_ABI = FFI_OBSD,
++  FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
++} ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 0x14
++#define FFI_NATIVE_RAW_API 0
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/m88k/obsd.S b/js/src/ctypes/libffi/src/m88k/obsd.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/m88k/obsd.S
+@@ -0,0 +1,209 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat.  <miod@openbsd.org>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ * 
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ * 
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * m88k Foreign Function Interface
++ */
++
++#define LIBFFI_ASM	
++#include <fficonfig.h>
++#include <ffi.h>
++
++	.text
++
++/*
++ * ffi_cacheflush_OBSD(unsigned int addr,	%r2
++ *		       unsigned int size);	%r3
++ */
++	.align	4
++	.globl	ffi_cacheflush_OBSD
++	.type	ffi_cacheflush_OBSD,@function
++ffi_cacheflush_OBSD:
++	tb0	0,   %r0, 451
++	or	%r0, %r0, %r0
++	jmp	%r1
++	.size	ffi_cacheflush_OBSD, . - ffi_cacheflush_OBSD
++
++/*
++ * ffi_call_OBSD(unsigned bytes,		%r2
++ *		 extended_cif *ecif,		%r3
++ *		 unsigned flags,		%r4
++ *		 void *rvalue,			%r5
++ *		 void (*fn)());			%r6
++ */
++	.align	4
++	.globl	ffi_call_OBSD
++	.type	ffi_call_OBSD,@function
++ffi_call_OBSD:
++	subu	%r31, %r31, 32
++	st	%r30, %r31, 4
++	st	%r1,  %r31, 0
++	addu	%r30, %r31, 32
++
++	| Save the few arguments we'll need after ffi_prep_args()
++	st.d	%r4, %r31, 8
++	st	%r6, %r31, 16
++
++	| Allocate room for the image of r2-r9, and the stack space for
++	| the args (rounded to a 16-byte boundary)
++	addu	%r2,  %r2,  (8 * 4) + 15
++	clr	%r2,  %r2,  4<0>
++	subu	%r31, %r31, %r2
++
++	| Fill register and stack image
++	or	%r2, %r31, %r0
++#ifdef PIC
++	bsr	ffi_prep_args#plt
++#else
++	bsr	ffi_prep_args
++#endif
++
++	| Save pointer to return struct address, if any
++	or	%r12, %r2, %r0
++
++	| Get function pointer
++	subu	%r4,  %r30, 32
++	ld	%r1,  %r4,  16
++
++	| Fetch the register arguments
++	ld.d	%r2, %r31, (0 * 4)
++	ld.d	%r4, %r31, (2 * 4)
++	ld.d	%r6, %r31, (4 * 4)
++	ld.d	%r8, %r31, (6 * 4)
++	addu	%r31, %r31, (8 * 4)
++
++	| Invoke the function
++	jsr	%r1
++
++	| Restore stack now that we don't need the args anymore
++	subu	%r31, %r30, 32
++
++	| Figure out what to return as the function's return value
++	ld	%r5, %r31, 12		| rvalue
++	ld	%r4, %r31, 8		| flags
++
++	bcnd	eq0, %r5, 9f
++
++	bb0	0, %r4, 1f		| CIF_FLAGS_INT
++	st	%r2, %r5, 0
++	br	9f
++
++1:
++	bb0	1, %r4, 1f		| CIF_FLAGS_DINT
++	st.d	%r2, %r5, 0
++	br	9f
++
++1:
++9:
++	ld	%r1,  %r31, 0
++	ld	%r30, %r31, 4
++	jmp.n	%r1
++	 addu	%r31, %r31, 32
++	.size	ffi_call_OBSD, . - ffi_call_OBSD
++
++/*
++ * ffi_closure_OBSD(ffi_closure *closure);	%r13
++ */
++	.align	4
++	.globl	ffi_closure_OBSD
++	.type	ffi_closure_OBSD, @function
++ffi_closure_OBSD:
++	subu	%r31, %r31, 16
++	st	%r30, %r31, 4
++	st	%r1,  %r31, 0
++	addu	%r30, %r31, 16
++
++	| Make room on the stack for saved register arguments and return
++	| value
++	subu	%r31, %r31, (8 * 4) + (2 * 4)
++	st.d	%r2,  %r31, (0 * 4)
++	st.d	%r4,  %r31, (2 * 4)
++	st.d	%r6,  %r31, (4 * 4)
++	st.d	%r8,  %r31, (6 * 4)
++
++	| Invoke the closure function
++	or	%r5,  %r30, 0			| calling stack
++	addu	%r4,  %r31, 0			| saved registers
++	addu	%r3,  %r31, (8 * 4)		| return value
++	or	%r2,  %r13, %r0			| closure
++#ifdef PIC
++	bsr	ffi_closure_OBSD_inner#plt
++#else
++	bsr	ffi_closure_OBSD_inner
++#endif
++
++	| Figure out what to return as the function's return value
++	bb0	0, %r2, 1f		| CIF_FLAGS_INT
++	ld	%r2, %r31, (8 * 4)
++	br	9f
++
++1:
++	bb0	1, %r2, 1f		| CIF_FLAGS_DINT
++	ld.d	%r2, %r31, (8 * 4)
++	br	9f
++
++1:
++9:
++	subu	%r31, %r30, 16
++	ld	%r1,  %r31, 0
++	ld	%r30, %r31, 4
++	jmp.n	%r1
++	 addu	%r31, %r31, 16
++	.size	ffi_closure_OBSD,.-ffi_closure_OBSD
++
++/*
++ * ffi_closure_struct_OBSD(ffi_closure *closure);	%r13
++ */
++	.align	4
++	.globl	ffi_closure_struct_OBSD
++	.type	ffi_closure_struct_OBSD, @function
++ffi_closure_struct_OBSD:
++	subu	%r31, %r31, 16
++	st	%r30, %r31, 4
++	st	%r1,  %r31, 0
++	addu	%r30, %r31, 16
++
++	| Make room on the stack for saved register arguments
++	subu	%r31, %r31, (8 * 4)
++	st.d	%r2,  %r31, (0 * 4)
++	st.d	%r4,  %r31, (2 * 4)
++	st.d	%r6,  %r31, (4 * 4)
++	st.d	%r8,  %r31, (6 * 4)
++
++	| Invoke the closure function
++	or	%r5,  %r30, 0			| calling stack
++	addu	%r4,  %r31, 0			| saved registers
++	or	%r3,  %r12, 0			| return value
++	or	%r2,  %r13, %r0			| closure
++#ifdef PIC
++	bsr	ffi_closure_OBSD_inner#plt
++#else
++	bsr	ffi_closure_OBSD_inner
++#endif
++
++	subu	%r31, %r30, 16
++	ld	%r1,  %r31, 0
++	ld	%r30, %r31, 4
++	jmp.n	%r1
++	 addu	%r31, %r31, 16
++	.size	ffi_closure_struct_OBSD,.-ffi_closure_struct_OBSD
+diff --git a/js/src/ctypes/libffi/src/metag/ffi.c b/js/src/ctypes/libffi/src/metag/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/metag/ffi.c
+@@ -0,0 +1,330 @@
++/* ----------------------------------------------------------------------
++  ffi.c - Copyright (c) 2013 Imagination Technologies
++
++  Meta Foreign Function Interface
++  Permission is hereby granted, free of charge, to any person obtaining
++  a copy of this software and associated documentation files (the
++  `Software''), to deal in the Software without restriction, including
++  without limitation the rights to use, copy, modify, merge, publish,
++  distribute, sublicense, and/or sell copies of the Software, and to
++  permit persons to whom the Software is furnished to do so, subject to
++  the following conditions:
++
++  The above copyright notice and this permission notice shall be included
++  in all copies or substantial portions of the Software.
++
++  THE SOFTWARE IS PROVIDED `AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++  IN NO EVENT SHALL SIMON POSNJAK BE LIABLE FOR ANY CLAIM, DAMAGES OR
++  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++  OTHER DEALINGS IN THE SOFTWARE.
++----------------------------------------------------------------------- */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++
++#define MIN(a,b) (((a) < (b)) ? (a) : (b))
++
++/*
++ * ffi_prep_args is called by the assembly routine once stack space has been
++ * allocated for the function's arguments
++ */
++
++unsigned int ffi_prep_args(char *stack, extended_cif *ecif)
++{
++	register unsigned int i;
++	register void **p_argv;
++	register char *argp;
++	register ffi_type **p_arg;
++
++	argp = stack;
++
++	/* Store return value */
++	if ( ecif->cif->flags == FFI_TYPE_STRUCT ) {
++		argp -= 4;
++		*(void **) argp = ecif->rvalue;
++	}
++
++	p_argv = ecif->avalue;
++
++	/* point to next location */
++	for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; (i != 0); i--, p_arg++, p_argv++)
++	{
++		size_t z;
++
++		/* Move argp to address of argument */
++		z = (*p_arg)->size;
++		argp -= z;
++
++		/* Align if necessary */
++		argp = (char *) ALIGN_DOWN(ALIGN_DOWN(argp, (*p_arg)->alignment), 4);
++
++		if (z < sizeof(int)) {
++			z = sizeof(int);
++			switch ((*p_arg)->type)
++			{
++			case FFI_TYPE_SINT8:
++				*(signed int *) argp = (signed int)*(SINT8 *)(* p_argv);
++				break;
++			case FFI_TYPE_UINT8:
++				*(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv);
++				break;
++			case FFI_TYPE_SINT16:
++				*(signed int *) argp = (signed int)*(SINT16 *)(* p_argv);
++				break;
++			case FFI_TYPE_UINT16:
++				*(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv);
++			case FFI_TYPE_STRUCT:
++				memcpy(argp, *p_argv, (*p_arg)->size);
++				break;
++			default:
++				FFI_ASSERT(0);
++			}
++		} else if ( z == sizeof(int)) {
++			*(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv);
++		} else {
++			memcpy(argp, *p_argv, z);
++		}
++	}
++
++	/* return the size of the arguments to be passed in registers,
++	   padded to an 8 byte boundary to preserve stack alignment */
++	return ALIGN(MIN(stack - argp, 6*4), 8);
++}
++
++/* Perform machine dependent cif processing */
++ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
++{
++	ffi_type **ptr;
++	unsigned i, bytes = 0;
++
++	for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) {
++		if ((*ptr)->size == 0)
++			return FFI_BAD_TYPEDEF;
++
++		/* Perform a sanity check on the argument type, do this
++		   check after the initialization.  */
++		FFI_ASSERT_VALID_TYPE(*ptr);
++
++		/* Add any padding if necessary */
++		if (((*ptr)->alignment - 1) & bytes)
++			bytes = ALIGN(bytes, (*ptr)->alignment);
++
++		bytes += ALIGN((*ptr)->size, 4);
++	}
++
++	/* Ensure arg space is aligned to an 8-byte boundary */
++	bytes = ALIGN(bytes, 8);
++
++	/* Make space for the return structure pointer */
++	if (cif->rtype->type == FFI_TYPE_STRUCT) {
++		bytes += sizeof(void*);
++
++		/* Ensure stack is aligned to an 8-byte boundary */
++		bytes = ALIGN(bytes, 8);
++	}
++
++	cif->bytes = bytes;
++
++	/* Set the return type flag */
++	switch (cif->rtype->type) {
++	case FFI_TYPE_VOID:
++	case FFI_TYPE_FLOAT:
++	case FFI_TYPE_DOUBLE:
++		cif->flags = (unsigned) cif->rtype->type;
++		break;
++	case FFI_TYPE_SINT64:
++	case FFI_TYPE_UINT64:
++		cif->flags = (unsigned) FFI_TYPE_SINT64;
++		break;
++	case FFI_TYPE_STRUCT:
++		/* Meta can store return values which are <= 64 bits */
++		if (cif->rtype->size <= 4)
++			/* Returned to D0Re0 as 32-bit value */
++			cif->flags = (unsigned)FFI_TYPE_INT;
++		else if ((cif->rtype->size > 4) && (cif->rtype->size <= 8))
++			/* Returned valued is stored to D1Re0|R0Re0 */
++			cif->flags = (unsigned)FFI_TYPE_DOUBLE;
++		else
++			/* value stored in memory */
++			cif->flags = (unsigned)FFI_TYPE_STRUCT;
++		break;
++	default:
++		cif->flags = (unsigned)FFI_TYPE_INT;
++		break;
++	}
++	return FFI_OK;
++}
++
++extern void ffi_call_SYSV(void (*fn)(void), extended_cif *, unsigned, unsigned, double *);
++
++/*
++ * Exported in API. Entry point
++ * cif -> ffi_cif object
++ * fn -> function pointer
++ * rvalue -> pointer to return value
++ * avalue -> vector of void * pointers pointing to memory locations holding the
++ * arguments
++ */
++void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
++{
++	extended_cif ecif;
++
++	int small_struct = (((cif->flags == FFI_TYPE_INT) || (cif->flags == FFI_TYPE_DOUBLE)) && (cif->rtype->type == FFI_TYPE_STRUCT));
++	ecif.cif = cif;
++	ecif.avalue = avalue;
++
++	double temp;
++
++	/*
++	 * If the return value is a struct and we don't have a return value address
++	 * then we need to make one
++	 */
++
++	if ((rvalue == NULL ) && (cif->flags == FFI_TYPE_STRUCT))
++		ecif.rvalue = alloca(cif->rtype->size);
++	else if (small_struct)
++		ecif.rvalue = &temp;
++	else
++		ecif.rvalue = rvalue;
++
++	switch (cif->abi) {
++	case FFI_SYSV:
++		ffi_call_SYSV(fn, &ecif, cif->bytes, cif->flags, ecif.rvalue);
++		break;
++	default:
++		FFI_ASSERT(0);
++		break;
++	}
++
++	if (small_struct)
++		memcpy (rvalue, &temp, cif->rtype->size);
++}
++
++/* private members */
++
++static void ffi_prep_incoming_args_SYSV (char *, void **, void **,
++	ffi_cif*, float *);
++
++void ffi_closure_SYSV (ffi_closure *);
++
++/* Do NOT change that without changing the FFI_TRAMPOLINE_SIZE */
++extern unsigned int ffi_metag_trampoline[10]; /* 10 instructions */
++
++/* end of private members */
++
++/*
++ * __tramp: trampoline memory location
++ * __fun: assembly routine
++ * __ctx: memory location for wrapper
++ *
++ * At this point, tramp[0] == __ctx !
++ */
++void ffi_init_trampoline(unsigned char *__tramp, unsigned int __fun, unsigned int __ctx) {
++	memcpy (__tramp, ffi_metag_trampoline, sizeof(ffi_metag_trampoline));
++	*(unsigned int*) &__tramp[40] = __ctx;
++	*(unsigned int*) &__tramp[44] = __fun;
++	/* This will flush the instruction cache */
++	__builtin_meta2_cachewd(&__tramp[0], 1);
++	__builtin_meta2_cachewd(&__tramp[47], 1);
++}
++
++
++
++/* the cif must already be prepared */
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure *closure,
++	ffi_cif* cif,
++	void (*fun)(ffi_cif*,void*,void**,void*),
++	void *user_data,
++	void *codeloc)
++{
++	void (*closure_func)(ffi_closure*) = NULL;
++
++	if (cif->abi == FFI_SYSV)
++		closure_func = &ffi_closure_SYSV;
++	else
++		return FFI_BAD_ABI;
++
++	ffi_init_trampoline(
++		(unsigned char*)&closure->tramp[0],
++		(unsigned int)closure_func,
++		(unsigned int)codeloc);
++
++	closure->cif = cif;
++	closure->user_data = user_data;
++	closure->fun = fun;
++
++	return FFI_OK;
++}
++
++
++/* This function is jumped to by the trampoline */
++unsigned int ffi_closure_SYSV_inner (closure, respp, args, vfp_args)
++	ffi_closure *closure;
++	void **respp;
++	void *args;
++	void *vfp_args;
++{
++	ffi_cif *cif;
++	void **arg_area;
++
++	cif = closure->cif;
++	arg_area = (void**) alloca (cif->nargs * sizeof (void*));
++
++	/*
++	 * This call will initialize ARG_AREA, such that each
++	 * element in that array points to the corresponding
++	 * value on the stack; and if the function returns
++	 * a structure, it will re-set RESP to point to the
++	 * structure return address.
++	 */
++	ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args);
++
++	(closure->fun) ( cif, *respp, arg_area, closure->user_data);
++
++	return cif->flags;
++}
++
++static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
++	void **avalue, ffi_cif *cif,
++	float *vfp_stack)
++{
++	register unsigned int i;
++	register void **p_argv;
++	register char *argp;
++	register ffi_type **p_arg;
++
++	/* stack points to original arguments */
++	argp = stack;
++
++	/* Store return value */
++	if ( cif->flags == FFI_TYPE_STRUCT ) {
++		argp -= 4;
++		*rvalue = *(void **) argp;
++	}
++
++	p_argv = avalue;
++
++	for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) {
++		size_t z;
++		size_t alignment;
++
++		alignment = (*p_arg)->alignment;
++		if (alignment < 4)
++			alignment = 4;
++		if ((alignment - 1) & (unsigned)argp)
++			argp = (char *) ALIGN(argp, alignment);
++
++		z = (*p_arg)->size;
++		*p_argv = (void*) argp;
++		p_argv++;
++		argp -= z;
++	}
++	return;
++}
+diff --git a/js/src/ctypes/libffi/src/metag/ffitarget.h b/js/src/ctypes/libffi/src/metag/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/metag/ffitarget.h
+@@ -0,0 +1,53 @@
++/* -----------------------------------------------------------------*-C-*-
++   ffitarget.h - Copyright (c) 2013 Imagination Technologies Ltd.
++   Target configuration macros for Meta
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++
++   ----------------------------------------------------------------------- */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++#ifndef LIBFFI_ASM
++typedef unsigned long          ffi_arg;
++typedef signed long            ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_SYSV,
++  FFI_DEFAULT_ABI = FFI_SYSV,
++  FFI_LAST_ABI = FFI_DEFAULT_ABI + 1,
++} ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 48
++#define FFI_NATIVE_RAW_API 0
++
++#endif
++
+diff --git a/js/src/ctypes/libffi/src/metag/sysv.S b/js/src/ctypes/libffi/src/metag/sysv.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/metag/sysv.S
+@@ -0,0 +1,311 @@
++/* -----------------------------------------------------------------------
++   sysv.S - Copyright (c) 2013 Imagination Technologies Ltd.
++
++   Meta Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++#ifdef HAVE_MACHINE_ASM_H
++#include <machine/asm.h>
++#else
++#ifdef __USER_LABEL_PREFIX__
++#define CONCAT1(a, b) CONCAT2(a, b)
++#define CONCAT2(a, b) a ## b
++
++/* Use the right prefix for global labels. */
++#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
++#else
++#define CNAME(x) x
++#endif
++#define ENTRY(x) .globl CNAME(x); .type CNAME(x), %function; CNAME(x):
++#endif
++
++#ifdef __ELF__
++#define LSYM(x) .x
++#else
++#define LSYM(x) x
++#endif
++
++.macro call_reg x=
++	.text
++	.balign 4
++	mov D1RtP, \x
++	swap D1RtP, PC
++.endm
++
++! Save register arguments
++.macro SAVE_ARGS
++	.text
++	.balign 4
++	setl	[A0StP++], D0Ar6, D1Ar5
++	setl	[A0StP++], D0Ar4, D1Ar3
++	setl	[A0StP++], D0Ar2, D1Ar1
++.endm
++
++! Save retrun, frame pointer and other regs
++.macro SAVE_REGS regs=
++	.text
++	.balign 4
++	setl	[A0StP++], D0FrT, D1RtP
++	! Needs to be a pair of regs
++	.ifnc "\regs",""
++	setl	[A0StP++], \regs
++	.endif
++.endm
++
++! Declare a global function
++.macro METAG_FUNC_START name
++	.text
++	.balign 4
++	ENTRY(\name)
++.endm
++
++! Return registers from the stack. Reverse SAVE_REGS operation
++.macro RET_REGS regs=, cond=
++	.ifnc "\regs", ""
++	getl	\regs, [--A0StP]
++	.endif
++	getl	D0FrT, D1RtP, [--A0StP]
++.endm
++
++! Return arguments
++.macro RET_ARGS
++	getl	D0Ar2, D1Ar1, [--A0StP]
++	getl	D0Ar4, D1Ar3, [--A0StP]
++	getl	D0Ar6, D1Ar5, [--A0StP]
++.endm
++
++
++	! D1Ar1:	fn
++	! D0Ar2:	&ecif
++	! D1Ar3:	cif->bytes
++	! D0Ar4:	fig->flags
++	! D1Ar5:	ecif.rvalue
++
++	! This assumes we are using GNU as
++METAG_FUNC_START ffi_call_SYSV
++	! Save argument registers
++
++	SAVE_ARGS
++
++	! new frame
++	mov	D0FrT, A0FrP
++	add     A0FrP, A0StP, #0
++
++	! Preserve the old frame pointer
++	SAVE_REGS "D1.5, D0.5"
++
++	! Make room for new args. cifs->bytes is the total space for input
++	! and return arguments
++
++	add	A0StP, A0StP, D1Ar3
++
++	! Preserve cifs->bytes & fn
++	mov	D0.5, D1Ar3
++	mov	D1.5, D1Ar1
++
++	! Place all of the ffi_prep_args in position
++	mov	D1Ar1, A0StP
++
++	! Call ffi_prep_args(stack, &ecif)
++#ifdef __PIC__
++	callr  D1RtP, CNAME(ffi_prep_args@PLT)
++#else
++	callr  D1RtP, CNAME(ffi_prep_args)
++#endif
++
++	! Restore fn pointer
++
++	! The foreign stack should look like this
++	! XXXXX XXXXXX <--- stack pointer
++	! FnArgN rvalue
++	! FnArgN+2 FnArgN+1
++	! FnArgN+4 FnArgN+3
++	! ....
++	!
++
++	! A0StP now points to the first (or return) argument + 4
++
++	! Preserve cif->bytes
++	getl	D0Ar2, D1Ar1, [--A0StP]
++	getl	D0Ar4, D1Ar3, [--A0StP]
++	getl	D0Ar6, D1Ar5, [--A0StP]
++
++	! Place A0StP to the first argument again
++	add	A0StP, A0StP, #24 ! That's because we loaded 6 regs x 4 byte each
++
++	! A0FrP points to the initial stack without the reserved space for the
++	! cifs->bytes, whilst A0StP points to the stack after the space allocation
++
++	! fn was the first argument of ffi_call_SYSV.
++	! The stack at this point looks like this:
++	!
++	! A0StP(on entry to _SYSV) ->	Arg6	Arg5     | low
++	!				Arg4	Arg3     |
++	! 				Arg2	Arg1     |
++	! A0FrP ---->			D0FrtP	D1RtP    |
++	!				D1.5	D0.5	 |
++	! A0StP(bf prep_args) ->	FnArgn	FnArgn-1 |
++	!				FnArgn-2FnArgn-3 |
++	!				................ | <= cifs->bytes
++	!				FnArg4  FnArg3	 |
++	! A0StP (prv_A0StP+cifs->bytes) FnArg2  FnArg1   | high
++	!
++	! fn was in Arg1 so it's located in in A0FrP+#-0xC
++	!
++
++	! D0Re0 contains the size of arguments stored in registers
++	sub	A0StP, A0StP, D0Re0
++
++	! Arg1 is the function pointer for the foreign call. This has been
++	! preserved in D1.5
++
++	! Time to call (fn). Arguments should be like this:
++	! Arg1-Arg6 are loaded to regs
++	! The rest of the arguments are stored in stack pointed by A0StP
++
++	call_reg D1.5
++
++	! Reset stack.
++
++	mov	A0StP, A0FrP
++
++	! Load Arg1 with the pointer to storage for the return type
++	! This was stored in Arg5
++
++	getd	D1Ar1, [A0FrP+#-20]
++
++	! Load D0Ar2 with the return type code. This was stored in Arg4 (flags)
++
++	getd	D0Ar2, [A0FrP+#-16]
++
++	! We are ready to start processing the return value
++	! D0Re0 (and D1Re0) hold the return value
++
++	! If the return value is NULL, assume no return value
++	cmp	D1Ar1, #0
++	beq	LSYM(Lepilogue)
++
++	! return INT
++	cmp		D0Ar2, #FFI_TYPE_INT
++	! Sadly, there is no setd{cc} instruction so we need to workaround that
++	bne	.INT64
++	setd	[D1Ar1], D0Re0
++	b	LSYM(Lepilogue)
++
++	! return INT64
++.INT64:
++	cmp	D0Ar2, #FFI_TYPE_SINT64
++	setleq	[D1Ar1], D0Re0, D1Re0
++
++	! return DOUBLE
++	cmp	D0Ar2, #FFI_TYPE_DOUBLE
++	setl	[D1AR1++], D0Re0, D1Re0
++
++LSYM(Lepilogue):
++	! At this point, the stack pointer points right after the argument
++	! saved area. We need to restore 4 regs, therefore we need to move
++	! 16 bytes ahead.
++	add     A0StP, A0StP, #16
++	RET_REGS "D1.5, D0.5"
++	RET_ARGS
++	getd	D0Re0, [A0StP]
++	mov     A0FrP, D0FrT
++	swap	D1RtP, PC
++
++.ffi_call_SYSV_end:
++       .size   CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
++
++
++/*
++	(called by ffi_metag_trampoline)
++	void ffi_closure_SYSV (ffi_closure*)
++
++	(called by ffi_closure_SYSV)
++	unsigned int FFI_HIDDEN
++	ffi_closure_SYSV_inner (closure,respp, args)
++		ffi_closure *closure;
++		void **respp;
++		void *args;
++*/
++
++METAG_FUNC_START ffi_closure_SYSV
++	! We assume that D1Ar1 holds the address of the
++	! ffi_closure struct. We will use that to fetch the
++	! arguments. The stack pointer points to an empty space
++	! and it is ready to store more data.
++
++	! D1Ar1 is ready
++	! Allocate stack space for return value
++	add A0StP, A0StP, #8
++	! Store it to D0Ar2
++	sub D0Ar2, A0StP, #8
++
++	sub D1Ar3, A0FrP, #4
++
++	! D1Ar3 contains the address of the original D1Ar1 argument
++	! We need to subtract #4 later on
++
++	! Preverve D0Ar2
++	mov D0.5, D0Ar2
++
++#ifdef __PIC__
++	callr D1RtP, CNAME(ffi_closure_SYSV_inner@PLT)
++#else
++	callr D1RtP, CNAME(ffi_closure_SYSV_inner)
++#endif
++
++	! Check the return value and store it to D0.5
++	cmp D0Re0, #FFI_TYPE_INT
++	beq .Lretint
++	cmp D0Re0, #FFI_TYPE_DOUBLE
++	beq .Lretdouble
++.Lclosure_epilogue:
++	sub A0StP, A0StP, #8
++	RET_REGS "D1.5, D0.5"
++	RET_ARGS
++	swap	D1RtP, PC
++
++.Lretint:
++	setd [D0.5], D0Re0
++	b .Lclosure_epilogue
++.Lretdouble:
++	setl [D0.5++], D0Re0, D1Re0
++	b .Lclosure_epilogue
++.ffi_closure_SYSV_end:
++.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
++
++
++ENTRY(ffi_metag_trampoline)
++	SAVE_ARGS
++	! New frame
++	mov A0FrP, A0StP
++	SAVE_REGS "D1.5, D0.5"
++	mov D0.5, PC
++	! Load D1Ar1 the value of ffi_metag_trampoline
++	getd D1Ar1, [D0.5 + #8]
++	! Jump to ffi_closure_SYSV
++	getd PC, [D0.5 + #12]
+diff --git a/js/src/ctypes/libffi/src/microblaze/ffi.c b/js/src/ctypes/libffi/src/microblaze/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/microblaze/ffi.c
+@@ -0,0 +1,321 @@
++/* -----------------------------------------------------------------------
++   ffi.c - Copyright (c) 2012, 2013 Xilinx, Inc
++
++   MicroBlaze Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++extern void ffi_call_SYSV(void (*)(void*, extended_cif*), extended_cif*,
++		unsigned int, unsigned int, unsigned int*, void (*fn)(void),
++		unsigned int, unsigned int);
++
++extern void ffi_closure_SYSV(void);
++
++#define WORD_SIZE			sizeof(unsigned int)
++#define ARGS_REGISTER_SIZE	(WORD_SIZE * 6)
++#define WORD_ALIGN(x)		ALIGN(x, WORD_SIZE)
++
++/* ffi_prep_args is called by the assembly routine once stack space
++   has been allocated for the function's arguments */
++void ffi_prep_args(void* stack, extended_cif* ecif)
++{
++	unsigned int i;
++	ffi_type** p_arg;
++	void** p_argv;
++	void* stack_args_p = stack;
++
++	p_argv = ecif->avalue;
++
++	if (ecif == NULL || ecif->cif == NULL) {
++		return; /* no description to prepare */
++	}
++
++	if ((ecif->cif->rtype != NULL) &&
++			(ecif->cif->rtype->type == FFI_TYPE_STRUCT))
++	{
++		/* if return type is a struct which is referenced on the stack/reg5,
++		 * by a pointer. Stored the return value pointer in r5.
++		 */
++		char* addr = stack_args_p;
++		memcpy(addr, &(ecif->rvalue), WORD_SIZE);
++		stack_args_p += WORD_SIZE;
++	}
++
++	if (ecif->avalue == NULL) {
++		return; /* no arguments to prepare */
++	}
++
++	for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs;
++			i++, p_arg++)
++	{
++		size_t size = (*p_arg)->size;
++		int type = (*p_arg)->type;
++		void* value = p_argv[i];
++		char* addr = stack_args_p;
++		int aligned_size = WORD_ALIGN(size);
++
++		/* force word alignment on the stack */
++		stack_args_p += aligned_size;
++		
++		switch (type)
++		{
++			case FFI_TYPE_UINT8:
++				*(unsigned int *)addr = (unsigned int)*(UINT8*)(value);
++				break;
++			case FFI_TYPE_SINT8:
++				*(signed int *)addr = (signed int)*(SINT8*)(value);
++				break;
++			case FFI_TYPE_UINT16:
++				*(unsigned int *)addr = (unsigned int)*(UINT16*)(value);
++				break;
++			case FFI_TYPE_SINT16:
++				*(signed int *)addr = (signed int)*(SINT16*)(value);
++				break;
++			case FFI_TYPE_STRUCT:
++#if __BIG_ENDIAN__
++				/*
++				 * MicroBlaze toolchain appears to emit:
++				 * bsrli r5, r5, 8 (caller)
++				 * ...
++				 * <branch to callee>
++				 * ...
++				 * bslli r5, r5, 8 (callee)
++				 * 
++				 * For structs like "struct a { uint8_t a[3]; };", when passed
++				 * by value.
++				 *
++				 * Structs like "struct b { uint16_t a; };" are also expected
++				 * to be packed strangely in registers.
++				 *
++				 * This appears to be because the microblaze toolchain expects
++				 * "struct b == uint16_t", which is only any issue for big
++				 * endian.
++				 *
++				 * The following is a work around for big-endian only, for the
++				 * above mentioned case, it will re-align the contents of a
++				 * <= 3-byte struct value.
++				 */
++				if (size < WORD_SIZE)
++				{
++				  memcpy (addr + (WORD_SIZE - size), value, size);
++				  break;
++				}
++#endif
++			case FFI_TYPE_SINT32:
++			case FFI_TYPE_UINT32:
++			case FFI_TYPE_FLOAT:
++			case FFI_TYPE_SINT64:
++			case FFI_TYPE_UINT64:
++			case FFI_TYPE_DOUBLE:
++			default:
++				memcpy(addr, value, aligned_size);
++		}
++	}
++}
++
++ffi_status ffi_prep_cif_machdep(ffi_cif* cif)
++{
++	/* check ABI */
++	switch (cif->abi)
++	{
++		case FFI_SYSV:
++			break;
++		default:
++			return FFI_BAD_ABI;
++	}
++	return FFI_OK;
++}
++
++void ffi_call(ffi_cif* cif, void (*fn)(void), void* rvalue, void** avalue)
++{
++	extended_cif ecif;
++	ecif.cif = cif;
++	ecif.avalue = avalue;
++
++	/* If the return value is a struct and we don't have a return */
++	/* value address then we need to make one */
++	if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) {
++		ecif.rvalue = alloca(cif->rtype->size);
++	} else {
++		ecif.rvalue = rvalue;
++	}
++
++	switch (cif->abi)
++	{
++	case FFI_SYSV:
++		ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags,
++				ecif.rvalue, fn, cif->rtype->type, cif->rtype->size);
++		break;
++	default:
++		FFI_ASSERT(0);
++		break;
++	}
++}
++
++void ffi_closure_call_SYSV(void* register_args, void* stack_args,
++			ffi_closure* closure, void* rvalue,
++			unsigned int* rtype, unsigned int* rsize)
++{
++	/* prepare arguments for closure call */
++	ffi_cif* cif = closure->cif;
++	ffi_type** arg_types = cif->arg_types;
++
++	/* re-allocate data for the args. This needs to be done in order to keep
++	 * multi-word objects (e.g. structs) in contiguous memory. Callers are not
++	 * required to store the value of args in the lower 6 words in the stack
++	 * (although they are allocated in the stack).
++	 */
++	char* stackclone = alloca(cif->bytes);
++	void** avalue = alloca(cif->nargs * sizeof(void*));
++	void* struct_rvalue = NULL;
++	char* ptr = stackclone;
++	int i;
++
++	/* copy registers into stack clone */
++	int registers_used = cif->bytes;
++	if (registers_used > ARGS_REGISTER_SIZE) {
++		registers_used = ARGS_REGISTER_SIZE;
++	}
++	memcpy(stackclone, register_args, registers_used);
++
++	/* copy stack allocated args into stack clone */
++	if (cif->bytes > ARGS_REGISTER_SIZE) {
++		int stack_used = cif->bytes - ARGS_REGISTER_SIZE;
++		memcpy(stackclone + ARGS_REGISTER_SIZE, stack_args, stack_used);
++	}
++
++	/* preserve struct type return pointer passing */
++	if ((cif->rtype != NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) {
++		struct_rvalue = *((void**)ptr);
++		ptr += WORD_SIZE;
++	}
++
++	/* populate arg pointer list */
++	for (i = 0; i < cif->nargs; i++)
++	{
++		switch (arg_types[i]->type)
++		{
++			case FFI_TYPE_SINT8:
++			case FFI_TYPE_UINT8:
++#ifdef __BIG_ENDIAN__
++				avalue[i] = ptr + 3;
++#else
++				avalue[i] = ptr;
++#endif
++				break;
++			case FFI_TYPE_SINT16:
++			case FFI_TYPE_UINT16:
++#ifdef __BIG_ENDIAN__
++				avalue[i] = ptr + 2;
++#else
++				avalue[i] = ptr;
++#endif
++				break;
++			case FFI_TYPE_STRUCT:
++#if __BIG_ENDIAN__
++				/*
++				 * Work around strange ABI behaviour.
++				 * (see info in ffi_prep_args)
++				 */
++				if (arg_types[i]->size < WORD_SIZE)
++				{
++				  memcpy (ptr, ptr + (WORD_SIZE - arg_types[i]->size), arg_types[i]->size);
++				}
++#endif
++				avalue[i] = (void*)ptr;
++				break;
++			case FFI_TYPE_UINT64:
++			case FFI_TYPE_SINT64:
++			case FFI_TYPE_DOUBLE:
++				avalue[i] = ptr;
++				break;
++			case FFI_TYPE_SINT32:
++			case FFI_TYPE_UINT32:
++			case FFI_TYPE_FLOAT:
++			default:
++				/* default 4-byte argument */
++				avalue[i] = ptr;
++				break;
++		}
++		ptr += WORD_ALIGN(arg_types[i]->size);
++	}
++
++	/* set the return type info passed back to the wrapper */
++	*rsize = cif->rtype->size;
++	*rtype = cif->rtype->type;
++	if (struct_rvalue != NULL) {
++		closure->fun(cif, struct_rvalue, avalue, closure->user_data);
++		/* copy struct return pointer value into function return value */
++		*((void**)rvalue) = struct_rvalue;
++	} else {
++		closure->fun(cif, rvalue, avalue, closure->user_data);
++	}
++}
++
++ffi_status ffi_prep_closure_loc(
++		ffi_closure* closure, ffi_cif* cif,
++		void (*fun)(ffi_cif*, void*, void**, void*),
++		void* user_data, void* codeloc)
++{
++	unsigned long* tramp = (unsigned long*)&(closure->tramp[0]);
++	unsigned long cls = (unsigned long)codeloc;
++	unsigned long fn = 0;
++	unsigned long fn_closure_call_sysv = (unsigned long)ffi_closure_call_SYSV;
++
++	closure->cif = cif;
++	closure->fun = fun;
++	closure->user_data = user_data;
++
++	switch (cif->abi)
++	{
++	case FFI_SYSV:
++		fn = (unsigned long)ffi_closure_SYSV;
++
++		/* load r11 (temp) with fn */
++		/* imm fn(upper) */
++		tramp[0] = 0xb0000000 | ((fn >> 16) & 0xffff);
++		/* addik r11, r0, fn(lower) */
++		tramp[1] = 0x31600000 | (fn & 0xffff);
++
++		/* load r12 (temp) with cls */
++		/* imm cls(upper) */
++		tramp[2] = 0xb0000000 | ((cls >> 16) & 0xffff);
++		/* addik r12, r0, cls(lower) */
++		tramp[3] = 0x31800000 | (cls & 0xffff);
++
++		/* load r3 (temp) with ffi_closure_call_SYSV */
++		/* imm fn_closure_call_sysv(upper) */
++		tramp[4] = 0xb0000000 | ((fn_closure_call_sysv >> 16) & 0xffff);
++		/* addik r3, r0, fn_closure_call_sysv(lower) */
++		tramp[5] = 0x30600000 | (fn_closure_call_sysv & 0xffff);
++		/* branch/jump to address stored in r11 (fn) */
++		tramp[6] = 0x98085800; /* bra r11 */
++
++		break;
++	default:
++		return FFI_BAD_ABI;
++	}
++	return FFI_OK;
++}
+diff --git a/js/src/ctypes/libffi/src/microblaze/ffitarget.h b/js/src/ctypes/libffi/src/microblaze/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/microblaze/ffitarget.h
+@@ -0,0 +1,53 @@
++/* -----------------------------------------------------------------------
++   ffitarget.h - Copyright (c) 2012, 2013 Xilinx, Inc
++
++   Target configuration macros for MicroBlaze.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++#ifndef LIBFFI_ASM
++typedef unsigned long			ffi_arg;
++typedef signed long			ffi_sarg;
++
++typedef enum ffi_abi {
++	FFI_FIRST_ABI = 0,
++	FFI_SYSV,
++	FFI_LAST_ABI,
++	FFI_DEFAULT_ABI = FFI_SYSV
++} ffi_abi;
++#endif
++
++/* Definitions for closures */
++
++#define FFI_CLOSURES 1
++#define FFI_NATIVE_RAW_API 0
++
++#define FFI_TRAMPOLINE_SIZE (4*8)
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/microblaze/sysv.S b/js/src/ctypes/libffi/src/microblaze/sysv.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/microblaze/sysv.S
+@@ -0,0 +1,302 @@
++/* -----------------------------------------------------------------------
++   sysv.S - Copyright (c) 2012, 2013 Xilinx, Inc
++
++   MicroBlaze Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++	/*
++	 * arg[0] (r5)  = ffi_prep_args,
++	 * arg[1] (r6)  = &ecif,
++	 * arg[2] (r7)  = cif->bytes,
++	 * arg[3] (r8)  = cif->flags,
++	 * arg[4] (r9)  = ecif.rvalue,
++	 * arg[5] (r10) = fn
++	 * arg[6] (sp[0]) = cif->rtype->type
++	 * arg[7] (sp[4]) = cif->rtype->size
++	 */
++	.text
++	.globl ffi_call_SYSV
++	.type ffi_call_SYSV, @function
++ffi_call_SYSV:
++	/* push callee saves */
++	addik r1, r1, -20
++	swi r19, r1, 0 /* Frame Pointer */
++	swi r20, r1, 4 /* PIC register */
++	swi r21, r1, 8 /* PIC register */
++	swi r22, r1, 12 /* save for locals */
++	swi r23, r1, 16 /* save for locals */
++	
++	/* save the r5-r10 registers in the stack */
++	addik r1, r1, -24 /* increment sp to store 6x 32-bit words */
++	swi r5, r1, 0
++	swi r6, r1, 4
++	swi r7, r1, 8
++	swi r8, r1, 12
++	swi r9, r1, 16
++	swi r10, r1, 20
++
++	/* save function pointer */
++	addik r3, r5, 0 /* copy ffi_prep_args into r3 */
++	addik r22, r1, 0 /* save sp for unallocated args into r22 (callee-saved) */
++	addik r23, r10, 0 /* save function address into r23 (callee-saved) */
++
++	/* prepare stack with allocation for n (bytes = r7) args */
++	rsub r1, r7, r1 /* subtract bytes from sp */
++
++	/* prep args for ffi_prep_args call */
++	addik r5, r1, 0 /* store stack pointer into arg[0] */
++	/* r6 still holds ecif for arg[1] */
++
++	/* Call ffi_prep_args(stack, &ecif). */
++	addik r1, r1, -4
++	swi r15, r1, 0 /* store the link register in the frame */
++	brald r15, r3
++	nop /* branch has delay slot */
++	lwi r15, r1, 0
++	addik r1, r1, 4 /* restore the link register from the frame */
++	/* returns calling stack pointer location */
++
++	/* prepare args for fn call, prep_args populates them onto the stack */
++	lwi r5, r1, 0 /* arg[0] */
++	lwi r6, r1, 4 /* arg[1] */
++	lwi r7, r1, 8 /* arg[2] */
++	lwi r8, r1, 12 /* arg[3] */
++	lwi r9, r1, 16 /* arg[4] */
++	lwi r10, r1, 20 /* arg[5] */
++
++	/* call (fn) (...). */
++	addik r1, r1, -4
++	swi r15, r1, 0 /* store the link register in the frame */
++	brald r15, r23
++	nop /* branch has delay slot */
++	lwi r15, r1, 0
++	addik r1, r1, 4 /* restore the link register from the frame */
++
++	/* Remove the space we pushed for the args. */
++	addik r1, r22, 0 /* restore old SP */
++
++	/* restore this functions parameters */
++	lwi r5, r1, 0 /* arg[0] */
++	lwi r6, r1, 4 /* arg[1] */
++	lwi r7, r1, 8 /* arg[2] */
++	lwi r8, r1, 12 /* arg[3] */
++	lwi r9, r1, 16 /* arg[4] */
++	lwi r10, r1, 20 /* arg[5] */
++	addik r1, r1, 24 /* decrement sp to de-allocate 6x 32-bit words */
++
++	/* If the return value pointer is NULL, assume no return value. */
++	beqi r9, ffi_call_SYSV_end
++
++	lwi r22, r1, 48 /* get return type (20 for locals + 28 for arg[6]) */
++	lwi r23, r1, 52 /* get return size (20 for locals + 32 for arg[7])  */
++	
++	/* Check if return type is actually a struct, do nothing */
++	rsubi r11, r22, FFI_TYPE_STRUCT
++	beqi r11, ffi_call_SYSV_end
++
++	/* Return 8bit */
++	rsubi r11, r23, 1
++	beqi r11, ffi_call_SYSV_store8
++
++	/* Return 16bit */
++	rsubi r11, r23, 2
++	beqi r11, ffi_call_SYSV_store16
++
++	/* Return 32bit */
++	rsubi r11, r23, 4
++	beqi r11, ffi_call_SYSV_store32
++
++	/* Return 64bit */
++	rsubi r11, r23, 8
++	beqi r11, ffi_call_SYSV_store64
++
++	/* Didn't match anything */
++	bri ffi_call_SYSV_end
++
++ffi_call_SYSV_store64:
++	swi r3, r9, 0 /* store word r3 into return value */
++	swi r4, r9, 4 /* store word r4 into return value */
++	bri ffi_call_SYSV_end
++
++ffi_call_SYSV_store32:
++	swi r3, r9, 0 /* store word r3 into return value */
++	bri ffi_call_SYSV_end
++
++ffi_call_SYSV_store16:
++#ifdef __BIG_ENDIAN__
++	shi r3, r9, 2 /* store half-word r3 into return value */
++#else
++	shi r3, r9, 0 /* store half-word r3 into return value */
++#endif
++	bri ffi_call_SYSV_end
++
++ffi_call_SYSV_store8:
++#ifdef __BIG_ENDIAN__
++	sbi r3, r9, 3 /* store byte r3 into return value */
++#else
++	sbi r3, r9, 0 /* store byte r3 into return value */
++#endif
++	bri ffi_call_SYSV_end
++
++ffi_call_SYSV_end:
++	/* callee restores */
++	lwi r19, r1, 0 /* frame pointer */
++	lwi r20, r1, 4 /* PIC register */
++	lwi r21, r1, 8 /* PIC register */
++	lwi r22, r1, 12
++	lwi r23, r1, 16
++	addik r1, r1, 20
++
++	/* return from sub-routine (with delay slot) */
++	rtsd r15, 8
++	nop
++
++	.size ffi_call_SYSV, . - ffi_call_SYSV
++
++/* ------------------------------------------------------------------------- */
++
++	/*
++	 * args passed into this function, are passed down to the callee.
++	 * this function is the target of the closure trampoline, as such r12 is 
++	 * a pointer to the closure object.
++	 */
++	.text
++	.globl ffi_closure_SYSV
++	.type ffi_closure_SYSV, @function
++ffi_closure_SYSV:
++	/* push callee saves */
++	addik r11, r1, 28 /* save stack args start location (excluding regs/link) */
++	addik r1, r1, -12
++	swi r19, r1, 0 /* Frame Pointer */
++	swi r20, r1, 4 /* PIC register */
++	swi r21, r1, 8 /* PIC register */
++
++	/* store register args on stack */
++	addik r1, r1, -24
++	swi r5, r1, 0
++	swi r6, r1, 4
++	swi r7, r1, 8
++	swi r8, r1, 12
++	swi r9, r1, 16
++	swi r10, r1, 20
++
++	/* setup args */
++	addik r5, r1, 0 /* register_args */
++	addik r6, r11, 0 /* stack_args */
++	addik r7, r12, 0 /* closure object */
++	addik r1, r1, -8 /* allocate return value */
++	addik r8, r1, 0 /* void* rvalue */
++	addik r1, r1, -8 /* allocate for return type/size values */
++	addik r9, r1, 0 /* void* rtype */
++	addik r10, r1, 4 /* void* rsize */
++
++	/* call the wrap_call function */
++	addik r1, r1, -28 /* allocate args + link reg */
++	swi r15, r1, 0 /* store the link register in the frame */
++	brald r15, r3
++	nop /* branch has delay slot */
++	lwi r15, r1, 0
++	addik r1, r1, 28 /* restore the link register from the frame */
++
++ffi_closure_SYSV_prepare_return:
++	lwi r9, r1, 0 /* rtype */
++	lwi r10, r1, 4 /* rsize */
++	addik r1, r1, 8 /* de-allocate return info values */
++
++	/* Check if return type is actually a struct, store 4 bytes */
++	rsubi r11, r9, FFI_TYPE_STRUCT
++	beqi r11, ffi_closure_SYSV_store32
++
++	/* Return 8bit */
++	rsubi r11, r10, 1
++	beqi r11, ffi_closure_SYSV_store8
++
++	/* Return 16bit */
++	rsubi r11, r10, 2
++	beqi r11, ffi_closure_SYSV_store16
++
++	/* Return 32bit */
++	rsubi r11, r10, 4
++	beqi r11, ffi_closure_SYSV_store32
++
++	/* Return 64bit */
++	rsubi r11, r10, 8
++	beqi r11, ffi_closure_SYSV_store64
++
++	/* Didn't match anything */
++	bri ffi_closure_SYSV_end
++
++ffi_closure_SYSV_store64:
++	lwi r3, r1, 0 /* store word r3 into return value */
++	lwi r4, r1, 4 /* store word r4 into return value */
++	/* 64 bits == 2 words, no sign extend occurs */
++	bri ffi_closure_SYSV_end
++
++ffi_closure_SYSV_store32:
++	lwi r3, r1, 0 /* store word r3 into return value */
++	/* 32 bits == 1 word, no sign extend occurs */
++	bri ffi_closure_SYSV_end
++
++ffi_closure_SYSV_store16:
++#ifdef __BIG_ENDIAN__
++	lhui r3, r1, 2 /* store half-word r3 into return value */
++#else
++	lhui r3, r1, 0 /* store half-word r3 into return value */
++#endif
++	rsubi r11, r9, FFI_TYPE_SINT16
++	bnei r11, ffi_closure_SYSV_end
++	sext16 r3, r3 /* fix sign extend of sint8 */
++	bri ffi_closure_SYSV_end
++
++ffi_closure_SYSV_store8:
++#ifdef __BIG_ENDIAN__
++	lbui r3, r1, 3 /* store byte r3 into return value */
++#else
++	lbui r3, r1, 0 /* store byte r3 into return value */
++#endif
++	rsubi r11, r9, FFI_TYPE_SINT8
++	bnei r11, ffi_closure_SYSV_end
++	sext8 r3, r3 /* fix sign extend of sint8 */
++	bri ffi_closure_SYSV_end
++
++ffi_closure_SYSV_end:
++	addik r1, r1, 8 /* de-allocate return value */
++
++	/* de-allocate stored args */
++	addik r1, r1, 24
++
++	/* callee restores */
++	lwi r19, r1, 0 /* frame pointer */
++	lwi r20, r1, 4 /* PIC register */
++	lwi r21, r1, 8 /* PIC register */
++	addik r1, r1, 12
++
++	/* return from sub-routine (with delay slot) */
++	rtsd r15, 8
++	nop
++
++	.size ffi_closure_SYSV, . - ffi_closure_SYSV
+diff --git a/js/src/ctypes/libffi/src/mips/ffi.c b/js/src/ctypes/libffi/src/mips/ffi.c
+--- a/js/src/ctypes/libffi/src/mips/ffi.c
++++ b/js/src/ctypes/libffi/src/mips/ffi.c
+@@ -1,11 +1,12 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 1996, 2007, 2008  Red Hat, Inc.
+-           Copyright (c) 2008       David Daney
++   ffi.c - Copyright (c) 2011  Anthony Green
++           Copyright (c) 2008  David Daney
++           Copyright (c) 1996, 2007, 2008, 2011  Red Hat, Inc.
+    
+    MIPS Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -164,17 +165,24 @@ static void ffi_prep_args(char *stack,
+ 		*(ffi_arg *)argp = *(UINT16 *)(* p_argv);
+ 		break;
+ 		  
+ 	      case FFI_TYPE_SINT32:
+ 		*(ffi_arg *)argp = *(SINT32 *)(* p_argv);
+ 		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.  */
+ 	      case FFI_TYPE_FLOAT:
+ 		*(float *) argp = *(float *)(* p_argv);
+ 		break;
+ 
+ 	      /* Handle structures.  */
+@@ -661,20 +669,29 @@ ffi_prep_closure_loc (ffi_closure *closu
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   unsigned int *tramp = (unsigned int *) &closure->tramp[0];
+   void * fn;
+   char *clear_location = (char *) codeloc;
+ 
+ #if defined(FFI_MIPS_O32)
+-  FFI_ASSERT(cif->abi == FFI_O32 || cif->abi == FFI_O32_SOFT_FLOAT);
++  if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT)
++    return FFI_BAD_ABI;
+   fn = ffi_closure_O32;
+-#else /* FFI_MIPS_N32 */
+-  FFI_ASSERT(cif->abi == FFI_N32 || cif->abi == FFI_N64);
++#else
++#if _MIPS_SIM ==_ABIN32
++  if (cif->abi != FFI_N32
++      && cif->abi != FFI_N32_SOFT_FLOAT)
++    return FFI_BAD_ABI;
++#else
++  if (cif->abi != FFI_N64
++      && cif->abi != FFI_N64_SOFT_FLOAT)
++    return FFI_BAD_ABI;
++#endif
+   fn = ffi_closure_N32;
+ #endif /* FFI_MIPS_O32 */
+ 
+ #if defined(FFI_MIPS_O32) || (_MIPS_SIM ==_ABIN32)
+   /* lui  $25,high(fn) */
+   tramp[0] = 0x3c190000 | ((unsigned)fn >> 16);
+   /* ori  $25,low(fn)  */
+   tramp[1] = 0x37390000 | ((unsigned)fn & 0xffff);
+diff --git a/js/src/ctypes/libffi/src/mips/ffitarget.h b/js/src/ctypes/libffi/src/mips/ffitarget.h
+--- a/js/src/ctypes/libffi/src/mips/ffitarget.h
++++ b/js/src/ctypes/libffi/src/mips/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for MIPS.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,41 +23,53 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #ifdef linux
+ # include <asm/sgidefs.h>
++#elif defined(__rtems__)
++/*
++ * Subprogram calling convention - copied from sgidefs.h
++ */
++#define _MIPS_SIM_ABI32		1
++#define _MIPS_SIM_NABI32	2
++#define _MIPS_SIM_ABI64		3
+ #elif !defined(__OpenBSD__)
+ # include <sgidefs.h>
+ #endif
++
+ #  ifndef _ABIN32
+ #    define _ABIN32 _MIPS_SIM_NABI32
+ #  endif
+ #  ifndef _ABI64
+ #    define _ABI64 _MIPS_SIM_ABI64
+ #  endif
+ #  ifndef _ABIO32
+ #    define _ABIO32 _MIPS_SIM_ABI32
+ #  endif
+ 
+ #if !defined(_MIPS_SIM)
+--- something is very wrong --
++# error -- something is very wrong --
+ #else
+ #  if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64))
+ #    define FFI_MIPS_N32
+ #  else
+ #    if (_MIPS_SIM==_ABIO32 && defined(_ABIO32))
+ #      define FFI_MIPS_O32
+ #    else
+--- this is an unsupported platform --
++#     error -- this is an unsupported platform --
+ #    endif
+ #  endif
+ #endif
+ 
+ #ifdef FFI_MIPS_O32
+ /* O32 stack frames have 32bit integer args */
+ #  define FFI_SIZEOF_ARG    4
+ #else
+diff --git a/js/src/ctypes/libffi/src/mips/n32.S b/js/src/ctypes/libffi/src/mips/n32.S
+--- a/js/src/ctypes/libffi/src/mips/n32.S
++++ b/js/src/ctypes/libffi/src/mips/n32.S
+@@ -38,16 +38,17 @@
+ #define raddr    a4
+ #define fn       a5
+ 
+ #define SIZEOF_FRAME	( 8 * FFI_SIZEOF_ARG )
+ 
+ #ifdef __GNUC__
+ 	.abicalls
+ #endif
++	.set mips4
+ 	.text
+ 	.align	2
+ 	.globl	ffi_call_N32
+ 	.ent	ffi_call_N32
+ ffi_call_N32:	
+ .LFB3:
+ 	.frame	$fp, SIZEOF_FRAME, ra
+ 	.mask	0xc0000000,-FFI_SIZEOF_ARG
+@@ -102,111 +103,95 @@ sixteen:
+ 
+ 	ADDU	t9, t9, t8
+ 	
+ loadregs:	
+ 
+ 	REG_L	t6, 3*FFI_SIZEOF_ARG($fp)  # load the flags word into t6.
+ 
+ 	and	t4, t6, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg1_floatp
+ 	REG_L	a0, 0*FFI_SIZEOF_ARG(t9)
+-	b	arg1_next
+-arg1_floatp:	
++	beqz	t4, arg1_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg1_doublep
+ 	l.s	$f12, 0*FFI_SIZEOF_ARG(t9)
+ 	b	arg1_next
+ arg1_doublep:	
+ 	l.d	$f12, 0*FFI_SIZEOF_ARG(t9)
+ arg1_next:	
+ 	
+ 	SRL	t4, t6, 1*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg2_floatp
+ 	REG_L	a1, 1*FFI_SIZEOF_ARG(t9)
+-	b	arg2_next
+-arg2_floatp:
++	beqz	t4, arg2_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg2_doublep
+ 	l.s	$f13, 1*FFI_SIZEOF_ARG(t9)	
+ 	b	arg2_next
+ arg2_doublep:	
+ 	l.d	$f13, 1*FFI_SIZEOF_ARG(t9)	
+ arg2_next:	
+ 	
+ 	SRL	t4, t6, 2*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg3_floatp
+ 	REG_L	a2, 2*FFI_SIZEOF_ARG(t9)
+-	b	arg3_next
+-arg3_floatp:
++	beqz	t4, arg3_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg3_doublep
+ 	l.s	$f14, 2*FFI_SIZEOF_ARG(t9)	
+ 	b	arg3_next
+ arg3_doublep:	
+ 	l.d	$f14, 2*FFI_SIZEOF_ARG(t9)	
+ arg3_next:	
+ 	
+ 	SRL	t4, t6, 3*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg4_floatp
+ 	REG_L	a3, 3*FFI_SIZEOF_ARG(t9)
+-	b	arg4_next
+-arg4_floatp:
++	beqz	t4, arg4_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg4_doublep
+ 	l.s	$f15, 3*FFI_SIZEOF_ARG(t9)	
+ 	b	arg4_next
+ arg4_doublep:	
+ 	l.d	$f15, 3*FFI_SIZEOF_ARG(t9)	
+ arg4_next:	
+ 	
+ 	SRL	t4, t6, 4*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg5_floatp
+ 	REG_L	a4, 4*FFI_SIZEOF_ARG(t9)
+-	b	arg5_next
+-arg5_floatp:
++	beqz	t4, arg5_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg5_doublep
+ 	l.s	$f16, 4*FFI_SIZEOF_ARG(t9)	
+ 	b	arg5_next
+ arg5_doublep:	
+ 	l.d	$f16, 4*FFI_SIZEOF_ARG(t9)	
+ arg5_next:	
+ 	
+ 	SRL	t4, t6, 5*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg6_floatp
+ 	REG_L	a5, 5*FFI_SIZEOF_ARG(t9)
+-	b	arg6_next
+-arg6_floatp:
++	beqz	t4, arg6_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg6_doublep
+ 	l.s	$f17, 5*FFI_SIZEOF_ARG(t9)	
+ 	b	arg6_next
+ arg6_doublep:	
+ 	l.d	$f17, 5*FFI_SIZEOF_ARG(t9)	
+ arg6_next:	
+ 	
+ 	SRL	t4, t6, 6*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg7_floatp
+ 	REG_L	a6, 6*FFI_SIZEOF_ARG(t9)
+-	b	arg7_next
+-arg7_floatp:
++	beqz	t4, arg7_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg7_doublep
+ 	l.s	$f18, 6*FFI_SIZEOF_ARG(t9)	
+ 	b	arg7_next
+ arg7_doublep:	
+ 	l.d	$f18, 6*FFI_SIZEOF_ARG(t9)	
+ arg7_next:	
+ 	
+ 	SRL	t4, t6, 7*FFI_FLAG_BITS
+ 	and	t4, ((1<<FFI_FLAG_BITS)-1)
+-	bnez	t4, arg8_floatp
+ 	REG_L	a7, 7*FFI_SIZEOF_ARG(t9)
+-	b	arg8_next
+-arg8_floatp:
++	beqz	t4, arg8_next
+ 	bne	t4, FFI_TYPE_FLOAT, arg8_doublep
+  	l.s	$f19, 7*FFI_SIZEOF_ARG(t9)	
+ 	b	arg8_next
+ arg8_doublep:	
+  	l.d	$f19, 7*FFI_SIZEOF_ARG(t9)	
+ arg8_next:	
+ 
+ callit:		
+diff --git a/js/src/ctypes/libffi/src/moxie/eabi.S b/js/src/ctypes/libffi/src/moxie/eabi.S
+--- a/js/src/ctypes/libffi/src/moxie/eabi.S
++++ b/js/src/ctypes/libffi/src/moxie/eabi.S
+@@ -1,12 +1,12 @@
+ /* -----------------------------------------------------------------------
+-   eabi.S - Copyright (c) 2004  Anthony Green
++   eabi.S - Copyright (c) 2012, 2013  Anthony Green
+    
+-   FR-V Assembly glue.
++   Moxie Assembly glue.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+@@ -29,100 +29,73 @@
+ 
+ 	.globl ffi_prep_args_EABI
+ 
+ 	.text
+ 	.p2align 4
+ 	.globl ffi_call_EABI
+ 	.type ffi_call_EABI, @function
+ 
+-	# gr8 :   ffi_prep_args
+-	# gr9 :   &ecif
+-	# gr10:   cif->bytes
+-	# gr11:   fig->flags
+-	# gr12:   ecif.rvalue
+-	# gr13:   fn
++	# $r0 :   ffi_prep_args
++	# $r1 :   &ecif
++	# $r2 :   cif->bytes
++	# $r3 :   fig->flags
++	# $r4 :   ecif.rvalue
++	# $r5 :   fn
+ 	
+-ffi_call_EABI:	
+-	addi	sp, #-80, sp
+-	sti	fp, @(sp, #24)
+-	addi	sp, #24, fp
+-	movsg	lr, gr5
++ffi_call_EABI:
++	push	$sp, $r6
++	push	$sp, $r7
++	push	$sp, $r8
++	dec	$sp, 24
+ 
+-	/* Make room for the new arguments.  */
+-	/* subi	sp, fp, gr10 */
+-	
+-	/* Store return address and incoming args on stack.  */
+-	sti	gr5, @(fp, #8)
+-	sti	gr8, @(fp, #-4)
+-	sti	gr9, @(fp, #-8)
+-	sti	gr10, @(fp, #-12)
+-	sti	gr11, @(fp, #-16)
+-	sti	gr12, @(fp, #-20)
+-	sti	gr13, @(fp, #-24)
+-
+-	sub     sp, gr10, sp
++	/* Store incoming args on stack.  */
++	sto.l	0($sp), $r0 /* ffi_prep_args */
++	sto.l	4($sp), $r1 /* ecif */
++	sto.l	8($sp), $r2 /* bytes */
++	sto.l	12($sp), $r3 /* flags */
++	sto.l	16($sp), $r4 /* &rvalue */
++	sto.l	20($sp), $r5 /* fn */
+ 	
+ 	/* Call ffi_prep_args.  */
+-	ldi	@(fp, #-4), gr4
+-	addi	sp, #0, gr8
+-	ldi	@(fp, #-8), gr9
+-#ifdef __FRV_FDPIC__
+-	ldd	@(gr4, gr0), gr14
+-	calll	@(gr14, gr0)
+-#else
+-	calll	@(gr4, gr0)
+-#endif	
++	mov 	$r6, $r4 /* Save result buffer */
++	mov	$r7, $r5 /* Save the target fn */
++	mov	$r8, $r3 /* Save the flags */
++	sub.l	$sp, $r2 /* Allocate stack space */
++	mov	$r0, $sp /* We can stomp over $r0 */
++	/* $r1 is already set up */
++	jsra 	ffi_prep_args
+ 
+-	/* ffi_prep_args returns the new stack pointer.  */
+-	mov	gr8, gr4
+-		
+-	ldi	@(sp, #0), gr8
+-	ldi	@(sp, #4), gr9
+-	ldi	@(sp, #8), gr10
+-	ldi	@(sp, #12), gr11
+-	ldi	@(sp, #16), gr12
+-	ldi	@(sp, #20), gr13
+-
+-	/* Always copy the return value pointer into the hidden
+-	   parameter register.  This is only strictly necessary
+-	   when we're returning an aggregate type, but it doesn't
+-	   hurt to do this all the time, and it saves a branch.  */
+-	ldi	@(fp, #-20), gr3
+-
+-	/* Use the ffi_prep_args return value for the new sp.  */
+-	mov	gr4, sp
++	/* Load register arguments.  */
++	ldo.l	$r0, 0($sp)
++	ldo.l	$r1, 4($sp)
++	ldo.l	$r2, 8($sp)
++	ldo.l	$r3, 12($sp)
++	ldo.l	$r4, 16($sp)
++	ldo.l	$r5, 20($sp)
+ 	
+ 	/* Call the target function.  */
+-	ldi	@(fp, -24), gr4
+-#ifdef __FRV_FDPIC__
+-	ldd	@(gr4, gr0), gr14
+-	calll	@(gr14, gr0)
+-#else
+-	calll	@(gr4, gr0)
+-#endif	
++	jsr	$r7
+ 
+-	/* Store the result. */
+-	ldi	@(fp, #-16), gr10  /* fig->flags */
+-	ldi	@(fp, #-20), gr4   /* ecif.rvalue */
++	ldi.l	$r7, 0xffffffff
++	cmp	$r8, $r7
++	beq	retstruct
+ 
+-	/* Is the return value stored in two registers?  */
+-	cmpi	gr10, #8, icc0
+-	bne	icc0, 0, .L2
+-	/*   Yes, save them.  */
+-	sti	gr8, @(gr4, #0)
+-	sti	gr9, @(gr4, #4)
+-	bra	.L3
+-.L2:
+-	/* Is the return value a structure?  */
+-	cmpi	gr10, #-1, icc0
+-	beq	icc0, 0, .L3
+-	/*   No, save a 4 byte return value.  */
+-	sti	gr8, @(gr4, #0)
+-.L3:	
++	ldi.l	$r7, 4
++	cmp	$r8, $r7
++	bgt	ret2reg
+ 
+-	/* Restore the stack, and return.  */
+-	ldi	@(fp, 8), gr5
+-	ld	@(fp, gr0), fp
+-	addi	sp,#80,sp
+-	jmpl	@(gr5,gr0)
++	st.l	($r6), $r0
++	jmpa	retdone
++
++ret2reg:	
++	st.l	($r6), $r0
++	sto.l	4($r6), $r1
++
++retstruct:
++retdone:	
++	/* Return.  */
++	ldo.l	$r6, -4($fp)
++	ldo.l	$r7, -8($fp)
++	ldo.l	$r8, -12($fp)
++	ret
+ 	.size ffi_call_EABI, .-ffi_call_EABI
+ 	
+diff --git a/js/src/ctypes/libffi/src/moxie/ffi.c b/js/src/ctypes/libffi/src/moxie/ffi.c
+--- a/js/src/ctypes/libffi/src/moxie/ffi.c
++++ b/js/src/ctypes/libffi/src/moxie/ffi.c
+@@ -1,10 +1,10 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (C) 2009  Anthony Green
++   ffi.c - Copyright (C) 2012, 2013  Anthony Green
+    
+    Moxie Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -38,40 +38,35 @@ void *ffi_prep_args(char *stack, extende
+   register void **p_argv;
+   register char *argp;
+   register ffi_type **p_arg;
+   register int count = 0;
+ 
+   p_argv = ecif->avalue;
+   argp = stack;
+ 
++  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT)
++    {
++      *(void **) argp = ecif->rvalue;
++      argp += 4;
++    }
++
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        (i != 0);
+        i--, p_arg++)
+     {
+       size_t z;
+       
+       z = (*p_arg)->size;
+ 
+       if ((*p_arg)->type == FFI_TYPE_STRUCT)
+ 	{
+ 	  z = sizeof(void*);
+ 	  *(void **) argp = *p_argv;
+ 	} 
+-      /*      if ((*p_arg)->type == FFI_TYPE_FLOAT)
+-	{
+-	  if (count > 24)
+-	    {
+-	      // This is going on the stack.  Turn it into a double.  
+-	      *(double *) argp = (double) *(float*)(* p_argv);
+-	      z = sizeof(double);
+-	    }
+-	  else
+-	    *(void **) argp = *(void **)(* p_argv);
+-	}  */
+       else if (z < sizeof(int))
+ 	{
+ 	  z = sizeof(int);
+ 	  switch ((*p_arg)->type)
+ 	    {
+ 	    case FFI_TYPE_SINT8:
+ 	      *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv);
+ 	      break;
+@@ -142,135 +137,136 @@ void ffi_call(ffi_cif *cif,
+ 
+   if ((rvalue == NULL) && 
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+       ecif.rvalue = alloca(cif->rtype->size);
+     }
+   else
+     ecif.rvalue = rvalue;
+-    
+-  
++
+   switch (cif->abi) 
+     {
+     case FFI_EABI:
+       ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, 
+ 		    cif->flags, ecif.rvalue, fn);
+       break;
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
+ 
+ void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3,
+ 		       unsigned arg4, unsigned arg5, unsigned arg6)
+ {
+   /* This function is called by a trampoline.  The trampoline stows a
+-     pointer to the ffi_closure object in gr7.  We must save this
++     pointer to the ffi_closure object in $r7.  We must save this
+      pointer in a place that will persist while we do our work.  */
+-  register ffi_closure *creg __asm__ ("gr7");
++  register ffi_closure *creg __asm__ ("$r12");
+   ffi_closure *closure = creg;
+ 
+   /* Arguments that don't fit in registers are found on the stack
+      at a fixed offset above the current frame pointer.  */
+-  register char *frame_pointer __asm__ ("fp");
+-  char *stack_args = frame_pointer + 16;
++  register char *frame_pointer __asm__ ("$fp");
++
++  /* Pointer to a struct return value.  */
++  void *struct_rvalue = (void *) arg1;
++
++  /* 6 words reserved for register args + 3 words from jsr */
++  char *stack_args = frame_pointer + 9*4; 
+ 
+   /* Lay the register arguments down in a continuous chunk of memory.  */
+   unsigned register_args[6] =
+     { arg1, arg2, arg3, arg4, arg5, arg6 };
++  char *register_args_ptr = (char *) register_args;
+ 
+   ffi_cif *cif = closure->cif;
+   ffi_type **arg_types = cif->arg_types;
+   void **avalue = alloca (cif->nargs * sizeof(void *));
+   char *ptr = (char *) register_args;
+   int i;
+ 
++  /* preserve struct type return pointer passing */
++  if ((cif->rtype != NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) {
++    ptr += 4;
++    register_args_ptr = (char *)&register_args[1];
++  }
++
+   /* Find the address of each argument.  */
+   for (i = 0; i < cif->nargs; i++)
+     {
+       switch (arg_types[i]->type)
+ 	{
+ 	case FFI_TYPE_SINT8:
+ 	case FFI_TYPE_UINT8:
+ 	  avalue[i] = ptr + 3;
+ 	  break;
+ 	case FFI_TYPE_SINT16:
+ 	case FFI_TYPE_UINT16:
+ 	  avalue[i] = ptr + 2;
+ 	  break;
+ 	case FFI_TYPE_SINT32:
+ 	case FFI_TYPE_UINT32:
+ 	case FFI_TYPE_FLOAT:
++	case FFI_TYPE_POINTER:
+ 	  avalue[i] = ptr;
+ 	  break;
+ 	case FFI_TYPE_STRUCT:
+ 	  avalue[i] = *(void**)ptr;
+ 	  break;
+ 	default:
+ 	  /* This is an 8-byte value.  */
+ 	  avalue[i] = ptr;
+ 	  ptr += 4;
+ 	  break;
+ 	}
+       ptr += 4;
+ 
+       /* If we've handled more arguments than fit in registers,
+ 	 start looking at the those passed on the stack.  */
+-      if (ptr == ((char *)register_args + (6*4)))
++      if (ptr == &register_args[6])
+ 	ptr = stack_args;
+     }
+ 
+   /* Invoke the closure.  */
+-  if (cif->rtype->type == FFI_TYPE_STRUCT)
++  if (cif->rtype && (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /* The caller allocates space for the return structure, and
+-       passes a pointer to this space in gr3.  Use this value directly
+-       as the return value.  */
+-      register void *return_struct_ptr __asm__("gr3");
+-      (closure->fun) (cif, return_struct_ptr, avalue, closure->user_data);
++      (closure->fun) (cif, struct_rvalue, avalue, closure->user_data);
+     }
+   else
+     {
+       /* Allocate space for the return value and call the function.  */
+       long long rvalue;
+       (closure->fun) (cif, &rvalue, avalue, closure->user_data);
+-
+-      /* Functions return 4-byte or smaller results in gr8.  8-byte
+-	 values also use gr9.  We fill the both, even for small return
+-	 values, just to avoid a branch.  */ 
+-      asm ("ldi  @(%0, #0), gr8" : : "r" (&rvalue));
+-      asm ("ldi  @(%0, #0), gr9" : : "r" (&((int *) &rvalue)[1]));
++      asm ("mov $r12, %0\n ld.l $r0, ($r12)\n ldo.l $r1, 4($r12)" : : "r" (&rvalue));
+     }
+ }
+ 
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*, void*, void**, void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+-  unsigned int *tramp = (unsigned int *) &closure->tramp[0];
++  unsigned short *tramp = (unsigned short *) &closure->tramp[0];
+   unsigned long fn = (long) ffi_closure_eabi;
+   unsigned long cls = (long) codeloc;
+-  int i;
++
++  if (cif->abi != FFI_EABI)
++    return FFI_BAD_ABI;
+ 
+   fn = (unsigned long) ffi_closure_eabi;
+ 
+-  tramp[0] = 0x8cfc0000 + (fn  & 0xffff); /* setlos lo(fn), gr6    */
+-  tramp[1] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7   */
+-  tramp[2] = 0x8cf80000 + (fn  >> 16);	  /* sethi hi(fn), gr6     */
+-  tramp[3] = 0x8ef80000 + (cls >> 16);    /* sethi hi(cls), gr7    */
+-  tramp[4] = 0x80300006;                  /* jmpl @(gr0, gr6)      */
++  tramp[0] = 0x01e0; /* ldi.l $r7, .... */
++  tramp[1] = cls >> 16;
++  tramp[2] = cls & 0xffff;
++  tramp[3] = 0x1a00; /* jmpa .... */
++  tramp[4] = fn >> 16;
++  tramp[5] = fn & 0xffff;
+ 
+   closure->cif = cif;
+   closure->fun = fun;
+   closure->user_data = user_data;
+ 
+-  /* Cache flushing.  */
+-  for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++)
+-    __asm__ volatile ("dcf @(%0,%1)\n\tici @(%2,%1)" :: "r" (tramp), "r" (i),
+-		      "r" (codeloc));
+-
+   return FFI_OK;
+ }
+diff --git a/js/src/ctypes/libffi/src/moxie/ffitarget.h b/js/src/ctypes/libffi/src/moxie/ffitarget.h
+--- a/js/src/ctypes/libffi/src/moxie/ffitarget.h
++++ b/js/src/ctypes/libffi/src/moxie/ffitarget.h
+@@ -1,10 +1,10 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 2009 Anthony Green
++   ffitarget.h - Copyright (c) 2012, 2013  Anthony Green
+    Target configuration macros for Moxie
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -31,22 +31,22 @@
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+   FFI_EABI,
+-  FFI_LAST_ABI,
+-  FFI_DEFAULT_ABI = FFI_EABI
++  FFI_DEFAULT_ABI = FFI_EABI,
++  FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
+ } ffi_abi;
+ #endif
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+-#define FFI_CLOSURES 0
++#define FFI_CLOSURES 1
+ #define FFI_NATIVE_RAW_API 0
+ 
+-/* Trampolines are 5 4-byte instructions long.  */
+-#define FFI_TRAMPOLINE_SIZE (5*4)
++/* Trampolines are 12-bytes long.  See ffi_prep_closure_loc.  */
++#define FFI_TRAMPOLINE_SIZE (12)
+ 
+ #endif
+diff --git a/js/src/ctypes/libffi/src/nios2/ffi.c b/js/src/ctypes/libffi/src/nios2/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/nios2/ffi.c
+@@ -0,0 +1,304 @@
++/* libffi support for Altera Nios II.
++
++   Copyright (c) 2013 Mentor Graphics.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++   
++   The above copyright notice and this permission notice shall be
++   included in all copies or substantial portions of the Software.
++   
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++
++/* The Nios II Processor Reference Handbook defines the procedure call
++   ABI as follows.
++
++   Arguments are passed as if a structure containing the types of
++   the arguments were constructed.  The first 16 bytes are passed in r4
++   through r7, the remainder on the stack.  The first 16 bytes of a function
++   taking variable arguments are passed in r4-r7 in the same way.
++
++   Return values of types up to 8 bytes are returned in r2 and r3.  For
++   return values greater than 8 bytes, the caller must allocate memory for
++   the result and pass the address as if it were argument 0.  
++
++   While this isn't specified explicitly in the ABI documentation, GCC
++   promotes integral arguments smaller than int size to 32 bits.
++
++   Also of note, the ABI specifies that all structure objects are
++   aligned to 32 bits even if all their fields have a smaller natural
++   alignment.  See FFI_AGGREGATE_ALIGNMENT.  */
++
++
++/* Declare the assembly language hooks.  */
++
++extern UINT64 ffi_call_sysv (void (*) (char *, extended_cif *),
++			     extended_cif *,
++			     unsigned, 
++			     void (*fn) (void));
++extern void ffi_closure_sysv (void);
++
++/* Perform machine-dependent cif processing.  */
++
++ffi_status ffi_prep_cif_machdep (ffi_cif *cif)
++{
++  /* We always want at least 16 bytes in the parameter block since it
++     simplifies the low-level call function.  Also round the parameter
++     block size up to a multiple of 4 bytes to preserve
++     32-bit alignment of the stack pointer.  */
++  if (cif->bytes < 16)
++    cif->bytes = 16;
++  else
++    cif->bytes = (cif->bytes + 3) & ~3;
++
++  return FFI_OK;
++}
++
++
++/* ffi_prep_args is called by the assembly routine to transfer arguments
++   to the stack using the pointers in the ecif array.
++   Note that the stack buffer is big enough to fit all the arguments,
++   but the first 16 bytes will be copied to registers for the actual
++   call.  */
++
++void ffi_prep_args (char *stack, extended_cif *ecif)
++{
++  char *argp = stack;
++  unsigned int i;
++
++  /* The implicit return value pointer is passed as if it were a hidden
++     first argument.  */
++  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
++      && ecif->cif->rtype->size > 8)
++    {
++      (*(void **) argp) = ecif->rvalue;
++      argp += 4;
++    }
++
++  for (i = 0; i < ecif->cif->nargs; i++)
++    {
++      void *avalue = ecif->avalue[i];
++      ffi_type *atype = ecif->cif->arg_types[i];
++      size_t size = atype->size;
++      size_t alignment = atype->alignment;
++
++      /* Align argp as appropriate for the argument type.  */
++      if ((alignment - 1) & (unsigned) argp)
++	argp = (char *) ALIGN (argp, alignment);
++
++      /* Copy the argument, promoting integral types smaller than a
++	 word to word size.  */
++      if (size < sizeof (int))
++	{
++	  size = sizeof (int);
++	  switch (atype->type)
++	    {
++	    case FFI_TYPE_SINT8:
++	      *(signed int *) argp = (signed int) *(SINT8 *) avalue;
++	      break;
++		  
++	    case FFI_TYPE_UINT8:
++	      *(unsigned int *) argp = (unsigned int) *(UINT8 *) avalue;
++	      break;
++		  
++	    case FFI_TYPE_SINT16:
++	      *(signed int *) argp = (signed int) *(SINT16 *) avalue;
++	      break;
++		  
++	    case FFI_TYPE_UINT16:
++	      *(unsigned int *) argp = (unsigned int) *(UINT16 *) avalue;
++	      break;
++
++	    case FFI_TYPE_STRUCT:
++	      memcpy (argp, avalue, atype->size);
++	      break;
++
++	    default:
++	      FFI_ASSERT(0);
++	    }
++	}
++      else if (size == sizeof (int))
++	*(unsigned int *) argp = (unsigned int) *(UINT32 *) avalue;
++      else
++	memcpy (argp, avalue, size);
++      argp += size;
++    }
++}
++
++
++/* Call FN using the prepared CIF.  RVALUE points to space allocated by
++   the caller for the return value, and AVALUE is an array of argument
++   pointers.  */
++
++void ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue)
++{
++
++  extended_cif ecif;
++  UINT64 result;
++
++  /* If bigret is true, this is the case where a return value of larger
++     than 8 bytes is handled by being passed by reference as an implicit
++     argument.  */
++  int bigret = (cif->rtype->type == FFI_TYPE_STRUCT
++		&& cif->rtype->size > 8);
++
++  ecif.cif = cif;
++  ecif.avalue = avalue;
++
++  /* Allocate space for return value if this is the pass-by-reference case
++     and the caller did not provide a buffer.  */
++  if (rvalue == NULL && bigret)
++    ecif.rvalue = alloca (cif->rtype->size);
++  else
++    ecif.rvalue = rvalue;
++
++  result = ffi_call_sysv (ffi_prep_args, &ecif, cif->bytes, fn);
++
++  /* Now result contains the 64 bit contents returned from fn in
++     r2 and r3.  Copy the value of the appropriate size to the user-provided
++     rvalue buffer.  */
++  if (rvalue && !bigret)
++    switch (cif->rtype->size)
++      {
++      case 1:
++	*(UINT8 *)rvalue = (UINT8) result;
++	break;
++      case 2:
++	*(UINT16 *)rvalue = (UINT16) result;
++	break;
++      case 4:
++	*(UINT32 *)rvalue = (UINT32) result;
++	break;
++      case 8:
++	*(UINT64 *)rvalue = (UINT64) result;
++	break;
++      default:
++	memcpy (rvalue, (void *)&result, cif->rtype->size);
++	break;
++      }
++}
++
++/* This function is invoked from the closure trampoline to invoke
++   CLOSURE with argument block ARGS.  Parse ARGS according to
++   CLOSURE->cfi and invoke CLOSURE->fun.  */
++
++static UINT64
++ffi_closure_helper (unsigned char *args,
++		    ffi_closure *closure)
++{
++  ffi_cif *cif = closure->cif;
++  unsigned char *argp = args;
++  void **parsed_args = alloca (cif->nargs * sizeof (void *));
++  UINT64 result;
++  void *retptr;
++  unsigned int i;
++
++  /* First figure out what to do about the return type.  If this is the
++     big-structure-return case, the first arg is the hidden return buffer
++     allocated by the caller.  */
++  if (cif->rtype->type == FFI_TYPE_STRUCT
++      && cif->rtype->size > 8)
++    {
++      retptr = *((void **) argp);
++      argp += 4;
++    }
++  else
++    retptr = (void *) &result;
++
++  /* Fill in the array of argument pointers.  */
++  for (i = 0; i < cif->nargs; i++)
++    {
++      size_t size = cif->arg_types[i]->size;
++      size_t alignment = cif->arg_types[i]->alignment;
++
++      /* Align argp as appropriate for the argument type.  */
++      if ((alignment - 1) & (unsigned) argp)
++	argp = (char *) ALIGN (argp, alignment);
++
++      /* Arguments smaller than an int are promoted to int.  */
++      if (size < sizeof (int))
++	size = sizeof (int);
++
++      /* Store the pointer.  */
++      parsed_args[i] = argp;
++      argp += size;
++    }
++
++  /* Call the user-supplied function.  */
++  (closure->fun) (cif, retptr, parsed_args, closure->user_data);
++  return result;
++}
++
++
++/* Initialize CLOSURE with a trampoline to call FUN with
++   CIF and USER_DATA.  */
++ffi_status
++ffi_prep_closure_loc (ffi_closure* closure,
++		      ffi_cif* cif,
++		      void (*fun) (ffi_cif*, void*, void**, void*),
++		      void *user_data,
++		      void *codeloc)
++{
++  unsigned int *tramp = (unsigned int *) &closure->tramp[0];
++  int i;
++
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
++
++  /* The trampoline looks like:
++       movhi r8, %hi(ffi_closure_sysv)
++       ori r8, r8, %lo(ffi_closure_sysv)
++       movhi r9, %hi(ffi_closure_helper)
++       ori r0, r9, %lo(ffi_closure_helper)
++       movhi r10, %hi(closure)
++       ori r10, r10, %lo(closure)
++       jmp r8
++     and then ffi_closure_sysv retrieves the closure pointer out of r10
++     in addition to the arguments passed in the normal way for the call,
++     and invokes ffi_closure_helper.  We encode the pointer to
++     ffi_closure_helper in the trampoline because making a PIC call
++     to it in ffi_closure_sysv would be messy (it would have to indirect
++     through the GOT).  */
++
++#define HI(x) ((((unsigned int) (x)) >> 16) & 0xffff)
++#define LO(x) (((unsigned int) (x)) & 0xffff)
++  tramp[0] = (0 << 27) | (8 << 22) | (HI (ffi_closure_sysv) << 6) | 0x34;
++  tramp[1] = (8 << 27) | (8 << 22) | (LO (ffi_closure_sysv) << 6) | 0x14;
++  tramp[2] = (0 << 27) | (9 << 22) | (HI (ffi_closure_helper) << 6) | 0x34;
++  tramp[3] = (9 << 27) | (9 << 22) | (LO (ffi_closure_helper) << 6) | 0x14;
++  tramp[4] = (0 << 27) | (10 << 22) | (HI (closure) << 6) | 0x34;
++  tramp[5] = (10 << 27) | (10 << 22) | (LO (closure) << 6) | 0x14;
++  tramp[6] = (8 << 27) | (0x0d << 11) | 0x3a;
++#undef HI
++#undef LO
++
++  /* Flush the caches.
++     See Example 9-4 in the Nios II Software Developer's Handbook.  */
++  for (i = 0; i < 7; i++)
++    asm volatile ("flushd 0(%0); flushi %0" :: "r"(tramp + i) : "memory");
++  asm volatile ("flushp" ::: "memory");
++
++  closure->cif = cif;
++  closure->fun = fun;
++  closure->user_data = user_data;
++
++  return FFI_OK;
++}
++
+diff --git a/js/src/ctypes/libffi/src/nios2/ffitarget.h b/js/src/ctypes/libffi/src/nios2/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/nios2/ffitarget.h
+@@ -0,0 +1,52 @@
++/* libffi target includes for Altera Nios II.
++
++   Copyright (c) 2013 Mentor Graphics.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++   
++   The above copyright notice and this permission notice shall be
++   included in all copies or substantial portions of the Software.
++   
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++#ifndef LIBFFI_ASM
++typedef unsigned long          ffi_arg;
++typedef signed long            ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_SYSV,
++  FFI_LAST_ABI,
++  FFI_DEFAULT_ABI = FFI_SYSV
++} ffi_abi;
++#endif
++
++/* Structures have a 4-byte alignment even if all the fields have lesser
++   alignment requirements.  */
++#define FFI_AGGREGATE_ALIGNMENT 4
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 28   /* 7 instructions */
++#define FFI_NATIVE_RAW_API 0
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/nios2/sysv.S b/js/src/ctypes/libffi/src/nios2/sysv.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/nios2/sysv.S
+@@ -0,0 +1,136 @@
++/* Low-level libffi support for Altera Nios II.
++
++   Copyright (c) 2013 Mentor Graphics.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++   
++   The above copyright notice and this permission notice shall be
++   included in all copies or substantial portions of the Software.
++   
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++/* This function is declared on the C side as 
++
++   extern UINT64 ffi_call_sysv (void (*arghook) (char *, extended_cif *),
++	  		        extended_cif *ecif,
++				unsigned nbytes, 
++				void (*fn) (void));
++	
++   On input, the arguments appear as
++	r4 = arghook
++	r5 = ecif
++	r6 = nbytes
++	r7 = fn
++*/
++
++	.section	.text
++	.align	2
++	.global	ffi_call_sysv
++	.type	ffi_call_sysv, @function
++
++ffi_call_sysv:
++	.cfi_startproc
++
++	/* Create the stack frame, saving r16 so we can use it locally.  */
++	addi	sp, sp, -12
++	.cfi_def_cfa_offset 12
++	stw	ra, 8(sp)
++	stw	fp, 4(sp)
++	stw	r16, 0(sp)
++	.cfi_offset 31, -4
++	.cfi_offset 28, -8
++	.cfi_offset 16, -12
++	mov	fp, sp
++	.cfi_def_cfa_register 28
++	mov	r16, r7
++
++	/* Adjust the stack pointer to create the argument buffer
++	   nbytes long.  */
++	sub	sp, sp, r6
++
++	/* Call the arghook function.  */
++	mov	r2, r4		/* fn */
++	mov	r4, sp		/* argbuffer */
++	callr	r2		/* r5 already contains ecif */
++
++	/* Pop off the first 16 bytes of the argument buffer on the stack,
++	   transferring the contents to the argument registers.  */
++	ldw	r4, 0(sp)
++	ldw	r5, 4(sp)
++	ldw	r6, 8(sp)
++	ldw	r7, 12(sp)
++	addi	sp, sp, 16
++
++	/* Call the user function, which leaves its result in r2 and r3.  */
++	callr	r16
++
++	/* Pop off the stack frame.  */
++	mov	sp, fp
++	ldw	ra, 8(sp)
++	ldw	fp, 4(sp)
++	ldw	r16, 0(sp)
++	addi	sp, sp, 12
++	ret
++	.cfi_endproc
++	.size	ffi_call_sysv, .-ffi_call_sysv
++
++
++/* Closure trampolines jump here after putting the C helper address
++   in r9 and the closure pointer in r10.  The user-supplied arguments
++   to the closure are in the normal places, in r4-r7 and on the
++   stack.  Push the register arguments on the stack too and then call the
++   C helper function to deal with them.  */
++   
++	.section	.text
++	.align	2
++	.global	ffi_closure_sysv
++	.type	ffi_closure_sysv, @function
++
++ffi_closure_sysv:
++	.cfi_startproc
++
++	/* Create the stack frame, pushing the register args on the stack
++	   just below the stack args.  This is the same trick illustrated
++	   in Figure 7-3 in the Nios II Processor Reference Handbook, used
++	   for variable arguments and structures passed by value.  */
++	addi	sp, sp, -20
++	.cfi_def_cfa_offset 20
++	stw	ra, 0(sp)
++	.cfi_offset 31, -20
++	stw	r4, 4(sp)
++	.cfi_offset 4, -16
++	stw	r5, 8(sp)
++	.cfi_offset 5, -12
++	stw	r6, 12(sp)
++	.cfi_offset 6, -8
++	stw	r7, 16(sp)
++	.cfi_offset 7, -4
++
++	/* Call the helper.
++	   r4 = pointer to arguments on stack
++	   r5 = closure pointer (loaded in r10 by the trampoline)
++	   r9 = address of helper function (loaded by trampoline) */
++	addi	r4, sp, 4
++	mov	r5, r10
++	callr	r9
++	
++	/* Pop the stack and return.  */
++	ldw	ra, 0(sp)
++	addi	sp, sp, 20
++	.cfi_def_cfa_offset -20
++	ret
++	.cfi_endproc
++	.size	ffi_closure_sysv, .-ffi_closure_sysv
++
+diff --git a/js/src/ctypes/libffi/src/pa/ffi.c b/js/src/ctypes/libffi/src/pa/ffi.c
+--- a/js/src/ctypes/libffi/src/pa/ffi.c
++++ b/js/src/ctypes/libffi/src/pa/ffi.c
+@@ -1,14 +1,16 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - (c) 2003-2004 Randolph Chung <tausq@debian.org>
++   ffi.c - (c) 2011 Anthony Green
+            (c) 2008 Red Hat, Inc.
+-
++	   (c) 2006 Free Software Foundation, Inc.
++           (c) 2003-2004 Randolph Chung <tausq@debian.org>
++           
+    HPPA Foreign Function Interface
+-   HP-UX PA ABI support (c) 2006 Free Software Foundation, Inc.
++   HP-UX PA ABI support 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+@@ -628,17 +630,18 @@ ffi_prep_closure_loc (ffi_closure* closu
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   UINT32 *tramp = (UINT32 *)(closure->tramp);
+ #ifdef PA_HPUX
+   UINT32 *tmp;
+ #endif
+ 
+-  FFI_ASSERT (cif->abi == FFI_PA32);
++  if (cif->abi != FFI_PA32)
++    return FFI_BAD_ABI;
+ 
+   /* Make a small trampoline that will branch to our
+      handler function. Use PC-relative addressing.  */
+ 
+ #ifdef PA_LINUX
+   tramp[0] = 0xeaa00000; /* b,l .+8,%r21        ; %r21 <- pc+8 */
+   tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21    ; mask priv bits */
+   tramp[2] = 0x4aa10028; /* ldw 20(%r21),%r1    ; load plabel */
+diff --git a/js/src/ctypes/libffi/src/pa/ffitarget.h b/js/src/ctypes/libffi/src/pa/ffitarget.h
+--- a/js/src/ctypes/libffi/src/pa/ffitarget.h
++++ b/js/src/ctypes/libffi/src/pa/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for hppa.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+diff --git a/js/src/ctypes/libffi/src/powerpc/aix.S b/js/src/ctypes/libffi/src/powerpc/aix.S
+--- a/js/src/ctypes/libffi/src/powerpc/aix.S
++++ b/js/src/ctypes/libffi/src/powerpc/aix.S
+@@ -1,10 +1,10 @@
+ /* -----------------------------------------------------------------------
+-   aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc.
++   aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
+    based on darwin.S by John Hornkvist
+ 
+    PowerPC Assembly glue.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+@@ -74,16 +74,18 @@
+ 	.set f15,15
+ 	.set f16,16
+ 	.set f17,17
+ 	.set f18,18
+ 	.set f19,19
+ 	.set f20,20
+ 	.set f21,21
+ 
++	.extern .ffi_prep_args
++
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+ #define JUMPTARGET(name) name
+ #define L(x) x
+ 	.file "aix.S"
+ 	.toc
+ 
+@@ -120,39 +122,40 @@ ffi_call_AIX:
+ 	mr	r31, r5	/* flags, */
+ 	mr	r30, r6	/* rvalue, */
+ 	mr	r29, r7	/* function address.  */
+ 	std	r2, 40(r1)
+ 
+ 	/* Call ffi_prep_args.  */
+ 	mr	r4, r1
+ 	bl	.ffi_prep_args
++	nop
+ 
+ 	/* Now do the call.  */
+ 	ld	r0, 0(r29)
+ 	ld	r2, 8(r29)
+ 	ld	r11, 16(r29)
+ 	/* Set up cr1 with bits 4-7 of the flags.  */
+ 	mtcrf	0x40, r31
+ 	mtctr	r0
+ 	/* Load all those argument registers.  */
+-	// We have set up a nice stack frame, just load it into registers.
++	/* We have set up a nice stack frame, just load it into registers. */
+ 	ld	r3, 40+(1*8)(r1)
+ 	ld	r4, 40+(2*8)(r1)
+ 	ld	r5, 40+(3*8)(r1)
+ 	ld	r6, 40+(4*8)(r1)
+ 	nop
+ 	ld	r7, 40+(5*8)(r1)
+ 	ld	r8, 40+(6*8)(r1)
+ 	ld	r9, 40+(7*8)(r1)
+ 	ld	r10,40+(8*8)(r1)
+ 
+ L1:
+ 	/* Load all the FP registers.  */
+-	bf	6,L2 // 2f + 0x18
++	bf	6,L2 /* 2f + 0x18 */
+ 	lfd	f1,-32-(13*8)(r28)
+ 	lfd	f2,-32-(12*8)(r28)
+ 	lfd	f3,-32-(11*8)(r28)
+ 	lfd	f4,-32-(10*8)(r28)
+ 	nop
+ 	lfd	f5,-32-(9*8)(r28)
+ 	lfd	f6,-32-(8*8)(r28)
+ 	lfd	f7,-32-(7*8)(r28)
+@@ -221,39 +224,40 @@ L(float_return_value):
+ 	mr	r31, r5	/* flags, */
+ 	mr	r30, r6	/* rvalue, */
+ 	mr	r29, r7	/* function address, */
+ 	stw	r2, 20(r1)
+ 
+ 	/* Call ffi_prep_args.  */
+ 	mr	r4, r1
+ 	bl	.ffi_prep_args
++	nop
+ 
+ 	/* Now do the call.  */
+ 	lwz	r0, 0(r29)
+ 	lwz	r2, 4(r29)
+ 	lwz	r11, 8(r29)
+ 	/* Set up cr1 with bits 4-7 of the flags.  */
+ 	mtcrf	0x40, r31
+ 	mtctr	r0
+ 	/* Load all those argument registers.  */
+-	// We have set up a nice stack frame, just load it into registers.
++	/* We have set up a nice stack frame, just load it into registers. */
+ 	lwz	r3, 20+(1*4)(r1)
+ 	lwz	r4, 20+(2*4)(r1)
+ 	lwz	r5, 20+(3*4)(r1)
+ 	lwz	r6, 20+(4*4)(r1)
+ 	nop
+ 	lwz	r7, 20+(5*4)(r1)
+ 	lwz	r8, 20+(6*4)(r1)
+ 	lwz	r9, 20+(7*4)(r1)
+ 	lwz	r10,20+(8*4)(r1)
+ 
+ L1:
+ 	/* Load all the FP registers.  */
+-	bf	6,L2 // 2f + 0x18
++	bf	6,L2 /* 2f + 0x18 */
+ 	lfd	f1,-16-(13*8)(r28)
+ 	lfd	f2,-16-(12*8)(r28)
+ 	lfd	f3,-16-(11*8)(r28)
+ 	lfd	f4,-16-(10*8)(r28)
+ 	nop
+ 	lfd	f5,-16-(9*8)(r28)
+ 	lfd	f6,-16-(8*8)(r28)
+ 	lfd	f7,-16-(7*8)(r28)
+@@ -298,17 +302,17 @@ L(fp_return_value):
+ 	stfd	f1, 0(r30)
+ 	b	L(done_return_value)
+ L(float_return_value):
+ 	stfs	f1, 0(r30)
+ 	b	L(done_return_value)
+ #endif
+ 	.long 0
+ 	.byte 0,0,0,1,128,4,0,0
+-//END(ffi_call_AIX)
++/* END(ffi_call_AIX) */
+ 
+ .csect .text[PR]
+ 	.align 2
+ 	.globl ffi_call_DARWIN
+ 	.globl .ffi_call_DARWIN
+ .csect ffi_call_DARWIN[DS]
+ ffi_call_DARWIN:
+ #ifdef __64BIT__
+@@ -316,9 +320,9 @@ ffi_call_DARWIN:
+ #else
+ 	.long .ffi_call_DARWIN, TOC[tc0], 0
+ #endif
+ 	.csect .text[PR]
+ .ffi_call_DARWIN:
+ 	blr
+ 	.long 0
+ 	.byte 0,0,0,0,0,0,0,0
+-//END(ffi_call_DARWIN)
++/* END(ffi_call_DARWIN) */
+diff --git a/js/src/ctypes/libffi/src/powerpc/aix_closure.S b/js/src/ctypes/libffi/src/powerpc/aix_closure.S
+--- a/js/src/ctypes/libffi/src/powerpc/aix_closure.S
++++ b/js/src/ctypes/libffi/src/powerpc/aix_closure.S
+@@ -74,16 +74,18 @@
+ 	.set f15,15
+ 	.set f16,16
+ 	.set f17,17
+ 	.set f18,18
+ 	.set f19,19
+ 	.set f20,20
+ 	.set f21,21
+ 
++	.extern .ffi_closure_helper_DARWIN
++
+ #define LIBFFI_ASM
+ #define JUMPTARGET(name) name
+ #define L(x) x
+ 	.file "aix_closure.S"
+ 	.toc
+ LC..60:
+ 	.tc L..60[TC],L..60
+ 	.csect .text[PR]
+@@ -160,16 +162,17 @@ ffi_closure_ASM:
+ 	nop
+ 
+ 	/* now r3 contains the return type */
+ 	/* so use it to look up in a table */
+ 	/* so we know how to deal with each type */
+ 
+ 	/* look up the proper starting point in table  */
+ 	/* by using return type as offset */
++	lhz	r3, 10(r3)	/* load type from return type */
+ 	ld	r4, LC..60(2)	/* get address of jump table */
+ 	sldi	r3, r3, 4	/* now multiply return type by 16 */
+ 	ld	r0, 240+16(r1)	/* load return address */
+ 	add	r3, r3, r4	/* add contents of table to table address */
+ 	mtctr	r3
+ 	bctr			/* jump to it */
+ 
+ /* Each fragment must be exactly 16 bytes long (4 instructions).
+@@ -332,18 +335,19 @@ L..finish:
+ 	nop
+ 
+ 	/* now r3 contains the return type */
+ 	/* so use it to look up in a table */
+ 	/* so we know how to deal with each type */
+ 
+ 	/* look up the proper starting point in table  */
+ 	/* by using return type as offset */
++	lhz	r3, 6(r3)	/* load type from return type */
+ 	lwz	r4, LC..60(2)	/* get address of jump table */
+-	slwi	r3, r3, 4	/* now multiply return type by 4 */
++	slwi	r3, r3, 4	/* now multiply return type by 16 */
+ 	lwz	r0, 176+8(r1)	/* load return address */
+ 	add	r3, r3, r4	/* add contents of table to table address */
+ 	mtctr	r3
+ 	bctr			/* jump to it */
+ 
+ /* Each fragment must be exactly 16 bytes long (4 instructions).
+    Align to 16 byte boundary for cache and dispatch efficiency.  */
+ 	.align 4
+diff --git a/js/src/ctypes/libffi/src/powerpc/asm.h b/js/src/ctypes/libffi/src/powerpc/asm.h
+--- a/js/src/ctypes/libffi/src/powerpc/asm.h
++++ b/js/src/ctypes/libffi/src/powerpc/asm.h
+@@ -37,17 +37,17 @@
+ /* This seems to always be the case on PPC.  */
+ #define ALIGNARG(log2) log2
+ /* For ELF we need the `.type' directive to make shared libs work right.  */
+ #define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
+ #define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+ 
+ /* If compiled for profiling, call `_mcount' at the start of each function.  */
+ #ifdef	PROF
+-/* The mcount code relies on a the return address being on the stack
++/* The mcount code relies on the return address being on the stack
+    to locate our caller and so it can restore it; so store one just
+    for its benefit.  */
+ #ifdef PIC
+ #define CALL_MCOUNT							      \
+   .pushsection;								      \
+   .section ".data";							      \
+   .align ALIGNARG(2);							      \
+ 0:.long 0;								      \
+diff --git a/js/src/ctypes/libffi/src/powerpc/darwin.S b/js/src/ctypes/libffi/src/powerpc/darwin.S
+--- a/js/src/ctypes/libffi/src/powerpc/darwin.S
++++ b/js/src/ctypes/libffi/src/powerpc/darwin.S
+@@ -1,11 +1,11 @@
+ /* -----------------------------------------------------------------------
+    darwin.S - Copyright (c) 2000 John Hornkvist
+-	      Copyright (c) 2004 Free Software Foundation, Inc.
++	      Copyright (c) 2004, 2010 Free Software Foundation, Inc.
+ 
+    PowerPC Assembly glue.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -19,207 +19,342 @@
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ 
++#define LIBFFI_ASM
+ #if defined(__ppc64__)
+ #define MODE_CHOICE(x, y) y
+ #else
+ #define MODE_CHOICE(x, y) x
+ #endif
+ 
+-#define g_long  MODE_CHOICE(long, quad)         /* usage is ".g_long" */
++#define machine_choice	MODE_CHOICE(ppc7400,ppc64)
+ 
+-#define LOG2_GPR_BYTES  MODE_CHOICE(2,3)        /* log2(GPR_BYTES) */
++; Define some pseudo-opcodes for size-independent load & store of GPRs ...
++#define lgu		MODE_CHOICE(lwzu, ldu)
++#define lg		MODE_CHOICE(lwz,ld)
++#define sg		MODE_CHOICE(stw,std)
++#define sgu		MODE_CHOICE(stwu,stdu)
++#define sgux		MODE_CHOICE(stwux,stdux)
+ 
+-#define LIBFFI_ASM
++; ... and the size of GPRs and their storage indicator.
++#define GPR_BYTES	MODE_CHOICE(4,8)
++#define LOG2_GPR_BYTES	MODE_CHOICE(2,3)	/* log2(GPR_BYTES) */
++#define g_long		MODE_CHOICE(long, quad)	/* usage is ".g_long" */
++
++; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04.
++#define LINKAGE_SIZE	MODE_CHOICE(24,48)
++#define PARAM_AREA	MODE_CHOICE(32,64)
++#define SAVED_LR_OFFSET	MODE_CHOICE(8,16)	/* save position for lr */
++
++/* If there is any FP stuff we make space for all of the regs.  */
++#define SAVED_FPR_COUNT 13
++#define FPR_SIZE	8
++#define RESULT_BYTES	16
++
++/* This should be kept in step with the same value in ffi_darwin.c.  */
++#define ASM_NEEDS_REGISTERS 4
++#define SAVE_REGS_SIZE (ASM_NEEDS_REGISTERS * GPR_BYTES)
++
+ #include <fficonfig.h>
+ #include <ffi.h>
++
+ #define JUMPTARGET(name) name
+ #define L(x) x
+-.text
++
++	.text
+ 	.align 2
+-.globl _ffi_prep_args
++	.globl _ffi_prep_args
+ 
+-.text
+ 	.align 2
+-.globl _ffi_call_DARWIN
+-.text
+-	.align 2
++	.globl _ffi_call_DARWIN
++
++	/* We arrive here with:
++	   r3 = ptr to extended cif.
++	   r4 = -bytes.
++	   r5 = cif flags.
++	   r6 = ptr to return value.
++	   r7 = fn pointer (user func).
++	   r8 = fn pointer (ffi_prep_args).
++	   r9 = ffi_type* for the ret val.  */
++
+ _ffi_call_DARWIN:
+-LFB0:
++Lstartcode:
+ 	mr   	r12,r8	/* We only need r12 until the call,
+-			   so it doesn't have to be saved.  */
++			   so it does not have to be saved.  */
+ LFB1:
+ 	/* Save the old stack pointer as AP.  */
+ 	mr	r8,r1
+ LCFI0:
++	
++	/* Save the retval type in parents frame.  */
++	sg	r9,(LINKAGE_SIZE+6*GPR_BYTES)(r8)
++
+ 	/* Allocate the stack space we need.  */
+-	stwux	r1,r1,r4
++	sgux	r1,r1,r4
+ 
+ 	/* Save registers we use.  */
+ 	mflr	r9
++	sg	r9,SAVED_LR_OFFSET(r8)
+ 
+-	stw	r28,-16(r8)	
+-	stw	r29,-12(r8)
+-	stw	r30,-8(r8)
+-	stw	r31,-4(r8)
++	sg	r28,-(4 * GPR_BYTES)(r8)	
++	sg	r29,-(3 * GPR_BYTES)(r8)
++	sg	r30,-(2 * GPR_BYTES)(r8)
++	sg	r31,-(    GPR_BYTES)(r8)
+ 
+-	stw	r9,8(r8)
+-	stw	r2,20(r1)
++#if !defined(POWERPC_DARWIN)
++	/* The TOC slot is reserved in the Darwin ABI and r2 is volatile.  */
++	sg	r2,(5 * GPR_BYTES)(r1)
++#endif
++
+ LCFI1:
+ 
+ 	/* Save arguments over call.  */
+ 	mr	r31,r5	/* flags,  */
+ 	mr	r30,r6	/* rvalue,  */
+ 	mr	r29,r7	/* function address,  */
+ 	mr	r28,r8	/* our AP.  */
+ LCFI2:
+-	/* Call ffi_prep_args.  */
++	/* Call ffi_prep_args. r3 = extended cif, r4 = stack ptr copy.  */
+ 	mr	r4,r1
+ 	li	r9,0
+ 
+ 	mtctr	r12 /* r12 holds address of _ffi_prep_args.  */
+ 	bctrl
+-	lwz     r2,20(r1)
+ 
++#if !defined(POWERPC_DARWIN)
++	/* The TOC slot is reserved in the Darwin ABI and r2 is volatile.  */
++	lg     r2,(5 * GPR_BYTES)(r1)
++#endif
+ 	/* Now do the call.
+ 	   Set up cr1 with bits 4-7 of the flags.  */
+ 	mtcrf	0x40,r31
+ 	/* Get the address to call into CTR.  */
+ 	mtctr	r29
+ 	/* Load all those argument registers.
+ 	   We have set up a nice stack frame, just load it into registers.  */
+-	lwz     r3,20+(1*4)(r1)
+-	lwz     r4,20+(2*4)(r1)
+-	lwz     r5,20+(3*4)(r1)
+-	lwz     r6,20+(4*4)(r1)
++	lg     r3, (LINKAGE_SIZE                )(r1)
++	lg     r4, (LINKAGE_SIZE +     GPR_BYTES)(r1)
++	lg     r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r1)
++	lg     r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r1)
+ 	nop
+-	lwz     r7,20+(5*4)(r1)
+-	lwz     r8,20+(6*4)(r1)
+-	lwz     r9,20+(7*4)(r1)
+-	lwz     r10,20+(8*4)(r1)
++	lg     r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r1)
++	lg     r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r1)
++	lg     r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r1)
++	lg     r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r1)
+ 
+ L1:
+-	/* Load all the FP registers.  */
++	/* ... Load all the FP registers.  */
+ 	bf	6,L2	/* No floats to load.  */
+-	lfd	f1,-16-(13*8)(r28)
+-	lfd	f2,-16-(12*8)(r28)
+-	lfd	f3,-16-(11*8)(r28)
+-	lfd	f4,-16-(10*8)(r28)
++	lfd	f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28)
++	lfd	f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28)
++	lfd	f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28)
++	lfd	f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28)
+ 	nop
+-	lfd	f5,-16-(9*8)(r28)
+-	lfd	f6,-16-(8*8)(r28)
+-	lfd	f7,-16-(7*8)(r28)
+-	lfd	f8,-16-(6*8)(r28)
++	lfd	f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28)
++	lfd	f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28)
++	lfd	f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28)
++	lfd	f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28)
+ 	nop
+-	lfd     f9,-16-(5*8)(r28)
+-	lfd     f10,-16-(4*8)(r28)
+-	lfd     f11,-16-(3*8)(r28)
+-	lfd     f12,-16-(2*8)(r28)
++	lfd     f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28)
++	lfd     f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28)
++	lfd     f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28)
++	lfd     f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28)
+ 	nop
+-	lfd     f13,-16-(1*8)(r28)
++	lfd     f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28)
+ 
+ L2:
+ 	mr	r12,r29	/* Put the target address in r12 as specified.  */
+ 	mtctr  	r12
+ 	nop
+ 	nop
++
+ 	/* Make the call.  */
+ 	bctrl
+ 
+ 	/* Now, deal with the return value.  */
+-	mtcrf	0x01,r31
+ 
+-	bt	30,L(done_return_value)
+-	bt	29,L(fp_return_value)
+-	stw	r3,0(r30)
+-	bf	28,L(done_return_value)
+-	stw	r4,4(r30)
++	/* m64 structure returns can occupy the same set of registers as
++	   would be used to pass such a structure as arg0 - so take care 
++	   not to step on any possibly hot regs.  */
+ 
+-	/* Fall through.  */
++	/* Get the flags.. */
++	mtcrf	0x03,r31 ; we need c6 & cr7 now.
++	; FLAG_RETURNS_NOTHING also covers struct ret-by-ref.
++	bt	30,L(done_return_value)	  ; FLAG_RETURNS_NOTHING
++	bf	27,L(scalar_return_value) ; not FLAG_RETURNS_STRUCT
++	
++	/* OK, so we have a struct.  */
++#if defined(__ppc64__)
++	bt	31,L(maybe_return_128) ; FLAG_RETURNS_128BITS, special case 
+ 
+-L(done_return_value):
+-	/* Restore the registers we used and return.  */
+-	lwz	r9,8(r28)
+-	lwz	r31,-4(r28)
+-	mtlr	r9
+-	lwz	r30,-8(r28)
+-	lwz	r29,-12(r28)
+-	lwz	r28,-16(r28)
+-	lwz	r1,0(r1)
+-	blr
++	/* OK, we have to map the return back to a mem struct.
++	   We are about to trample the parents param area, so recover the
++	   return type.  r29 is free, since the call is done.  */
++	lg	r29,(LINKAGE_SIZE + 6 * GPR_BYTES)(r28)
++
++	sg	r3, (LINKAGE_SIZE                )(r28)
++	sg	r4, (LINKAGE_SIZE +     GPR_BYTES)(r28)
++	sg	r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r28)
++	sg	r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r28)
++	nop
++	sg	r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r28)
++	sg	r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r28)
++	sg	r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r28)
++	sg	r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28)
++	/* OK, so do the block move - we trust that memcpy will not trample
++	   the fprs...  */
++	mr 	r3,r30 ; dest
++	addi	r4,r28,LINKAGE_SIZE ; source
++	/* The size is a size_t, should be long.  */
++	lg	r5,0(r29)
++	/* Figure out small structs */
++	cmpi	0,r5,4
++	bgt	L3	; 1, 2 and 4 bytes have special rules.
++	cmpi	0,r5,3
++	beq	L3	; not 3
++	addi	r4,r4,8
++	subf	r4,r5,r4
++L3:
++	bl	_memcpy
++	
++	/* ... do we need the FP registers? - recover the flags.. */
++	mtcrf	0x03,r31 ; we need c6 & cr7 now.
++	bf	29,L(done_return_value)	/* No floats in the struct.  */
++	stfd	f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28)
++	stfd	f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28)
++	stfd	f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28)
++	stfd	f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28)
++	nop
++	stfd	f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28)
++	stfd	f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28)
++	stfd	f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28)
++	stfd	f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28)
++	nop
++	stfd	f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28)
++	stfd	f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28)
++	stfd	f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28)
++	stfd	f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28)
++	nop
++	stfd	f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28)
++
++	mr	r3,r29	; ffi_type *
++	mr	r4,r30	; dest
++	addi	r5,r28,-SAVE_REGS_SIZE-(13*FPR_SIZE) ; fprs
++	xor	r6,r6,r6
++	sg	r6,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28)
++	addi	r6,r28,(LINKAGE_SIZE + 7 * GPR_BYTES) ; point to a zeroed counter.
++	bl 	_darwin64_struct_floats_to_mem
++
++	b L(done_return_value)
++#else
++	stw	r3,0(r30) ; m32 the only struct return in reg is 4 bytes.
++#endif
++	b L(done_return_value)
+ 
+ L(fp_return_value):
+ 	/* Do we have long double to store?  */
+-	bf	31,L(fd_return_value)
++	bf	31,L(fd_return_value) ; FLAG_RETURNS_128BITS
+ 	stfd	f1,0(r30)
+-	stfd	f2,8(r30)
++	stfd	f2,FPR_SIZE(r30)
+ 	b	L(done_return_value)
+ 
+ L(fd_return_value):
+ 	/* Do we have double to store?  */
+ 	bf	28,L(float_return_value)
+ 	stfd	f1,0(r30)
+ 	b	L(done_return_value)
+ 
+ L(float_return_value):
+ 	/* We only have a float to store.  */
+ 	stfs	f1,0(r30)
+ 	b	L(done_return_value)
+ 
++L(scalar_return_value):
++	bt	29,L(fp_return_value)	; FLAG_RETURNS_FP
++	; ffi_arg is defined as unsigned long. 
++	sg	r3,0(r30)		; Save the reg.
++	bf	28,L(done_return_value) ; not FLAG_RETURNS_64BITS 
++
++#if defined(__ppc64__)
++L(maybe_return_128):
++	std	r3,0(r30)
++	bf	31,L(done_return_value) ; not FLAG_RETURNS_128BITS 
++	std	r4,8(r30)
++#else
++	stw	r4,4(r30)
++#endif
++
++	/* Fall through.  */
++	/* We want this at the end to simplify eh epilog computation.  */
++
++L(done_return_value):
++	/* Restore the registers we used and return.  */
++	lg	r29,SAVED_LR_OFFSET(r28)
++	; epilog
++	lg	r31,-(1 * GPR_BYTES)(r28)
++	mtlr	r29
++	lg	r30,-(2 * GPR_BYTES)(r28)
++	lg	r29,-(3 * GPR_BYTES)(r28)
++	lg	r28,-(4 * GPR_BYTES)(r28)
++	lg	r1,0(r1)
++	blr
+ LFE1:
++	.align	1
+ /* END(_ffi_call_DARWIN)  */
+ 
+ /* Provide a null definition of _ffi_call_AIX.  */
+-.text
+-	.align 2
+-.globl _ffi_call_AIX
+-.text
++	.text
++	.globl _ffi_call_AIX
+ 	.align 2
+ _ffi_call_AIX:
+ 	blr
+ /* END(_ffi_call_AIX)  */
+ 
+-.data
+-.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms
++/* EH stuff.  */
++
++#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78)
++
++	.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
+ EH_frame1:
+ 	.set	L$set$0,LECIE1-LSCIE1
+ 	.long	L$set$0	; Length of Common Information Entry
+ LSCIE1:
+ 	.long	0x0	; CIE Identifier Tag
+ 	.byte	0x1	; CIE Version
+ 	.ascii	"zR\0"	; CIE Augmentation
+ 	.byte	0x1	; uleb128 0x1; CIE Code Alignment Factor
+-	.byte	0x7c	; sleb128 -4; CIE Data Alignment Factor
++	.byte	EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor
+ 	.byte	0x41	; CIE RA Column
+ 	.byte	0x1	; uleb128 0x1; Augmentation size
+-	.byte	0x90	; FDE Encoding (indirect pcrel)
++	.byte	0x10	; FDE Encoding (pcrel)
+ 	.byte	0xc	; DW_CFA_def_cfa
+ 	.byte	0x1	; uleb128 0x1
+ 	.byte	0x0	; uleb128 0x0
+ 	.align	LOG2_GPR_BYTES
+ LECIE1:
+-.globl _ffi_call_DARWIN.eh
++
++	.globl _ffi_call_DARWIN.eh
+ _ffi_call_DARWIN.eh:
+ LSFDE1:
+ 	.set	L$set$1,LEFDE1-LASFDE1
+ 	.long	L$set$1	; FDE Length
+ LASFDE1:
+ 	.long	LASFDE1-EH_frame1 ; FDE CIE offset
+-	.g_long	LLFB0$non_lazy_ptr-.	; FDE initial location
+-	.set	L$set$3,LFE1-LFB0
++	.g_long	Lstartcode-.	; FDE initial location
++	.set	L$set$3,LFE1-Lstartcode
+ 	.g_long	L$set$3	; FDE address range
+ 	.byte   0x0     ; uleb128 0x0; Augmentation size
+ 	.byte	0x4	; DW_CFA_advance_loc4
+-	.set	L$set$4,LCFI0-LFB1
++	.set	L$set$4,LCFI0-Lstartcode
+ 	.long	L$set$4
+ 	.byte	0xd	; DW_CFA_def_cfa_register
+ 	.byte	0x08	; uleb128 0x08
+ 	.byte	0x4	; DW_CFA_advance_loc4
+ 	.set	L$set$5,LCFI1-LCFI0
+ 	.long	L$set$5
+ 	.byte   0x11    ; DW_CFA_offset_extended_sf
+ 	.byte	0x41	; uleb128 0x41
+@@ -234,12 +369,10 @@ LASFDE1:
+ 	.byte	0x4	; uleb128 0x4
+ 	.byte	0x4	; DW_CFA_advance_loc4
+ 	.set	L$set$6,LCFI2-LCFI1
+ 	.long	L$set$6
+ 	.byte	0xd	; DW_CFA_def_cfa_register
+ 	.byte	0x1c	; uleb128 0x1c
+ 	.align LOG2_GPR_BYTES
+ LEFDE1:
+-.data
+-	.align LOG2_GPR_BYTES
+-LLFB0$non_lazy_ptr:
+-	.g_long LFB0
++	.align 1
++
+diff --git a/js/src/ctypes/libffi/src/powerpc/darwin_closure.S b/js/src/ctypes/libffi/src/powerpc/darwin_closure.S
+--- a/js/src/ctypes/libffi/src/powerpc/darwin_closure.S
++++ b/js/src/ctypes/libffi/src/powerpc/darwin_closure.S
+@@ -1,11 +1,12 @@
+ /* -----------------------------------------------------------------------
+-   darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation,
+-   Inc. based on ppc_closure.S
++   darwin_closure.S - Copyright (c) 2002, 2003, 2004, 2010, 
++   Free Software Foundation, Inc. 
++   based on ppc_closure.S
+ 
+    PowerPC Assembly glue.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -28,101 +29,187 @@
+ #define L(x) x
+ 
+ #if defined(__ppc64__)
+ #define MODE_CHOICE(x, y) y
+ #else
+ #define MODE_CHOICE(x, y) x
+ #endif
+ 
+-#define lgu     MODE_CHOICE(lwzu, ldu)
++#define machine_choice	MODE_CHOICE(ppc7400,ppc64)
+ 
+-#define g_long  MODE_CHOICE(long, quad)         /* usage is ".g_long" */
++; Define some pseudo-opcodes for size-independent load & store of GPRs ...
++#define lgu		MODE_CHOICE(lwzu, ldu)
++#define lg		MODE_CHOICE(lwz,ld)
++#define sg		MODE_CHOICE(stw,std)
++#define sgu		MODE_CHOICE(stwu,stdu)
+ 
+-#define LOG2_GPR_BYTES  MODE_CHOICE(2,3)        /* log2(GPR_BYTES) */
++; ... and the size of GPRs and their storage indicator.
++#define GPR_BYTES	MODE_CHOICE(4,8)
++#define LOG2_GPR_BYTES	MODE_CHOICE(2,3)	/* log2(GPR_BYTES) */
++#define g_long		MODE_CHOICE(long, quad)	/* usage is ".g_long" */
++
++; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04.
++#define LINKAGE_SIZE	MODE_CHOICE(24,48)
++#define PARAM_AREA	MODE_CHOICE(32,64)
++
++#define SAVED_CR_OFFSET	MODE_CHOICE(4,8)	/* save position for CR */
++#define SAVED_LR_OFFSET	MODE_CHOICE(8,16)	/* save position for lr */
++
++/* WARNING: if ffi_type is changed... here be monsters.  
++   Offsets of items within the result type.  */
++#define FFI_TYPE_TYPE	MODE_CHOICE(6,10)
++#define FFI_TYPE_ELEM	MODE_CHOICE(8,16)
++
++#define SAVED_FPR_COUNT 13
++#define FPR_SIZE	8
++/* biggest m64 struct ret is 8GPRS + 13FPRS = 168 bytes - rounded to 16bytes = 176. */
++#define RESULT_BYTES	MODE_CHOICE(16,176)
++
++; The whole stack frame **MUST** be 16byte-aligned.
++#define SAVE_SIZE (((LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES)+15) & -16LL)
++#define PAD_SIZE (SAVE_SIZE-(LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES))
++
++#define PARENT_PARM_BASE (SAVE_SIZE+LINKAGE_SIZE)
++#define FP_SAVE_BASE (LINKAGE_SIZE+PARAM_AREA)
++
++#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
++; We no longer need the pic symbol stub for Darwin >= 9.
++#define BLCLS_HELP _ffi_closure_helper_DARWIN
++#define STRUCT_RETVALUE_P _darwin64_struct_ret_by_value_p
++#define PASS_STR_FLOATS _darwin64_pass_struct_floats
++#undef WANT_STUB
++#else
++#define BLCLS_HELP L_ffi_closure_helper_DARWIN$stub
++#define STRUCT_RETVALUE_P L_darwin64_struct_ret_by_value_p$stub
++#define PASS_STR_FLOATS L_darwin64_pass_struct_floats$stub
++#define WANT_STUB
++#endif
++
++/* m32/m64
++
++   The stack layout looks like this:
++
++   |   Additional params...			| |     Higher address
++   ~						~ ~
++   |   Parameters      (at least 8*4/8=32/64)	| | NUM_GPR_ARG_REGISTERS
++   |--------------------------------------------| |
++   |   TOC=R2 (AIX) Reserved (Darwin)   4/8	| |
++   |--------------------------------------------| |
++   |   Reserved                       2*4/8	| |
++   |--------------------------------------------| |
++   |   Space for callee`s LR		4/8	| |
++   |--------------------------------------------| |
++   |   Saved CR [low word for m64]      4/8	| |
++   |--------------------------------------------| |
++   |   Current backchain pointer	4/8	|-/ Parent`s frame.
++   |--------------------------------------------| <+ <<< on entry to
++   |   Result Bytes		       16/176	| |
++   |--------------------------------------------| |
++   ~   padding to 16-byte alignment		~ ~
++   |--------------------------------------------| |
++   |   NUM_FPR_ARG_REGISTERS slots		| |
++   |   here fp13 .. fp1		       13*8	| |
++   |--------------------------------------------| |
++   |   R3..R10			  8*4/8=32/64	| | NUM_GPR_ARG_REGISTERS
++   |--------------------------------------------| |
++   |   TOC=R2 (AIX) Reserved (Darwin)   4/8	| |
++   |--------------------------------------------| |	stack	|
++   |   Reserved [compiler,binder]     2*4/8	| |	grows	|
++   |--------------------------------------------| |	down	V
++   |   Space for callees LR		4/8	| |
++   |--------------------------------------------| |	lower addresses
++   |   Saved CR [low word for m64]      4/8	| |
++   |--------------------------------------------| |     stack pointer here
++   |   Current backchain pointer	4/8	|-/	during
++   |--------------------------------------------|   <<<	call.
++
++*/
+ 
+ 	.file	"darwin_closure.S"
+-.text
+-	.align LOG2_GPR_BYTES
+-.globl _ffi_closure_ASM
+ 
+-.text
++	.machine machine_choice
++
++	.text
++	.globl _ffi_closure_ASM
+ 	.align LOG2_GPR_BYTES
+ _ffi_closure_ASM:
+ LFB1:
+-	mflr	r0		/* extract return address  */
+-	stw	r0,8(r1)	/* save the return address  */
++Lstartcode:
++	mflr	r0			/* extract return address  */
++	sg	r0,SAVED_LR_OFFSET(r1)	/* save the return address  */
+ LCFI0:
+-	/* 24 Bytes (Linkage Area)
+-	   32 Bytes (outgoing parameter area, always reserved)
+-	   104 Bytes (13*8 from FPR)
+-	   16 Bytes (result)
+-	   176 Bytes  */
+-
+-	stwu	r1,-176(r1)	/* skip over caller save area
+-				keep stack aligned to 16.  */
++	sgu	r1,-SAVE_SIZE(r1)	/* skip over caller save area
++					keep stack aligned to 16.  */
+ LCFI1:
+ 	/* We want to build up an area for the parameters passed
+ 	   in registers. (both floating point and integer)  */
+ 
+-	/* We store gpr 3 to gpr 10 (aligned to 4)
+-	   in the parents outgoing area.  */
+-	stw   r3,200(r1)
+-	stw   r4,204(r1)
+-	stw   r5,208(r1)
+-	stw   r6,212(r1)
+-	stw   r7,216(r1)
+-	stw   r8,220(r1)
+-	stw   r9,224(r1)
+-	stw   r10,228(r1)
++	/* Put gpr 3 to gpr 10 in the parents outgoing area...
++	   ... the remainder of any params that overflowed the regs will
++	   follow here.  */
++	sg	r3, (PARENT_PARM_BASE                )(r1)
++	sg	r4, (PARENT_PARM_BASE + GPR_BYTES    )(r1)
++	sg	r5, (PARENT_PARM_BASE + GPR_BYTES * 2)(r1)
++	sg	r6, (PARENT_PARM_BASE + GPR_BYTES * 3)(r1)
++	sg	r7, (PARENT_PARM_BASE + GPR_BYTES * 4)(r1)
++	sg	r8, (PARENT_PARM_BASE + GPR_BYTES * 5)(r1)
++	sg	r9, (PARENT_PARM_BASE + GPR_BYTES * 6)(r1)
++	sg	r10,(PARENT_PARM_BASE + GPR_BYTES * 7)(r1)
+ 
+-	/* We save fpr 1 to fpr 13. (aligned to 8)  */
+-	stfd  f1,56(r1)
+-	stfd  f2,64(r1)
+-	stfd  f3,72(r1)
+-	stfd  f4,80(r1)
+-	stfd  f5,88(r1)
+-	stfd  f6,96(r1)
+-	stfd  f7,104(r1)
+-	stfd  f8,112(r1)
+-	stfd  f9,120(r1)
+-	stfd  f10,128(r1)
+-	stfd  f11,136(r1)
+-	stfd  f12,144(r1)
+-	stfd  f13,152(r1)
++	/* We save fpr 1 to fpr 14 in our own save frame.  */
++	stfd	f1, (FP_SAVE_BASE                 )(r1)
++	stfd	f2, (FP_SAVE_BASE +  FPR_SIZE     )(r1)
++	stfd	f3, (FP_SAVE_BASE +  FPR_SIZE * 2 )(r1)
++	stfd	f4, (FP_SAVE_BASE +  FPR_SIZE * 3 )(r1)
++	stfd	f5, (FP_SAVE_BASE +  FPR_SIZE * 4 )(r1)
++	stfd	f6, (FP_SAVE_BASE +  FPR_SIZE * 5 )(r1)
++	stfd	f7, (FP_SAVE_BASE +  FPR_SIZE * 6 )(r1)
++	stfd	f8, (FP_SAVE_BASE +  FPR_SIZE * 7 )(r1)
++	stfd	f9, (FP_SAVE_BASE +  FPR_SIZE * 8 )(r1)
++	stfd	f10,(FP_SAVE_BASE +  FPR_SIZE * 9 )(r1)
++	stfd	f11,(FP_SAVE_BASE +  FPR_SIZE * 10)(r1)
++	stfd	f12,(FP_SAVE_BASE +  FPR_SIZE * 11)(r1)
++	stfd	f13,(FP_SAVE_BASE +  FPR_SIZE * 12)(r1)
+ 
+ 	/* Set up registers for the routine that actually does the work
+ 	   get the context pointer from the trampoline.  */
+-	mr r3,r11
++	mr	r3,r11
+ 
+ 	/* Now load up the pointer to the result storage.  */
+-	addi r4,r1,160
++	addi	r4,r1,(SAVE_SIZE-RESULT_BYTES)
+ 
+ 	/* Now load up the pointer to the saved gpr registers.  */
+-	addi r5,r1,200
++	addi	r5,r1,PARENT_PARM_BASE
+ 
+ 	/* Now load up the pointer to the saved fpr registers.  */
+-	addi r6,r1,56
++	addi	r6,r1,FP_SAVE_BASE
+ 
+ 	/* Make the call.  */
+-	bl	Lffi_closure_helper_DARWIN$stub
++	bl	BLCLS_HELP
+ 
+-	/* Now r3 contains the return type
+-	   so use it to look up in a table
++	/* r3 contains the rtype pointer... save it since we will need
++	   it later.  */
++	sg	r3,LINKAGE_SIZE(r1)	; ffi_type * result_type
++	lg	r0,0(r3)		; size => r0
++	lhz	r3,FFI_TYPE_TYPE(r3)	; type => r3
++
++	/* The helper will have intercepted structure returns and inserted
++	   the caller`s destination address for structs returned by ref.  */
++
++	/* r3 contains the return type  so use it to look up in a table
+ 	   so we know how to deal with each type.  */
+ 
+-	/* Look up the proper starting point in table
+-	   by using return type as offset.  */
+-	addi  r5,r1,160		  /* Get pointer to results area.  */
+-	bl    Lget_ret_type0_addr /* Get pointer to Lret_type0 into LR.  */
+-	mflr  r4		  /* Move to r4.  */
+-	slwi  r3,r3,4		  /* Now multiply return type by 16.  */
+-	add   r3,r3,r4		  /* Add contents of table to table address.  */
+-	mtctr r3
+-	bctr			  /* Jump to it.  */
++	addi	r5,r1,(SAVE_SIZE-RESULT_BYTES) /* Otherwise, our return is here.  */
++	bl	Lget_ret_type0_addr	/* Get pointer to Lret_type0 into LR.  */
++	mflr	r4			/* Move to r4.  */
++	slwi	r3,r3,4			/* Now multiply return type by 16.  */
++	add	r3,r3,r4		/* Add contents of table to table address.  */
++	mtctr	r3
++	bctr			 	 /* Jump to it.  */
+ LFE1:
+ /* Each of the ret_typeX code fragments has to be exactly 16 bytes long
+    (4 instructions). For cache effectiveness we align to a 16 byte boundary
+    first.  */
+ 
+ 	.align 4
+ 
+ 	nop
+@@ -135,17 +222,17 @@ Lget_ret_type0_addr:
+ Lret_type0:
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_INT  */
+ Lret_type1:
+-	lwz	r3,0(r5)
++	lg	r3,0(r5)
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_FLOAT  */
+ Lret_type2:
+ 	lfs	f1,0(r5)
+ 	b	Lfinish
+@@ -163,155 +250,322 @@ Lret_type3:
+ Lret_type4:
+ 	lfd	f1,0(r5)
+ 	lfd	f2,8(r5)
+ 	b	Lfinish
+ 	nop
+ 
+ /* case FFI_TYPE_UINT8  */
+ Lret_type5:
++#if defined(__ppc64__)
++	lbz	r3,7(r5)
++#else
+ 	lbz	r3,3(r5)
++#endif
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_SINT8  */
+ Lret_type6:
++#if defined(__ppc64__)
++	lbz	r3,7(r5)
++#else
+ 	lbz	r3,3(r5)
++#endif
+ 	extsb	r3,r3
+ 	b	Lfinish
+ 	nop
+ 
+ /* case FFI_TYPE_UINT16  */
+ Lret_type7:
++#if defined(__ppc64__)
++	lhz	r3,6(r5)
++#else
+ 	lhz	r3,2(r5)
++#endif
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_SINT16  */
+ Lret_type8:
++#if defined(__ppc64__)
++	lha	r3,6(r5)
++#else
+ 	lha	r3,2(r5)
++#endif
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_UINT32  */
+ Lret_type9:
++#if defined(__ppc64__)
++	lwz	r3,4(r5)
++#else
+ 	lwz	r3,0(r5)
++#endif
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_SINT32  */
+ Lret_type10:
++#if defined(__ppc64__)
++	lwz	r3,4(r5)
++#else
+ 	lwz	r3,0(r5)
++#endif
+ 	b	Lfinish
+ 	nop
+ 	nop
+ 
+ /* case FFI_TYPE_UINT64  */
+ Lret_type11:
++#if defined(__ppc64__)
++	lg	r3,0(r5)
++	b	Lfinish
++	nop
++#else
+ 	lwz	r3,0(r5)
+ 	lwz	r4,4(r5)
+ 	b	Lfinish
++#endif
+ 	nop
+ 
+ /* case FFI_TYPE_SINT64  */
+ Lret_type12:
++#if defined(__ppc64__)
++	lg	r3,0(r5)
++	b	Lfinish
++	nop
++#else
+ 	lwz	r3,0(r5)
+ 	lwz	r4,4(r5)
+ 	b	Lfinish
++#endif
+ 	nop
+ 
+ /* case FFI_TYPE_STRUCT  */
+ Lret_type13:
++#if defined(__ppc64__)
++	lg	r3,0(r5)		; we need at least this...
++	cmpi	0,r0,4
++	bgt	Lstructend		; not a special small case
++	b	Lsmallstruct		; see if we need more.
++#else
++	cmpi	0,r0,4
++	bgt	Lfinish		; not by value
++	lg	r3,0(r5)
++	b	Lfinish
++#endif
++/* case FFI_TYPE_POINTER  */
++Lret_type14:
++	lg	r3,0(r5)
+ 	b	Lfinish
+ 	nop
+ 	nop
+-	nop
+ 
+-/* case FFI_TYPE_POINTER  */
+-Lret_type14:
+-	lwz	r3,0(r5)
+-	b	Lfinish
+-	nop
+-	nop
++#if defined(__ppc64__)
++Lsmallstruct:
++	beq	Lfour			; continuation of Lret13.
++	cmpi	0,r0,3
++	beq	Lfinish			; don`t adjust this - can`t be any floats here...
++	srdi	r3,r3,48
++	cmpi	0,r0,2
++	beq	Lfinish			; .. or here ..
++	srdi	r3,r3,8
++	b 	Lfinish			; .. or here.
++
++Lfour:
++	lg	r6,LINKAGE_SIZE(r1)	; get the result type
++	lg	r6,FFI_TYPE_ELEM(r6)	; elements array pointer
++	lg	r6,0(r6)		; first element
++	lhz	r0,FFI_TYPE_TYPE(r6)	; OK go the type
++	cmpi	0,r0,2			; FFI_TYPE_FLOAT
++	bne	Lfourint
++	lfs	f1,0(r5)		; just one float in the struct.
++	b 	Lfinish
++
++Lfourint:
++	srdi	r3,r3,32		; four bytes.
++	b 	Lfinish
++
++Lstructend:
++	lg	r3,LINKAGE_SIZE(r1)	; get the result type
++	bl	STRUCT_RETVALUE_P
++	cmpi	0,r3,0
++	beq	Lfinish			; nope.
++	/* Recover a pointer to the results.  */
++	addi	r11,r1,(SAVE_SIZE-RESULT_BYTES)
++	lg	r3,0(r11)		; we need at least this...
++	lg	r4,8(r11)
++	cmpi	0,r0,16
++	beq	Lfinish		; special case 16 bytes we don't consider floats.
++
++	/* OK, frustratingly, the process of saving the struct to mem might have
++	   messed with the FPRs, so we have to re-load them :(.
++	   We`ll use our FPRs space again - calling: 
++	   void darwin64_pass_struct_floats (ffi_type *s, char *src, 
++					     unsigned *nfpr, double **fprs) 
++	   We`ll temporarily pinch the first two slots of the param area for local
++	   vars used by the routine.  */
++	xor	r6,r6,r6
++	addi	r5,r1,PARENT_PARM_BASE		; some space
++	sg	r6,0(r5)			; *nfpr zeroed.
++	addi	r6,r5,8				; **fprs
++	addi	r3,r1,FP_SAVE_BASE		; pointer to FPRs space
++	sg	r3,0(r6)
++	mr	r4,r11				; the struct is here...
++	lg	r3,LINKAGE_SIZE(r1)		; ffi_type * result_type.
++	bl	PASS_STR_FLOATS			; get struct floats into FPR save space.
++	/* See if we used any floats  */
++	lwz	r0,(SAVE_SIZE-RESULT_BYTES)(r1)	
++	cmpi	0,r0,0
++	beq	Lstructints			; nope.
++	/* OK load `em up... */
++	lfd	f1, (FP_SAVE_BASE                 )(r1)
++	lfd	f2, (FP_SAVE_BASE +  FPR_SIZE     )(r1)
++	lfd	f3, (FP_SAVE_BASE +  FPR_SIZE * 2 )(r1)
++	lfd	f4, (FP_SAVE_BASE +  FPR_SIZE * 3 )(r1)
++	lfd	f5, (FP_SAVE_BASE +  FPR_SIZE * 4 )(r1)
++	lfd	f6, (FP_SAVE_BASE +  FPR_SIZE * 5 )(r1)
++	lfd	f7, (FP_SAVE_BASE +  FPR_SIZE * 6 )(r1)
++	lfd	f8, (FP_SAVE_BASE +  FPR_SIZE * 7 )(r1)
++	lfd	f9, (FP_SAVE_BASE +  FPR_SIZE * 8 )(r1)
++	lfd	f10,(FP_SAVE_BASE +  FPR_SIZE * 9 )(r1)
++	lfd	f11,(FP_SAVE_BASE +  FPR_SIZE * 10)(r1)
++	lfd	f12,(FP_SAVE_BASE +  FPR_SIZE * 11)(r1)
++	lfd	f13,(FP_SAVE_BASE +  FPR_SIZE * 12)(r1)
++
++	/* point back at our saved struct.  */
++Lstructints:
++	addi	r11,r1,(SAVE_SIZE-RESULT_BYTES)
++	lg	r3,0(r11)			; we end up picking the
++	lg	r4,8(r11)			; first two again.
++	lg	r5,16(r11)
++	lg	r6,24(r11)
++	lg	r7,32(r11)
++	lg	r8,40(r11)
++	lg	r9,48(r11)
++	lg	r10,56(r11)
++#endif
+ 
+ /* case done  */
+ Lfinish:
+-	addi	r1,r1,176	/* Restore stack pointer.  */
+-	lwz	r0,8(r1)	/* Get return address.  */
+-	mtlr	r0		/* Reset link register.  */
++	addi	r1,r1,SAVE_SIZE		/* Restore stack pointer.  */
++	lg	r0,SAVED_LR_OFFSET(r1)	/* Get return address.  */
++	mtlr	r0			/* Reset link register.  */
+ 	blr
+-
++Lendcode:
++	.align 1
++	
+ /* END(ffi_closure_ASM)  */
+ 
+-.data
+-.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
++/* EH frame stuff.  */
++#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78)
++/* 176, 400 */
++#define EH_FRAME_OFFSETA MODE_CHOICE(176,0x90)
++#define EH_FRAME_OFFSETB MODE_CHOICE(1,3)
++
++	.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
+ EH_frame1:
+ 	.set	L$set$0,LECIE1-LSCIE1
+ 	.long	L$set$0	; Length of Common Information Entry
+ LSCIE1:
+ 	.long	0x0	; CIE Identifier Tag
+ 	.byte	0x1	; CIE Version
+ 	.ascii	"zR\0"	; CIE Augmentation
+ 	.byte	0x1	; uleb128 0x1; CIE Code Alignment Factor
+-	.byte	0x7c	; sleb128 -4; CIE Data Alignment Factor
++	.byte	EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor
+ 	.byte	0x41	; CIE RA Column
+ 	.byte	0x1	; uleb128 0x1; Augmentation size
+-	.byte	0x90	; FDE Encoding (indirect pcrel)
++	.byte	0x10	; FDE Encoding (pcrel)
+ 	.byte	0xc	; DW_CFA_def_cfa
+ 	.byte	0x1	; uleb128 0x1
+ 	.byte	0x0	; uleb128 0x0
+ 	.align	LOG2_GPR_BYTES
+ LECIE1:
+-.globl _ffi_closure_ASM.eh
++	.globl _ffi_closure_ASM.eh
+ _ffi_closure_ASM.eh:
+ LSFDE1:
+ 	.set	L$set$1,LEFDE1-LASFDE1
+ 	.long	L$set$1	; FDE Length
+ 
+ LASFDE1:
+ 	.long	LASFDE1-EH_frame1	; FDE CIE offset
+-	.g_long	LLFB1$non_lazy_ptr-.	; FDE initial location
+-	.set	L$set$3,LFE1-LFB1
++	.g_long	Lstartcode-.	; FDE initial location
++	.set	L$set$3,LFE1-Lstartcode
+ 	.g_long	L$set$3	; FDE address range
+ 	.byte   0x0     ; uleb128 0x0; Augmentation size
+ 	.byte	0x4	; DW_CFA_advance_loc4
+ 	.set	L$set$3,LCFI1-LCFI0
+ 	.long	L$set$3
+ 	.byte	0xe	; DW_CFA_def_cfa_offset
+-	.byte	176,1	; uleb128 176
++	.byte	EH_FRAME_OFFSETA,EH_FRAME_OFFSETB	; uleb128 176,1/190,3
+ 	.byte	0x4	; DW_CFA_advance_loc4
+-	.set	L$set$4,LCFI0-LFB1
++	.set	L$set$4,LCFI0-Lstartcode
+ 	.long	L$set$4
+ 	.byte   0x11    ; DW_CFA_offset_extended_sf
+ 	.byte	0x41	; uleb128 0x41
+ 	.byte   0x7e    ; sleb128 -2
+ 	.align	LOG2_GPR_BYTES
+ LEFDE1:
+-.data
+-	.align	LOG2_GPR_BYTES
+-LDFCM0:
+-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+-	.align	LOG2_GPR_BYTES
+-Lffi_closure_helper_DARWIN$stub:
+-#if 1
++	.align 	1
++
++#ifdef WANT_STUB
++	.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
++	.align 5
++L_ffi_closure_helper_DARWIN$stub:
+ 	.indirect_symbol _ffi_closure_helper_DARWIN
+-	mflr	r0
+-	bcl	20,31,LO$ffi_closure_helper_DARWIN
+-LO$ffi_closure_helper_DARWIN:
+-	mflr	r11
+-	addis	r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)
+-	mtlr	r0
+-	lgu	r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11)
+-	mtctr	r12
++	mflr r0
++	bcl 20,31,"L1$spb"
++"L1$spb":
++	mflr r11
++	addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L1$spb")
++	mtlr r0
++	lwzu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L1$spb")(r11)
++	mtctr r12
+ 	bctr
+-.lazy_symbol_pointer
++	.lazy_symbol_pointer
+ L_ffi_closure_helper_DARWIN$lazy_ptr:
+ 	.indirect_symbol _ffi_closure_helper_DARWIN
+-	.g_long dyld_stub_binding_helper
++	.g_long	dyld_stub_binding_helper
++
++#if defined(__ppc64__)
++	.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
++	.align 5
++L_darwin64_struct_ret_by_value_p$stub:
++	.indirect_symbol _darwin64_struct_ret_by_value_p
++	mflr r0
++	bcl 20,31,"L2$spb"
++"L2$spb":
++	mflr r11
++	addis r11,r11,ha16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L2$spb")
++	mtlr r0
++	lwzu r12,lo16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L2$spb")(r11)
++	mtctr r12
++	bctr
++	.lazy_symbol_pointer
++L_darwin64_struct_ret_by_value_p$lazy_ptr:
++	.indirect_symbol _darwin64_struct_ret_by_value_p
++	.g_long	dyld_stub_binding_helper
++
++	.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
++	.align 5
++L_darwin64_pass_struct_floats$stub:
++	.indirect_symbol _darwin64_pass_struct_floats
++	mflr r0
++	bcl 20,31,"L3$spb"
++"L3$spb":
++	mflr r11
++	addis r11,r11,ha16(L_darwin64_pass_struct_floats$lazy_ptr-"L3$spb")
++	mtlr r0
++	lwzu r12,lo16(L_darwin64_pass_struct_floats$lazy_ptr-"L3$spb")(r11)
++	mtctr r12
++	bctr
++	.lazy_symbol_pointer
++L_darwin64_pass_struct_floats$lazy_ptr:
++	.indirect_symbol _darwin64_pass_struct_floats
++	.g_long	dyld_stub_binding_helper
++#  endif
+ #endif
+-.data
+-	.align LOG2_GPR_BYTES
+-LLFB1$non_lazy_ptr:
+-	.g_long LFB1
+diff --git a/js/src/ctypes/libffi/src/powerpc/ffi.c b/js/src/ctypes/libffi/src/powerpc/ffi.c
+--- a/js/src/ctypes/libffi/src/powerpc/ffi.c
++++ b/js/src/ctypes/libffi/src/powerpc/ffi.c
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (C) 2011 Anthony Green
++   ffi.c - Copyright (C) 2013 IBM
++           Copyright (C) 2011 Anthony Green
+            Copyright (C) 2011 Kyle Moffett
+            Copyright (C) 2008 Red Hat, Inc
+            Copyright (C) 2007, 2008 Free Software Foundation, Inc
+ 	   Copyright (c) 1998 Geoffrey Keating
+ 
+    PowerPC Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+@@ -22,1784 +23,119 @@
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ 
+-#include <ffi.h>
+-#include <ffi_common.h>
++#include "ffi.h"
++#include "ffi_common.h"
++#include "ffi_powerpc.h"
+ 
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-
+-extern void ffi_closure_SYSV (void);
+-extern void FFI_HIDDEN ffi_closure_LINUX64 (void);
+-
+-enum {
+-  /* The assembly depends on these exact flags.  */
+-  FLAG_RETURNS_SMST	= 1 << (31-31), /* Used for FFI_SYSV small structs.  */
+-  FLAG_RETURNS_NOTHING  = 1 << (31-30), /* These go in cr7 */
+-#ifndef __NO_FPRS__
+-  FLAG_RETURNS_FP       = 1 << (31-29),
+-#endif
+-  FLAG_RETURNS_64BITS   = 1 << (31-28),
+-
+-  FLAG_RETURNS_128BITS  = 1 << (31-27), /* cr6  */
+-
+-  FLAG_ARG_NEEDS_COPY   = 1 << (31- 7),
+-  FLAG_ARG_NEEDS_PSAVE  = FLAG_ARG_NEEDS_COPY, /* Used by ELFv2 */
+-#ifndef __NO_FPRS__
+-  FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI */
+-#endif
+-  FLAG_4_GPR_ARGUMENTS  = 1 << (31- 5),
+-  FLAG_RETVAL_REFERENCE = 1 << (31- 4)
+-};
+-
+-/* About the SYSV ABI.  */
+-#define ASM_NEEDS_REGISTERS 4
+-#define NUM_GPR_ARG_REGISTERS 8
+-#ifndef __NO_FPRS__
+-# define NUM_FPR_ARG_REGISTERS 8
+-#endif
+-
+-/* ffi_prep_args_SYSV is called by the assembly routine once stack space
+-   has been allocated for the function's arguments.
+-
+-   The stack layout we want looks like this:
+-
+-   |   Return address from ffi_call_SYSV 4bytes	|	higher addresses
+-   |--------------------------------------------|
+-   |   Previous backchain pointer	4	|       stack pointer here
+-   |--------------------------------------------|<+ <<<	on entry to
+-   |   Saved r28-r31			4*4	| |	ffi_call_SYSV
+-   |--------------------------------------------| |
+-   |   GPR registers r3-r10		8*4	| |	ffi_call_SYSV
+-   |--------------------------------------------| |
+-   |   FPR registers f1-f8 (optional)	8*8	| |
+-   |--------------------------------------------| |	stack	|
+-   |   Space for copied structures		| |	grows	|
+-   |--------------------------------------------| |	down    V
+-   |   Parameters that didn't fit in registers  | |
+-   |--------------------------------------------| |	lower addresses
+-   |   Space for callee's LR		4	| |
+-   |--------------------------------------------| |	stack pointer here
+-   |   Current backchain pointer	4	|-/	during
+-   |--------------------------------------------|   <<<	ffi_call_SYSV
+-
+-*/
+-
+-void
+-ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
++#if HAVE_LONG_DOUBLE_VARIANT
++/* Adjust ffi_type_longdouble.  */
++void FFI_HIDDEN
++ffi_prep_types (ffi_abi abi)
+ {
+-  const unsigned bytes = ecif->cif->bytes;
+-  const unsigned flags = ecif->cif->flags;
+-
+-  typedef union {
+-    char *c;
+-    unsigned *u;
+-    long long *ll;
+-    float *f;
+-    double *d;
+-  } valp;
+-
+-  /* 'stacktop' points at the previous backchain pointer.  */
+-  valp stacktop;
+-
+-  /* 'gpr_base' points at the space for gpr3, and grows upwards as
+-     we use GPR registers.  */
+-  valp gpr_base;
+-  int intarg_count;
+-
+-#ifndef __NO_FPRS__
+-  /* 'fpr_base' points at the space for fpr1, and grows upwards as
+-     we use FPR registers.  */
+-  valp fpr_base;
+-  int fparg_count;
+-#endif
+-
+-  /* 'copy_space' grows down as we put structures in it.  It should
+-     stay 16-byte aligned.  */
+-  valp copy_space;
+-
+-  /* 'next_arg' grows up as we put parameters in it.  */
+-  valp next_arg;
+-
+-  int i;
+-  ffi_type **ptr;
+-#ifndef __NO_FPRS__
+-  double double_tmp;
+-#endif
+-  union {
+-    void **v;
+-    char **c;
+-    signed char **sc;
+-    unsigned char **uc;
+-    signed short **ss;
+-    unsigned short **us;
+-    unsigned int **ui;
+-    long long **ll;
+-    float **f;
+-    double **d;
+-  } p_argv;
+-  size_t struct_copy_size;
+-  unsigned gprvalue;
+-
+-  stacktop.c = (char *) stack + bytes;
+-  gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
+-  intarg_count = 0;
+-#ifndef __NO_FPRS__
+-  fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
+-  fparg_count = 0;
+-  copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
+-#else
+-  copy_space.c = gpr_base.c;
+-#endif
+-  next_arg.u = stack + 2;
+-
+-  /* Check that everything starts aligned properly.  */
+-  FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
+-  FFI_ASSERT (((unsigned long) copy_space.c & 0xF) == 0);
+-  FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
+-  FFI_ASSERT ((bytes & 0xF) == 0);
+-  FFI_ASSERT (copy_space.c >= next_arg.c);
+-
+-  /* Deal with return values that are actually pass-by-reference.  */
+-  if (flags & FLAG_RETVAL_REFERENCE)
+-    {
+-      *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue;
+-      intarg_count++;
+-    }
+-
+-  /* Now for the arguments.  */
+-  p_argv.v = ecif->avalue;
+-  for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
+-       i > 0;
+-       i--, ptr++, p_argv.v++)
+-    {
+-      unsigned short typenum = (*ptr)->type;
+-
+-      /* We may need to handle some values depending on ABI */
+-      if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) {
+-		if (typenum == FFI_TYPE_FLOAT)
+-			typenum = FFI_TYPE_UINT32;
+-		if (typenum == FFI_TYPE_DOUBLE)
+-			typenum = FFI_TYPE_UINT64;
+-		if (typenum == FFI_TYPE_LONGDOUBLE)
+-			typenum = FFI_TYPE_UINT128;
+-      } else if (ecif->cif->abi != FFI_LINUX) {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-		if (typenum == FFI_TYPE_LONGDOUBLE)
+-			typenum = FFI_TYPE_STRUCT;
+-#endif
+-      }
+-
+-      /* Now test the translated value */
+-      switch (typenum) {
+-#ifndef __NO_FPRS__
+-	case FFI_TYPE_FLOAT:
+-	  /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32.  */
+-	  double_tmp = **p_argv.f;
+-	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+-	    {
+-	      *next_arg.f = (float) double_tmp;
+-	      next_arg.u += 1;
+-	      intarg_count++;
+-	    }
+-	  else
+-	    *fpr_base.d++ = double_tmp;
+-	  fparg_count++;
+-	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+-	  break;
+-
+-	case FFI_TYPE_DOUBLE:
+-	  /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64.  */
+-	  double_tmp = **p_argv.d;
+-
+-	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+-	    {
+-	      if (intarg_count >= NUM_GPR_ARG_REGISTERS
+-		  && intarg_count % 2 != 0)
+-		{
+-		  intarg_count++;
+-		  next_arg.u++;
+-		}
+-	      *next_arg.d = double_tmp;
+-	      next_arg.u += 2;
+-	    }
+-	  else
+-	    *fpr_base.d++ = double_tmp;
+-	  fparg_count++;
+-	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+-	  break;
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	case FFI_TYPE_LONGDOUBLE:
+-	      double_tmp = (*p_argv.d)[0];
+-
+-	      if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1)
+-		{
+-		  if (intarg_count >= NUM_GPR_ARG_REGISTERS
+-		      && intarg_count % 2 != 0)
+-		    {
+-		      intarg_count++;
+-		      next_arg.u++;
+-		    }
+-		  *next_arg.d = double_tmp;
+-		  next_arg.u += 2;
+-		  double_tmp = (*p_argv.d)[1];
+-		  *next_arg.d = double_tmp;
+-		  next_arg.u += 2;
+-		}
+-	      else
+-		{
+-		  *fpr_base.d++ = double_tmp;
+-		  double_tmp = (*p_argv.d)[1];
+-		  *fpr_base.d++ = double_tmp;
+-		}
+-
+-	      fparg_count += 2;
+-	      FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+-	  break;
+-#endif
+-#endif /* have FPRs */
+-
+-	/*
+-	 * The soft float ABI for long doubles works like this, a long double
+-	 * is passed in four consecutive GPRs if available.  A maximum of 2
+-	 * long doubles can be passed in gprs.  If we do not have 4 GPRs
+-	 * left, the long double is passed on the stack, 4-byte aligned.
+-	 */
+-	case FFI_TYPE_UINT128: {
+-		unsigned int int_tmp = (*p_argv.ui)[0];
+-		unsigned int ii;
+-		if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) {
+-			if (intarg_count < NUM_GPR_ARG_REGISTERS)
+-				intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count;
+-			*(next_arg.u++) = int_tmp;
+-			for (ii = 1; ii < 4; ii++) {
+-				int_tmp = (*p_argv.ui)[ii];
+-				*(next_arg.u++) = int_tmp;
+-			}
+-		} else {
+-			*(gpr_base.u++) = int_tmp;
+-			for (ii = 1; ii < 4; ii++) {
+-				int_tmp = (*p_argv.ui)[ii];
+-				*(gpr_base.u++) = int_tmp;
+-			}
+-		}
+-		intarg_count += 4;
+-		break;
+-	}
+-
+-	case FFI_TYPE_UINT64:
+-	case FFI_TYPE_SINT64:
+-	  if (intarg_count == NUM_GPR_ARG_REGISTERS-1)
+-	    intarg_count++;
+-	  if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+-	    {
+-	      if (intarg_count % 2 != 0)
+-		{
+-		  intarg_count++;
+-		  next_arg.u++;
+-		}
+-	      *next_arg.ll = **p_argv.ll;
+-	      next_arg.u += 2;
+-	    }
+-	  else
+-	    {
+-	      /* whoops: abi states only certain register pairs
+-	       * can be used for passing long long int
+-	       * specifically (r3,r4), (r5,r6), (r7,r8),
+-	       * (r9,r10) and if next arg is long long but
+-	       * not correct starting register of pair then skip
+-	       * until the proper starting register
+-	       */
+-	      if (intarg_count % 2 != 0)
+-		{
+-		  intarg_count ++;
+-		  gpr_base.u++;
+-		}
+-	      *gpr_base.ll++ = **p_argv.ll;
+-	    }
+-	  intarg_count += 2;
+-	  break;
+-
+-	case FFI_TYPE_STRUCT:
+-	  struct_copy_size = ((*ptr)->size + 15) & ~0xF;
+-	  copy_space.c -= struct_copy_size;
+-	  memcpy (copy_space.c, *p_argv.c, (*ptr)->size);
+-
+-	  gprvalue = (unsigned long) copy_space.c;
+-
+-	  FFI_ASSERT (copy_space.c > next_arg.c);
+-	  FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY);
+-	  goto putgpr;
+-
+-	case FFI_TYPE_UINT8:
+-	  gprvalue = **p_argv.uc;
+-	  goto putgpr;
+-	case FFI_TYPE_SINT8:
+-	  gprvalue = **p_argv.sc;
+-	  goto putgpr;
+-	case FFI_TYPE_UINT16:
+-	  gprvalue = **p_argv.us;
+-	  goto putgpr;
+-	case FFI_TYPE_SINT16:
+-	  gprvalue = **p_argv.ss;
+-	  goto putgpr;
+-
+-	case FFI_TYPE_INT:
+-	case FFI_TYPE_UINT32:
+-	case FFI_TYPE_SINT32:
+-	case FFI_TYPE_POINTER:
+-
+-	  gprvalue = **p_argv.ui;
+-
+-	putgpr:
+-	  if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+-	    *next_arg.u++ = gprvalue;
+-	  else
+-	    *gpr_base.u++ = gprvalue;
+-	  intarg_count++;
+-	  break;
+-	}
+-    }
+-
+-  /* Check that we didn't overrun the stack...  */
+-  FFI_ASSERT (copy_space.c >= next_arg.c);
+-  FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS);
+-  /* The assert below is testing that the number of integer arguments agrees
+-     with the number found in ffi_prep_cif_machdep().  However, intarg_count
+-     is incremented whenever we place an FP arg on the stack, so account for
+-     that before our assert test.  */
+-#ifndef __NO_FPRS__
+-  if (fparg_count > NUM_FPR_ARG_REGISTERS)
+-    intarg_count -= fparg_count - NUM_FPR_ARG_REGISTERS;
+-  FFI_ASSERT (fpr_base.u
+-	      <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
+-#endif
+-  FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
+-}
+-
+-/* About the LINUX64 ABI.  */
+-enum {
+-  NUM_GPR_ARG_REGISTERS64 = 8,
+-  NUM_FPR_ARG_REGISTERS64 = 13
+-};
+-enum { ASM_NEEDS_REGISTERS64 = 4 };
+-
+-#if _CALL_ELF == 2
+-static unsigned int
+-discover_homogeneous_aggregate (const ffi_type *t, unsigned int *elnum)
+-{
+-  switch (t->type)
+-    {
+-    case FFI_TYPE_FLOAT:
+-    case FFI_TYPE_DOUBLE:
+-      *elnum = 1;
+-      return (int) t->type;
+-
+-    case FFI_TYPE_STRUCT:;
+-      {
+-	unsigned int base_elt = 0, total_elnum = 0;
+-	ffi_type **el = t->elements;
+-	while (*el)
+-	  {
+-	    unsigned int el_elt, el_elnum = 0;
+-	    el_elt = discover_homogeneous_aggregate (*el, &el_elnum);
+-	    if (el_elt == 0
+-		|| (base_elt && base_elt != el_elt))
+-	      return 0;
+-	    base_elt = el_elt;
+-	    total_elnum += el_elnum;
+-	    if (total_elnum > 8)
+-	      return 0;
+-	    el++;
+-	  }
+-	*elnum = total_elnum;
+-	return base_elt;
+-      }
+-
+-    default:
+-      return 0;
+-    }
++# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++#  ifdef POWERPC64
++  ffi_prep_types_linux64 (abi);
++#  else
++  ffi_prep_types_sysv (abi);
++#  endif
++# endif
+ }
+ #endif
+ 
+-
+-/* ffi_prep_args64 is called by the assembly routine once stack space
+-   has been allocated for the function's arguments.
+-
+-   The stack layout we want looks like this:
+-
+-   |   Ret addr from ffi_call_LINUX64	8bytes	|	higher addresses
+-   |--------------------------------------------|
+-   |   CR save area			8bytes	|
+-   |--------------------------------------------|
+-   |   Previous backchain pointer	8	|	stack pointer here
+-   |--------------------------------------------|<+ <<<	on entry to
+-   |   Saved r28-r31			4*8	| |	ffi_call_LINUX64
+-   |--------------------------------------------| |
+-   |   GPR registers r3-r10		8*8	| |
+-   |--------------------------------------------| |
+-   |   FPR registers f1-f13 (optional)	13*8	| |
+-   |--------------------------------------------| |
+-   |   Parameter save area		        | |
+-   |--------------------------------------------| |
+-   |   TOC save area			8	| |
+-   |--------------------------------------------| |	stack	|
+-   |   Linker doubleword		8	| |	grows	|
+-   |--------------------------------------------| |	down	V
+-   |   Compiler doubleword		8	| |
+-   |--------------------------------------------| |	lower addresses
+-   |   Space for callee's LR		8	| |
+-   |--------------------------------------------| |
+-   |   CR save area			8	| |
+-   |--------------------------------------------| |	stack pointer here
+-   |   Current backchain pointer	8	|-/	during
+-   |--------------------------------------------|   <<<	ffi_call_LINUX64
+-
+-*/
+-
+-void FFI_HIDDEN
+-ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
++/* Perform machine dependent cif processing */
++ffi_status FFI_HIDDEN
++ffi_prep_cif_machdep (ffi_cif *cif)
+ {
+-  const unsigned long bytes = ecif->cif->bytes;
+-  const unsigned long flags = ecif->cif->flags;
+-
+-  typedef union {
+-    char *c;
+-    unsigned long *ul;
+-    float *f;
+-    double *d;
+-    size_t p;
+-  } valp;
+-
+-  /* 'stacktop' points at the previous backchain pointer.  */
+-  valp stacktop;
+-
+-  /* 'next_arg' points at the space for gpr3, and grows upwards as
+-     we use GPR registers, then continues at rest.  */
+-  valp gpr_base;
+-  valp gpr_end;
+-  valp rest;
+-  valp next_arg;
+-
+-  /* 'fpr_base' points at the space for fpr3, and grows upwards as
+-     we use FPR registers.  */
+-  valp fpr_base;
+-  unsigned int fparg_count;
+-
+-  unsigned int i, words, nargs, nfixedargs;
+-  ffi_type **ptr;
+-  double double_tmp;
+-  union {
+-    void **v;
+-    char **c;
+-    signed char **sc;
+-    unsigned char **uc;
+-    signed short **ss;
+-    unsigned short **us;
+-    signed int **si;
+-    unsigned int **ui;
+-    unsigned long **ul;
+-    float **f;
+-    double **d;
+-  } p_argv;
+-  unsigned long gprvalue;
+-#ifdef __STRUCT_PARM_ALIGN__
+-  unsigned long align;
++#ifdef POWERPC64
++  return ffi_prep_cif_linux64 (cif);
++#else
++  return ffi_prep_cif_sysv (cif);
+ #endif
+-
+-  stacktop.c = (char *) stack + bytes;
+-  gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64;
+-  gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64;
+-#if _CALL_ELF == 2
+-  rest.ul = stack + 4 + NUM_GPR_ARG_REGISTERS64;
+-#else
+-  rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64;
+-#endif
+-  fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64;
+-  fparg_count = 0;
+-  next_arg.ul = gpr_base.ul;
+-
+-  /* Check that everything starts aligned properly.  */
+-  FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
+-  FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
+-  FFI_ASSERT ((bytes & 0xF) == 0);
+-
+-  /* Deal with return values that are actually pass-by-reference.  */
+-  if (flags & FLAG_RETVAL_REFERENCE)
+-    *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue;
+-
+-  /* Now for the arguments.  */
+-  p_argv.v = ecif->avalue;
+-  nargs = ecif->cif->nargs;
+-  nfixedargs = ecif->cif->nfixedargs;
+-  for (ptr = ecif->cif->arg_types, i = 0;
+-       i < nargs;
+-       i++, ptr++, p_argv.v++)
+-    {
+-      unsigned int elt, elnum;
+-
+-      switch ((*ptr)->type)
+-	{
+-	case FFI_TYPE_FLOAT:
+-	  double_tmp = **p_argv.f;
+-	  if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+-	    *fpr_base.d++ = double_tmp;
+-	  else
+-	    *next_arg.f = (float) double_tmp;
+-	  if (++next_arg.ul == gpr_end.ul)
+-	    next_arg.ul = rest.ul;
+-	  fparg_count++;
+-	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+-	  break;
+-
+-	case FFI_TYPE_DOUBLE:
+-	  double_tmp = **p_argv.d;
+-	  if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+-	    *fpr_base.d++ = double_tmp;
+-	  else
+-	    *next_arg.d = double_tmp;
+-	  if (++next_arg.ul == gpr_end.ul)
+-	    next_arg.ul = rest.ul;
+-	  fparg_count++;
+-	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+-	  break;
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	case FFI_TYPE_LONGDOUBLE:
+-	  double_tmp = (*p_argv.d)[0];
+-	  if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+-	    *fpr_base.d++ = double_tmp;
+-	  else
+-	    *next_arg.d = double_tmp;
+-	  if (++next_arg.ul == gpr_end.ul)
+-	    next_arg.ul = rest.ul;
+-	  fparg_count++;
+-	  double_tmp = (*p_argv.d)[1];
+-	  if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+-	    *fpr_base.d++ = double_tmp;
+-	  else
+-	    *next_arg.d = double_tmp;
+-	  if (++next_arg.ul == gpr_end.ul)
+-	    next_arg.ul = rest.ul;
+-	  fparg_count++;
+-	  FFI_ASSERT (__LDBL_MANT_DIG__ == 106);
+-	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+-	  break;
+-#endif
+-
+-	case FFI_TYPE_STRUCT:
+-#ifdef __STRUCT_PARM_ALIGN__
+-	  align = (*ptr)->alignment;
+-	  if (align > __STRUCT_PARM_ALIGN__)
+-	    align = __STRUCT_PARM_ALIGN__;
+-	  if (align > 1)
+-	    next_arg.p = ALIGN (next_arg.p, align);
+-#endif
+-	  elt = 0;
+-#if _CALL_ELF == 2
+-	  elt = discover_homogeneous_aggregate (*ptr, &elnum);
+-#endif
+-	  if (elt)
+-	    {
+-	      union {
+-		void *v;
+-		float *f;
+-		double *d;
+-	      } arg;
+-
+-	      arg.v = *p_argv.v;
+-	      if (elt == FFI_TYPE_FLOAT)
+-		{
+-		  do
+-		    {
+-		      double_tmp = *arg.f++;
+-		      if (fparg_count < NUM_FPR_ARG_REGISTERS64
+-			  && i < nfixedargs)
+-			*fpr_base.d++ = double_tmp;
+-		      else
+-			*next_arg.f = (float) double_tmp;
+-		      if (++next_arg.f == gpr_end.f)
+-			next_arg.f = rest.f;
+-		      fparg_count++;
+-		    }
+-		  while (--elnum != 0);
+-		  if ((next_arg.p & 3) != 0)
+-		    {
+-		      if (++next_arg.f == gpr_end.f)
+-			next_arg.f = rest.f;
+-		    }
+-		}
+-	      else
+-		do
+-		  {
+-		    double_tmp = *arg.d++;
+-		    if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
+-		      *fpr_base.d++ = double_tmp;
+-		    else
+-		      *next_arg.d = double_tmp;
+-		    if (++next_arg.d == gpr_end.d)
+-		      next_arg.d = rest.d;
+-		    fparg_count++;
+-		  }
+-		while (--elnum != 0);
+-	    }
+-	  else
+-	    {
+-	      words = ((*ptr)->size + 7) / 8;
+-	      if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul)
+-		{
+-		  size_t first = gpr_end.c - next_arg.c;
+-		  memcpy (next_arg.c, *p_argv.c, first);
+-		  memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first);
+-		  next_arg.c = rest.c + words * 8 - first;
+-		}
+-	      else
+-		{
+-		  char *where = next_arg.c;
+-
+-#ifndef __LITTLE_ENDIAN__
+-		  /* Structures with size less than eight bytes are passed
+-		     left-padded.  */
+-		  if ((*ptr)->size < 8)
+-		    where += 8 - (*ptr)->size;
+-#endif
+-		  memcpy (where, *p_argv.c, (*ptr)->size);
+-		  next_arg.ul += words;
+-		  if (next_arg.ul == gpr_end.ul)
+-		    next_arg.ul = rest.ul;
+-		}
+-	    }
+-	  break;
+-
+-	case FFI_TYPE_UINT8:
+-	  gprvalue = **p_argv.uc;
+-	  goto putgpr;
+-	case FFI_TYPE_SINT8:
+-	  gprvalue = **p_argv.sc;
+-	  goto putgpr;
+-	case FFI_TYPE_UINT16:
+-	  gprvalue = **p_argv.us;
+-	  goto putgpr;
+-	case FFI_TYPE_SINT16:
+-	  gprvalue = **p_argv.ss;
+-	  goto putgpr;
+-	case FFI_TYPE_UINT32:
+-	  gprvalue = **p_argv.ui;
+-	  goto putgpr;
+-	case FFI_TYPE_INT:
+-	case FFI_TYPE_SINT32:
+-	  gprvalue = **p_argv.si;
+-	  goto putgpr;
+-
+-	case FFI_TYPE_UINT64:
+-	case FFI_TYPE_SINT64:
+-	case FFI_TYPE_POINTER:
+-	  gprvalue = **p_argv.ul;
+-	putgpr:
+-	  *next_arg.ul++ = gprvalue;
+-	  if (next_arg.ul == gpr_end.ul)
+-	    next_arg.ul = rest.ul;
+-	  break;
+-	}
+-    }
+-
+-  FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS
+-	      || (next_arg.ul >= gpr_base.ul
+-		  && next_arg.ul <= gpr_base.ul + 4));
+ }
+ 
+-
+-
+-/* Perform machine dependent cif processing */
+-static ffi_status
+-ffi_prep_cif_machdep_core (ffi_cif *cif)
+-{
+-  /* All this is for the SYSV and LINUX64 ABI.  */
+-  ffi_type **ptr;
+-  unsigned bytes;
+-  unsigned i, fparg_count = 0, intarg_count = 0;
+-  unsigned flags = cif->flags;
+-  unsigned struct_copy_size = 0;
+-  unsigned type = cif->rtype->type;
+-  unsigned size = cif->rtype->size;
+-
+-  /* The machine-independent calculation of cif->bytes doesn't work
+-     for us.  Redo the calculation.  */
+-  if (cif->abi != FFI_LINUX64)
+-    {
+-      /* Space for the frame pointer, callee's LR, and the asm's temp regs.  */
+-      bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int);
+-
+-      /* Space for the GPR registers.  */
+-      bytes += NUM_GPR_ARG_REGISTERS * sizeof (int);
+-    }
+-  else
+-    {
+-      /* 64-bit ABI.  */
+-#if _CALL_ELF == 2
+-      /* Space for backchain, CR, LR, TOC and the asm's temp regs.  */
+-      bytes = (4 + ASM_NEEDS_REGISTERS64) * sizeof (long);
+-
+-      /* Space for the general registers.  */
+-      bytes += NUM_GPR_ARG_REGISTERS64 * sizeof (long);
+-#else
+-      /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp
+-	 regs.  */
+-      bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long);
+-
+-      /* Space for the mandatory parm save area and general registers.  */
+-      bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long);
+-#endif
+-    }
+-
+-  /* Return value handling.  The rules for SYSV are as follows:
+-     - 32-bit (or less) integer values are returned in gpr3;
+-     - Structures of size <= 4 bytes also returned in gpr3;
+-     - 64-bit integer values and structures between 5 and 8 bytes are returned
+-     in gpr3 and gpr4;
+-     - Single/double FP values are returned in fpr1;
+-     - Larger structures are allocated space and a pointer is passed as
+-     the first argument.
+-     - long doubles (if not equivalent to double) are returned in
+-     fpr1,fpr2 for Linux and as for large structs for SysV.
+-     For LINUX64:
+-     - integer values in gpr3;
+-     - Structures/Unions by reference;
+-     - Single/double FP values in fpr1, long double in fpr1,fpr2.
+-     - soft-float float/doubles are treated as UINT32/UINT64 respectivley.
+-     - soft-float long doubles are returned in gpr3-gpr6.  */
+-  /* First translate for softfloat/nonlinux */
+-  if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+-    {
+-      if (type == FFI_TYPE_FLOAT)
+-	type = FFI_TYPE_UINT32;
+-      if (type == FFI_TYPE_DOUBLE)
+-	type = FFI_TYPE_UINT64;
+-      if (type == FFI_TYPE_LONGDOUBLE)
+-	type = FFI_TYPE_UINT128;
+-    }
+-  else if (cif->abi != FFI_LINUX
+-	   && cif->abi != FFI_LINUX64)
+-    {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-      if (type == FFI_TYPE_LONGDOUBLE)
+-	type = FFI_TYPE_STRUCT;
+-#endif
+-    }
+-
+-  switch (type)
+-    {
+-#ifndef __NO_FPRS__
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-    case FFI_TYPE_LONGDOUBLE:
+-      flags |= FLAG_RETURNS_128BITS;
+-      /* Fall through.  */
+-#endif
+-    case FFI_TYPE_DOUBLE:
+-      flags |= FLAG_RETURNS_64BITS;
+-      /* Fall through.  */
+-    case FFI_TYPE_FLOAT:
+-      flags |= FLAG_RETURNS_FP;
+-      break;
+-#endif
+-
+-    case FFI_TYPE_UINT128:
+-      flags |= FLAG_RETURNS_128BITS;
+-      /* Fall through.  */
+-    case FFI_TYPE_UINT64:
+-    case FFI_TYPE_SINT64:
+-      flags |= FLAG_RETURNS_64BITS;
+-      break;
+-
+-    case FFI_TYPE_STRUCT:
+-      /*
+-       * The final SYSV ABI says that structures smaller or equal 8 bytes
+-       * are returned in r3/r4.  The FFI_GCC_SYSV ABI instead returns them
+-       * in memory.
+-       *
+-       * NOTE: The assembly code can safely assume that it just needs to
+-       *       store both r3 and r4 into a 8-byte word-aligned buffer, as
+-       *       we allocate a temporary buffer in ffi_call() if this flag is
+-       *       set.
+-       */
+-      if (cif->abi == FFI_SYSV && size <= 8)
+-	{
+-	  flags |= FLAG_RETURNS_SMST;
+-	  break;
+-	}
+-#if _CALL_ELF == 2
+-      if (cif->abi == FFI_LINUX64)
+-	{
+-	  unsigned int elt, elnum;
+-	  elt = discover_homogeneous_aggregate (cif->rtype, &elnum);
+-	  if (elt)
+-	    {
+-	      if (elt == FFI_TYPE_DOUBLE)
+-		flags |= FLAG_RETURNS_64BITS;
+-	      flags |= FLAG_RETURNS_FP | FLAG_RETURNS_SMST;
+-	      break;
+-	    }
+-	  if (size <= 16)
+-	    {
+-	      flags |= FLAG_RETURNS_SMST;
+-	      break;
+-	    }
+-	}
+-#endif
+-      intarg_count++;
+-      flags |= FLAG_RETVAL_REFERENCE;
+-      /* Fall through.  */
+-    case FFI_TYPE_VOID:
+-      flags |= FLAG_RETURNS_NOTHING;
+-      break;
+-
+-    default:
+-      /* Returns 32-bit integer, or similar.  Nothing to do here.  */
+-      break;
+-    }
+-
+-  if (cif->abi != FFI_LINUX64)
+-    /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
+-       first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
+-       goes on the stack.  Structures and long doubles (if not equivalent
+-       to double) are passed as a pointer to a copy of the structure.
+-       Stuff on the stack needs to keep proper alignment.  */
+-    for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+-      {
+-	unsigned short typenum = (*ptr)->type;
+-
+-	/* We may need to handle some values depending on ABI */
+-	if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
+-		if (typenum == FFI_TYPE_FLOAT)
+-			typenum = FFI_TYPE_UINT32;
+-		if (typenum == FFI_TYPE_DOUBLE)
+-			typenum = FFI_TYPE_UINT64;
+-		if (typenum == FFI_TYPE_LONGDOUBLE)
+-			typenum = FFI_TYPE_UINT128;
+-	} else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-		if (typenum == FFI_TYPE_LONGDOUBLE)
+-			typenum = FFI_TYPE_STRUCT;
+-#endif
+-	}
+-
+-	switch (typenum) {
+-#ifndef __NO_FPRS__
+-	  case FFI_TYPE_FLOAT:
+-	    fparg_count++;
+-	    /* floating singles are not 8-aligned on stack */
+-	    break;
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	  case FFI_TYPE_LONGDOUBLE:
+-	    fparg_count++;
+-	    /* Fall thru */
+-#endif
+-	  case FFI_TYPE_DOUBLE:
+-	    fparg_count++;
+-	    /* If this FP arg is going on the stack, it must be
+-	       8-byte-aligned.  */
+-	    if (fparg_count > NUM_FPR_ARG_REGISTERS
+-		&& intarg_count >= NUM_GPR_ARG_REGISTERS
+-		&& intarg_count % 2 != 0)
+-	      intarg_count++;
+-	    break;
+-#endif
+-	  case FFI_TYPE_UINT128:
+-		/*
+-		 * A long double in FFI_LINUX_SOFT_FLOAT can use only a set
+-		 * of four consecutive gprs. If we do not have enough, we
+-		 * have to adjust the intarg_count value.
+-		 */
+-		if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3
+-				&& intarg_count < NUM_GPR_ARG_REGISTERS)
+-			intarg_count = NUM_GPR_ARG_REGISTERS;
+-		intarg_count += 4;
+-		break;
+-
+-	  case FFI_TYPE_UINT64:
+-	  case FFI_TYPE_SINT64:
+-	    /* 'long long' arguments are passed as two words, but
+-	       either both words must fit in registers or both go
+-	       on the stack.  If they go on the stack, they must
+-	       be 8-byte-aligned.
+-
+-	       Also, only certain register pairs can be used for
+-	       passing long long int -- specifically (r3,r4), (r5,r6),
+-	       (r7,r8), (r9,r10).
+-	    */
+-	    if (intarg_count == NUM_GPR_ARG_REGISTERS-1
+-		|| intarg_count % 2 != 0)
+-	      intarg_count++;
+-	    intarg_count += 2;
+-	    break;
+-
+-	  case FFI_TYPE_STRUCT:
+-	    /* We must allocate space for a copy of these to enforce
+-	       pass-by-value.  Pad the space up to a multiple of 16
+-	       bytes (the maximum alignment required for anything under
+-	       the SYSV ABI).  */
+-	    struct_copy_size += ((*ptr)->size + 15) & ~0xF;
+-	    /* Fall through (allocate space for the pointer).  */
+-
+-	  case FFI_TYPE_POINTER:
+-	  case FFI_TYPE_INT:
+-	  case FFI_TYPE_UINT32:
+-	  case FFI_TYPE_SINT32:
+-	  case FFI_TYPE_UINT16:
+-	  case FFI_TYPE_SINT16:
+-	  case FFI_TYPE_UINT8:
+-	  case FFI_TYPE_SINT8:
+-	    /* Everything else is passed as a 4-byte word in a GPR, either
+-	       the object itself or a pointer to it.  */
+-	    intarg_count++;
+-	    break;
+-	  default:
+-		FFI_ASSERT (0);
+-	  }
+-      }
+-  else
+-    for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+-      {
+-	unsigned int elt, elnum;
+-#ifdef __STRUCT_PARM_ALIGN__
+-	unsigned int align;
+-#endif
+-
+-	switch ((*ptr)->type)
+-	  {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	  case FFI_TYPE_LONGDOUBLE:
+-	    fparg_count += 2;
+-	    intarg_count += 2;
+-	    if (fparg_count > NUM_FPR_ARG_REGISTERS64)
+-	      flags |= FLAG_ARG_NEEDS_PSAVE;
+-	    break;
+-#endif
+-	  case FFI_TYPE_FLOAT:
+-	  case FFI_TYPE_DOUBLE:
+-	    fparg_count++;
+-	    intarg_count++;
+-	    if (fparg_count > NUM_FPR_ARG_REGISTERS64)
+-	      flags |= FLAG_ARG_NEEDS_PSAVE;
+-	    break;
+-
+-	  case FFI_TYPE_STRUCT:
+-#ifdef __STRUCT_PARM_ALIGN__
+-	    align = (*ptr)->alignment;
+-	    if (align > __STRUCT_PARM_ALIGN__)
+-	      align = __STRUCT_PARM_ALIGN__;
+-	    align = align / 8;
+-	    if (align > 1)
+-	      intarg_count = ALIGN (intarg_count, align);
+-#endif
+-	    intarg_count += ((*ptr)->size + 7) / 8;
+-	    elt = 0;
+-#if _CALL_ELF == 2
+-	    elt = discover_homogeneous_aggregate (*ptr, &elnum);
+-#endif
+-	    if (elt)
+-	      {
+-		fparg_count += elnum;
+-		if (fparg_count > NUM_FPR_ARG_REGISTERS64)
+-		  flags |= FLAG_ARG_NEEDS_PSAVE;
+-	      }
+-	    else
+-	      {
+-		if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+-		  flags |= FLAG_ARG_NEEDS_PSAVE;
+-	      }
+-	    break;
+-
+-	  case FFI_TYPE_POINTER:
+-	  case FFI_TYPE_UINT64:
+-	  case FFI_TYPE_SINT64:
+-	  case FFI_TYPE_INT:
+-	  case FFI_TYPE_UINT32:
+-	  case FFI_TYPE_SINT32:
+-	  case FFI_TYPE_UINT16:
+-	  case FFI_TYPE_SINT16:
+-	  case FFI_TYPE_UINT8:
+-	  case FFI_TYPE_SINT8:
+-	    /* Everything else is passed as a 8-byte word in a GPR, either
+-	       the object itself or a pointer to it.  */
+-	    intarg_count++;
+-	    if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+-	      flags |= FLAG_ARG_NEEDS_PSAVE;
+-	    break;
+-	  default:
+-	    FFI_ASSERT (0);
+-	  }
+-      }
+-
+-#ifndef __NO_FPRS__
+-  if (fparg_count != 0)
+-    flags |= FLAG_FP_ARGUMENTS;
+-#endif
+-  if (intarg_count > 4)
+-    flags |= FLAG_4_GPR_ARGUMENTS;
+-  if (struct_copy_size != 0)
+-    flags |= FLAG_ARG_NEEDS_COPY;
+-
+-  if (cif->abi != FFI_LINUX64)
+-    {
+-#ifndef __NO_FPRS__
+-      /* Space for the FPR registers, if needed.  */
+-      if (fparg_count != 0)
+-	bytes += NUM_FPR_ARG_REGISTERS * sizeof (double);
+-#endif
+-
+-      /* Stack space.  */
+-      if (intarg_count > NUM_GPR_ARG_REGISTERS)
+-	bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int);
+-#ifndef __NO_FPRS__
+-      if (fparg_count > NUM_FPR_ARG_REGISTERS)
+-	bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double);
+-#endif
+-    }
+-  else
+-    {
+-#ifndef __NO_FPRS__
+-      /* Space for the FPR registers, if needed.  */
+-      if (fparg_count != 0)
+-	bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double);
+-#endif
+-
+-      /* Stack space.  */
+-#if _CALL_ELF == 2
+-      if ((flags & FLAG_ARG_NEEDS_PSAVE) != 0)
+-	bytes += intarg_count * sizeof (long);
+-#else
+-      if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+-	bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long);
+-#endif
+-    }
+-
+-  /* The stack space allocated needs to be a multiple of 16 bytes.  */
+-  bytes = (bytes + 15) & ~0xF;
+-
+-  /* Add in the space for the copied structures.  */
+-  bytes += struct_copy_size;
+-
+-  cif->flags = flags;
+-  cif->bytes = bytes;
+-
+-  return FFI_OK;
+-}
+-
+-ffi_status
+-ffi_prep_cif_machdep (ffi_cif *cif)
+-{
+-  cif->nfixedargs = cif->nargs;
+-  return ffi_prep_cif_machdep_core (cif);
+-}
+-
+-ffi_status
++ffi_status FFI_HIDDEN
+ ffi_prep_cif_machdep_var (ffi_cif *cif,
+-			  unsigned int nfixedargs,
++			  unsigned int nfixedargs MAYBE_UNUSED,
+ 			  unsigned int ntotalargs MAYBE_UNUSED)
+ {
+-  cif->nfixedargs = nfixedargs;
+-#if _CALL_ELF == 2
+-  if (cif->abi == FFI_LINUX64)
+-    cif->flags |= FLAG_ARG_NEEDS_PSAVE;
++#ifdef POWERPC64
++  return ffi_prep_cif_linux64_var (cif, nfixedargs, ntotalargs);
++#else
++  return ffi_prep_cif_sysv (cif);
+ #endif
+-  return ffi_prep_cif_machdep_core (cif);
+ }
+ 
+-extern void ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *,
+-			  void (*fn)(void));
+-extern void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long,
+-					unsigned long, unsigned long *,
+-					void (*fn)(void));
+-
+ void
+ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
+-  /*
+-   * The final SYSV ABI says that structures smaller or equal 8 bytes
+-   * are returned in r3/r4.  The FFI_GCC_SYSV ABI instead returns them
+-   * in memory.
+-   *
+-   * We bounce-buffer SYSV small struct return values so that sysv.S
+-   * can write r3 and r4 to memory without worrying about struct size.
+-   *
+-   * For ELFv2 ABI, use a bounce buffer for homogeneous structs too,
+-   * for similar reasons.
+-   */
++  /* The final SYSV ABI says that structures smaller or equal 8 bytes
++     are returned in r3/r4.  A draft ABI used by linux instead returns
++     them in memory.
++
++     We bounce-buffer SYSV small struct return values so that sysv.S
++     can write r3 and r4 to memory without worrying about struct size.
++   
++     For ELFv2 ABI, use a bounce buffer for homogeneous structs too,
++     for similar reasons.  */
+   unsigned long smst_buffer[8];
+   extended_cif ecif;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+ 
+   ecif.rvalue = rvalue;
+   if ((cif->flags & FLAG_RETURNS_SMST) != 0)
+     ecif.rvalue = smst_buffer;
+   /* Ensure that we have a valid struct return value.
+      FIXME: Isn't this just papering over a user problem?  */
+   else if (!rvalue && cif->rtype->type == FFI_TYPE_STRUCT)
+     ecif.rvalue = alloca (cif->rtype->size);
+ 
+-  switch (cif->abi)
+-    {
+-#ifndef POWERPC64
+-# ifndef __NO_FPRS__
+-    case FFI_SYSV:
+-    case FFI_GCC_SYSV:
+-    case FFI_LINUX:
+-# endif
+-    case FFI_LINUX_SOFT_FLOAT:
+-      ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn);
+-      break;
++#ifdef POWERPC64
++  ffi_call_LINUX64 (&ecif, -(long) cif->bytes, cif->flags, ecif.rvalue, fn);
+ #else
+-    case FFI_LINUX64:
+-      ffi_call_LINUX64 (&ecif, -(long) cif->bytes, cif->flags, ecif.rvalue, fn);
+-      break;
++  ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn);
+ #endif
+-    default:
+-      FFI_ASSERT (0);
+-      break;
+-    }
+ 
+   /* Check for a bounce-buffered return value */
+   if (rvalue && ecif.rvalue == smst_buffer)
+     {
+       unsigned int rsize = cif->rtype->size;
+ #ifndef __LITTLE_ENDIAN__
+       /* The SYSV ABI returns a structure of up to 4 bytes in size
+ 	 left-padded in r3.  */
+-      if (cif->abi == FFI_SYSV && rsize <= 4)
++# ifndef POWERPC64
++      if (rsize <= 4)
+ 	memcpy (rvalue, (char *) smst_buffer + 4 - rsize, rsize);
+-      /* The SYSV ABI returns a structure of up to 8 bytes in size
+-	 left-padded in r3/r4, and the ELFv2 ABI similarly returns a
+-	 structure of up to 8 bytes in size left-padded in r3.  */
+-      else if (rsize <= 8)
+-	memcpy (rvalue, (char *) smst_buffer + 8 - rsize, rsize);
+       else
++# endif
++	/* The SYSV ABI returns a structure of up to 8 bytes in size
++	   left-padded in r3/r4, and the ELFv2 ABI similarly returns a
++	   structure of up to 8 bytes in size left-padded in r3.  */
++	if (rsize <= 8)
++	  memcpy (rvalue, (char *) smst_buffer + 8 - rsize, rsize);
++	else
+ #endif
+-	memcpy (rvalue, smst_buffer, rsize);
++	  memcpy (rvalue, smst_buffer, rsize);
+     }
+ }
+ 
+ 
+-#if !defined POWERPC64 || _CALL_ELF == 2
+-#define MIN_CACHE_LINE_SIZE 8
+-
+-static void
+-flush_icache (char *wraddr, char *xaddr, int size)
+-{
+-  int i;
+-  for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
+-    __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
+-		      : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
+-  __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
+-		    : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
+-		    : "memory");
+-}
+-#endif
+-
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure *closure,
+ 		      ffi_cif *cif,
+ 		      void (*fun) (ffi_cif *, void *, void **, void *),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+ #ifdef POWERPC64
+-# if _CALL_ELF == 2
+-  unsigned int *tramp = (unsigned int *) &closure->tramp[0];
+-
+-  if (cif->abi != FFI_LINUX64)
+-    return FFI_BAD_ABI;
+-
+-  tramp[0] = 0xe96c0018;	/* 0:	ld	11,2f-0b(12)	*/
+-  tramp[1] = 0xe98c0010;	/*	ld	12,1f-0b(12)	*/
+-  tramp[2] = 0x7d8903a6;	/*	mtctr	12		*/
+-  tramp[3] = 0x4e800420;	/*	bctr			*/
+-				/* 1:	.quad	function_addr	*/
+-				/* 2:	.quad	context		*/
+-  *(void **) &tramp[4] = (void *) ffi_closure_LINUX64;
+-  *(void **) &tramp[6] = codeloc;
+-  flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
+-# else
+-  void **tramp = (void **) &closure->tramp[0];
+-
+-  if (cif->abi != FFI_LINUX64)
+-    return FFI_BAD_ABI;
+-  /* Copy function address and TOC from ffi_closure_LINUX64.  */
+-  memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
+-  tramp[2] = codeloc;
+-# endif
++  return ffi_prep_closure_loc_linux64 (closure, cif, fun, user_data, codeloc);
+ #else
+-  unsigned int *tramp;
+-
+-  if (! (cif->abi == FFI_GCC_SYSV 
+-	 || cif->abi == FFI_SYSV
+-	 || cif->abi == FFI_LINUX
+-	 || cif->abi == FFI_LINUX_SOFT_FLOAT))
+-    return FFI_BAD_ABI;
+-
+-  tramp = (unsigned int *) &closure->tramp[0];
+-  tramp[0] = 0x7c0802a6;  /*   mflr    r0 */
+-  tramp[1] = 0x4800000d;  /*   bl      10 <trampoline_initial+0x10> */
+-  tramp[4] = 0x7d6802a6;  /*   mflr    r11 */
+-  tramp[5] = 0x7c0803a6;  /*   mtlr    r0 */
+-  tramp[6] = 0x800b0000;  /*   lwz     r0,0(r11) */
+-  tramp[7] = 0x816b0004;  /*   lwz     r11,4(r11) */
+-  tramp[8] = 0x7c0903a6;  /*   mtctr   r0 */
+-  tramp[9] = 0x4e800420;  /*   bctr */
+-  *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */
+-  *(void **) &tramp[3] = codeloc;                   /* context */
+-
+-  /* Flush the icache.  */
+-  flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
++  return ffi_prep_closure_loc_sysv (closure, cif, fun, user_data, codeloc);
+ #endif
+-
+-  closure->cif = cif;
+-  closure->fun = fun;
+-  closure->user_data = user_data;
+-
+-  return FFI_OK;
+ }
+-
+-typedef union
+-{
+-  float f;
+-  double d;
+-} ffi_dblfl;
+-
+-int ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *,
+-			     ffi_dblfl *, unsigned long *);
+-
+-/* Basically the trampoline invokes ffi_closure_SYSV, and on
+- * entry, r11 holds the address of the closure.
+- * After storing the registers that could possibly contain
+- * parameters to be passed into the stack frame and setting
+- * up space for a return value, ffi_closure_SYSV invokes the
+- * following helper function to do most of the work
+- */
+-
+-int
+-ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
+-			 unsigned long *pgr, ffi_dblfl *pfr,
+-			 unsigned long *pst)
+-{
+-  /* rvalue is the pointer to space for return value in closure assembly */
+-  /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
+-  /* pfr is the pointer to where f1-f8 are stored in ffi_closure_SYSV  */
+-  /* pst is the pointer to outgoing parameter stack in original caller */
+-
+-  void **          avalue;
+-  ffi_type **      arg_types;
+-  long             i, avn;
+-#ifndef __NO_FPRS__
+-  long             nf = 0;   /* number of floating registers already used */
+-#endif
+-  long             ng = 0;   /* number of general registers already used */
+-
+-  ffi_cif *cif = closure->cif;
+-  unsigned       size     = cif->rtype->size;
+-  unsigned short rtypenum = cif->rtype->type;
+-
+-  avalue = alloca (cif->nargs * sizeof (void *));
+-
+-  /* First translate for softfloat/nonlinux */
+-  if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
+-	if (rtypenum == FFI_TYPE_FLOAT)
+-		rtypenum = FFI_TYPE_UINT32;
+-	if (rtypenum == FFI_TYPE_DOUBLE)
+-		rtypenum = FFI_TYPE_UINT64;
+-	if (rtypenum == FFI_TYPE_LONGDOUBLE)
+-		rtypenum = FFI_TYPE_UINT128;
+-  } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	if (rtypenum == FFI_TYPE_LONGDOUBLE)
+-		rtypenum = FFI_TYPE_STRUCT;
+-#endif
+-  }
+-
+-
+-  /* Copy the caller's structure return value address so that the closure
+-     returns the data directly to the caller.
+-     For FFI_SYSV the result is passed in r3/r4 if the struct size is less
+-     or equal 8 bytes.  */
+-  if (rtypenum == FFI_TYPE_STRUCT && ((cif->abi != FFI_SYSV) || (size > 8))) {
+-      rvalue = (void *) *pgr;
+-      ng++;
+-      pgr++;
+-    }
+-
+-  i = 0;
+-  avn = cif->nargs;
+-  arg_types = cif->arg_types;
+-
+-  /* Grab the addresses of the arguments from the stack frame.  */
+-  while (i < avn) {
+-      unsigned short typenum = arg_types[i]->type;
+-
+-      /* We may need to handle some values depending on ABI */
+-      if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
+-		if (typenum == FFI_TYPE_FLOAT)
+-			typenum = FFI_TYPE_UINT32;
+-		if (typenum == FFI_TYPE_DOUBLE)
+-			typenum = FFI_TYPE_UINT64;
+-		if (typenum == FFI_TYPE_LONGDOUBLE)
+-			typenum = FFI_TYPE_UINT128;
+-      } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-		if (typenum == FFI_TYPE_LONGDOUBLE)
+-			typenum = FFI_TYPE_STRUCT;
+-#endif
+-      }
+-
+-      switch (typenum) {
+-#ifndef __NO_FPRS__
+-	case FFI_TYPE_FLOAT:
+-	  /* unfortunately float values are stored as doubles
+-	   * in the ffi_closure_SYSV code (since we don't check
+-	   * the type in that routine).
+-	   */
+-
+-	  /* there are 8 64bit floating point registers */
+-
+-	  if (nf < 8)
+-	    {
+-	      double temp = pfr->d;
+-	      pfr->f = (float) temp;
+-	      avalue[i] = pfr;
+-	      nf++;
+-	      pfr++;
+-	    }
+-	  else
+-	    {
+-	      /* FIXME? here we are really changing the values
+-	       * stored in the original calling routines outgoing
+-	       * parameter stack.  This is probably a really
+-	       * naughty thing to do but...
+-	       */
+-	      avalue[i] = pst;
+-	      pst += 1;
+-	    }
+-	  break;
+-
+-	case FFI_TYPE_DOUBLE:
+-	  /* On the outgoing stack all values are aligned to 8 */
+-	  /* there are 8 64bit floating point registers */
+-
+-	  if (nf < 8)
+-	    {
+-	      avalue[i] = pfr;
+-	      nf++;
+-	      pfr++;
+-	    }
+-	  else
+-	    {
+-	      if (((long) pst) & 4)
+-		pst++;
+-	      avalue[i] = pst;
+-	      pst += 2;
+-	    }
+-	  break;
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	case FFI_TYPE_LONGDOUBLE:
+-	  if (nf < 7)
+-	    {
+-	      avalue[i] = pfr;
+-	      pfr += 2;
+-	      nf += 2;
+-	    }
+-	  else
+-	    {
+-	      if (((long) pst) & 4)
+-		pst++;
+-	      avalue[i] = pst;
+-	      pst += 4;
+-	      nf = 8;
+-	    }
+-	  break;
+-#endif
+-#endif /* have FPRS */
+-
+-	case FFI_TYPE_UINT128:
+-		/*
+-		 * Test if for the whole long double, 4 gprs are available.
+-		 * otherwise the stuff ends up on the stack.
+-		 */
+-		if (ng < 5) {
+-			avalue[i] = pgr;
+-			pgr += 4;
+-			ng += 4;
+-		} else {
+-			avalue[i] = pst;
+-			pst += 4;
+-			ng = 8+4;
+-		}
+-		break;
+-
+-	case FFI_TYPE_SINT8:
+-	case FFI_TYPE_UINT8:
+-#ifndef __LITTLE_ENDIAN__
+-	  /* there are 8 gpr registers used to pass values */
+-	  if (ng < 8)
+-	    {
+-	      avalue[i] = (char *) pgr + 3;
+-	      ng++;
+-	      pgr++;
+-	    }
+-	  else
+-	    {
+-	      avalue[i] = (char *) pst + 3;
+-	      pst++;
+-	    }
+-	  break;
+-#endif
+-
+-	case FFI_TYPE_SINT16:
+-	case FFI_TYPE_UINT16:
+-#ifndef __LITTLE_ENDIAN__
+-	  /* there are 8 gpr registers used to pass values */
+-	  if (ng < 8)
+-	    {
+-	      avalue[i] = (char *) pgr + 2;
+-	      ng++;
+-	      pgr++;
+-	    }
+-	  else
+-	    {
+-	      avalue[i] = (char *) pst + 2;
+-	      pst++;
+-	    }
+-	  break;
+-#endif
+-
+-	case FFI_TYPE_SINT32:
+-	case FFI_TYPE_UINT32:
+-	case FFI_TYPE_POINTER:
+-	  /* there are 8 gpr registers used to pass values */
+-	  if (ng < 8)
+-	    {
+-	      avalue[i] = pgr;
+-	      ng++;
+-	      pgr++;
+-	    }
+-	  else
+-	    {
+-	      avalue[i] = pst;
+-	      pst++;
+-	    }
+-	  break;
+-
+-	case FFI_TYPE_STRUCT:
+-	  /* Structs are passed by reference. The address will appear in a
+-	     gpr if it is one of the first 8 arguments.  */
+-	  if (ng < 8)
+-	    {
+-	      avalue[i] = (void *) *pgr;
+-	      ng++;
+-	      pgr++;
+-	    }
+-	  else
+-	    {
+-	      avalue[i] = (void *) *pst;
+-	      pst++;
+-	    }
+-	  break;
+-
+-	case FFI_TYPE_SINT64:
+-	case FFI_TYPE_UINT64:
+-	  /* passing long long ints are complex, they must
+-	   * be passed in suitable register pairs such as
+-	   * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
+-	   * and if the entire pair aren't available then the outgoing
+-	   * parameter stack is used for both but an alignment of 8
+-	   * must will be kept.  So we must either look in pgr
+-	   * or pst to find the correct address for this type
+-	   * of parameter.
+-	   */
+-	  if (ng < 7)
+-	    {
+-	      if (ng & 0x01)
+-		{
+-		  /* skip r4, r6, r8 as starting points */
+-		  ng++;
+-		  pgr++;
+-		}
+-	      avalue[i] = pgr;
+-	      ng += 2;
+-	      pgr += 2;
+-	    }
+-	  else
+-	    {
+-	      if (((long) pst) & 4)
+-		pst++;
+-	      avalue[i] = pst;
+-	      pst += 2;
+-	      ng = 8;
+-	    }
+-	  break;
+-
+-	default:
+-		FFI_ASSERT (0);
+-	}
+-
+-      i++;
+-    }
+-
+-
+-  (closure->fun) (cif, rvalue, avalue, closure->user_data);
+-
+-  /* Tell ffi_closure_SYSV how to perform return type promotions.
+-     Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4
+-     we have to tell ffi_closure_SYSV how to treat them. We combine the base
+-     type FFI_SYSV_TYPE_SMALL_STRUCT - 1  with the size of the struct.
+-     So a one byte struct gets the return type 16. Return type 1 to 15 are
+-     already used and we never have a struct with size zero. That is the reason
+-     for the subtraction of 1. See the comment in ffitarget.h about ordering.
+-  */
+-  if (cif->abi == FFI_SYSV && rtypenum == FFI_TYPE_STRUCT && size <= 8)
+-    return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size;
+-  return rtypenum;
+-}
+-
+-int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *,
+-					   unsigned long *, ffi_dblfl *);
+-
+-int FFI_HIDDEN
+-ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
+-			    unsigned long *pst, ffi_dblfl *pfr)
+-{
+-  /* rvalue is the pointer to space for return value in closure assembly */
+-  /* pst is the pointer to parameter save area
+-     (r3-r10 are stored into its first 8 slots by ffi_closure_LINUX64) */
+-  /* pfr is the pointer to where f1-f13 are stored in ffi_closure_LINUX64 */
+-
+-  void **avalue;
+-  ffi_type **arg_types;
+-  unsigned long i, avn, nfixedargs;
+-  ffi_cif *cif;
+-  ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64;
+-#ifdef __STRUCT_PARM_ALIGN__
+-  unsigned long align;
+-#endif
+-
+-  cif = closure->cif;
+-  avalue = alloca (cif->nargs * sizeof (void *));
+-
+-  /* Copy the caller's structure return value address so that the
+-     closure returns the data directly to the caller.  */
+-  if (cif->rtype->type == FFI_TYPE_STRUCT
+-      && (cif->flags & FLAG_RETURNS_SMST) == 0)
+-    {
+-      rvalue = (void *) *pst;
+-      pst++;
+-    }
+-
+-  i = 0;
+-  avn = cif->nargs;
+-  nfixedargs = cif->nfixedargs;
+-  arg_types = cif->arg_types;
+-
+-  /* Grab the addresses of the arguments from the stack frame.  */
+-  while (i < avn)
+-    {
+-      unsigned int elt, elnum;
+-
+-      switch (arg_types[i]->type)
+-	{
+-	case FFI_TYPE_SINT8:
+-	case FFI_TYPE_UINT8:
+-#ifndef __LITTLE_ENDIAN__
+-	  avalue[i] = (char *) pst + 7;
+-	  pst++;
+-	  break;
+-#endif
+-
+-	case FFI_TYPE_SINT16:
+-	case FFI_TYPE_UINT16:
+-#ifndef __LITTLE_ENDIAN__
+-	  avalue[i] = (char *) pst + 6;
+-	  pst++;
+-	  break;
+-#endif
+-
+-	case FFI_TYPE_SINT32:
+-	case FFI_TYPE_UINT32:
+-#ifndef __LITTLE_ENDIAN__
+-	  avalue[i] = (char *) pst + 4;
+-	  pst++;
+-	  break;
+-#endif
+-
+-	case FFI_TYPE_SINT64:
+-	case FFI_TYPE_UINT64:
+-	case FFI_TYPE_POINTER:
+-	  avalue[i] = pst;
+-	  pst++;
+-	  break;
+-
+-	case FFI_TYPE_STRUCT:
+-#ifdef __STRUCT_PARM_ALIGN__
+-	  align = arg_types[i]->alignment;
+-	  if (align > __STRUCT_PARM_ALIGN__)
+-	    align = __STRUCT_PARM_ALIGN__;
+-	  if (align > 1)
+-	    pst = (unsigned long *) ALIGN ((size_t) pst, align);
+-#endif
+-	  elt = 0;
+-#if _CALL_ELF == 2
+-	  elt = discover_homogeneous_aggregate (arg_types[i], &elnum);
+-#endif
+-	  if (elt)
+-	    {
+-	      union {
+-		void *v;
+-		unsigned long *ul;
+-		float *f;
+-		double *d;
+-		size_t p;
+-	      } to, from;
+-
+-	      /* Repackage the aggregate from its parts.  The
+-		 aggregate size is not greater than the space taken by
+-		 the registers so store back to the register/parameter
+-		 save arrays.  */
+-	      if (pfr + elnum <= end_pfr)
+-		to.v = pfr;
+-	      else
+-		to.v = pst;
+-
+-	      avalue[i] = to.v;
+-	      from.ul = pst;
+-	      if (elt == FFI_TYPE_FLOAT)
+-		{
+-		  do
+-		    {
+-		      if (pfr < end_pfr && i < nfixedargs)
+-			{
+-			  *to.f = (float) pfr->d;
+-			  pfr++;
+-			}
+-		      else
+-			*to.f = *from.f;
+-		      to.f++;
+-		      from.f++;
+-		    }
+-		  while (--elnum != 0);
+-		}
+-	      else
+-		{
+-		  do
+-		    {
+-		      if (pfr < end_pfr && i < nfixedargs)
+-			{
+-			  *to.d = pfr->d;
+-			  pfr++;
+-			}
+-		      else
+-			*to.d = *from.d;
+-		      to.d++;
+-		      from.d++;
+-		    }
+-		  while (--elnum != 0);
+-		}
+-	    }
+-	  else
+-	    {
+-#ifndef __LITTLE_ENDIAN__
+-	      /* Structures with size less than eight bytes are passed
+-		 left-padded.  */
+-	      if (arg_types[i]->size < 8)
+-		avalue[i] = (char *) pst + 8 - arg_types[i]->size;
+-	      else
+-#endif
+-		avalue[i] = pst;
+-	    }
+-	  pst += (arg_types[i]->size + 7) / 8;
+-	  break;
+-
+-	case FFI_TYPE_FLOAT:
+-	  /* unfortunately float values are stored as doubles
+-	   * in the ffi_closure_LINUX64 code (since we don't check
+-	   * the type in that routine).
+-	   */
+-
+-	  /* there are 13 64bit floating point registers */
+-
+-	  if (pfr < end_pfr && i < nfixedargs)
+-	    {
+-	      double temp = pfr->d;
+-	      pfr->f = (float) temp;
+-	      avalue[i] = pfr;
+-	      pfr++;
+-	    }
+-	  else
+-	    avalue[i] = pst;
+-	  pst++;
+-	  break;
+-
+-	case FFI_TYPE_DOUBLE:
+-	  /* On the outgoing stack all values are aligned to 8 */
+-	  /* there are 13 64bit floating point registers */
+-
+-	  if (pfr < end_pfr && i < nfixedargs)
+-	    {
+-	      avalue[i] = pfr;
+-	      pfr++;
+-	    }
+-	  else
+-	    avalue[i] = pst;
+-	  pst++;
+-	  break;
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	case FFI_TYPE_LONGDOUBLE:
+-	  if (pfr + 1 < end_pfr && i + 1 < nfixedargs)
+-	    {
+-	      avalue[i] = pfr;
+-	      pfr += 2;
+-	    }
+-	  else
+-	    {
+-	      if (pfr < end_pfr && i < nfixedargs)
+-		{
+-		  /* Passed partly in f13 and partly on the stack.
+-		     Move it all to the stack.  */
+-		  *pst = *(unsigned long *) pfr;
+-		  pfr++;
+-		}
+-	      avalue[i] = pst;
+-	    }
+-	  pst += 2;
+-	  break;
+-#endif
+-
+-	default:
+-	  FFI_ASSERT (0);
+-	}
+-
+-      i++;
+-    }
+-
+-
+-  (closure->fun) (cif, rvalue, avalue, closure->user_data);
+-
+-  /* Tell ffi_closure_LINUX64 how to perform return type promotions.  */
+-  if ((cif->flags & FLAG_RETURNS_SMST) != 0)
+-    {
+-      if ((cif->flags & FLAG_RETURNS_FP) == 0)
+-	return FFI_V2_TYPE_SMALL_STRUCT + cif->rtype->size - 1;
+-      else if ((cif->flags & FLAG_RETURNS_64BITS) != 0)
+-	return FFI_V2_TYPE_DOUBLE_HOMOG;
+-      else
+-	return FFI_V2_TYPE_FLOAT_HOMOG;
+-    }
+-  return cif->rtype->type;
+-}
+diff --git a/js/src/ctypes/libffi/src/powerpc/ffi_darwin.c b/js/src/ctypes/libffi/src/powerpc/ffi_darwin.c
+--- a/js/src/ctypes/libffi/src/powerpc/ffi_darwin.c
++++ b/js/src/ctypes/libffi/src/powerpc/ffi_darwin.c
+@@ -1,14 +1,14 @@
+ /* -----------------------------------------------------------------------
+    ffi_darwin.c
+ 
+    Copyright (C) 1998 Geoffrey Keating
+    Copyright (C) 2001 John Hornkvist
+-   Copyright (C) 2002, 2006, 2007, 2009 Free Software Foundation, Inc.
++   Copyright (C) 2002, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+ 
+    FFI support for Darwin and AIX.
+    
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -30,87 +30,112 @@
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+ #include <stdlib.h>
+ 
+ extern void ffi_closure_ASM (void);
+ 
+ enum {
+-  /* The assembly depends on these exact flags.  */
+-  FLAG_RETURNS_NOTHING  = 1 << (31-30), /* These go in cr7  */
+-  FLAG_RETURNS_FP       = 1 << (31-29),
+-  FLAG_RETURNS_64BITS   = 1 << (31-28),
+-  FLAG_RETURNS_128BITS  = 1 << (31-31),
++  /* The assembly depends on these exact flags.  
++     For Darwin64 (when FLAG_RETURNS_STRUCT is set):
++       FLAG_RETURNS_FP indicates that the structure embeds FP data.
++       FLAG_RETURNS_128BITS signals a special struct size that is not
++       expanded for float content.  */
++  FLAG_RETURNS_128BITS	= 1 << (31-31), /* These go in cr7  */
++  FLAG_RETURNS_NOTHING	= 1 << (31-30),
++  FLAG_RETURNS_FP	= 1 << (31-29),
++  FLAG_RETURNS_64BITS	= 1 << (31-28),
++
++  FLAG_RETURNS_STRUCT	= 1 << (31-27), /* This goes in cr6  */
+ 
+   FLAG_ARG_NEEDS_COPY   = 1 << (31- 7),
+   FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI  */
+   FLAG_4_GPR_ARGUMENTS  = 1 << (31- 5),
+   FLAG_RETVAL_REFERENCE = 1 << (31- 4)
+ };
+ 
+ /* About the DARWIN ABI.  */
+ enum {
+   NUM_GPR_ARG_REGISTERS = 8,
+-  NUM_FPR_ARG_REGISTERS = 13
++  NUM_FPR_ARG_REGISTERS = 13,
++  LINKAGE_AREA_GPRS = 6
+ };
+-enum { ASM_NEEDS_REGISTERS = 4 };
++
++enum { ASM_NEEDS_REGISTERS = 4 }; /* r28-r31 */
+ 
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments.
++   
++   m32/m64
+ 
+    The stack layout we want looks like this:
+ 
+    |   Return address from ffi_call_DARWIN      |	higher addresses
+    |--------------------------------------------|
+-   |   Previous backchain pointer	4	|	stack pointer here
++   |   Previous backchain pointer	4/8	|	stack pointer here
+    |--------------------------------------------|<+ <<<	on entry to
+-   |   Saved r28-r31			4*4	| |	ffi_call_DARWIN
++   |   ASM_NEEDS_REGISTERS=r28-r31   4*(4/8)	| |	ffi_call_DARWIN
+    |--------------------------------------------| |
+-   |   Parameters             (at least 8*4=32) | |
++   |   When we have any FP activity... the	| |
++   |   FPRs occupy NUM_FPR_ARG_REGISTERS slots	| |
++   |   here fp13 .. fp1 from high to low addr.	| |
++   ~						~ ~
++   |   Parameters      (at least 8*4/8=32/64)	| | NUM_GPR_ARG_REGISTERS
+    |--------------------------------------------| |
+-   |   Space for GPR2                   4       | |
++   |   TOC=R2 (AIX) Reserved (Darwin)   4/8	| |
+    |--------------------------------------------| |	stack	|
+-   |   Reserved                       2*4       | |	grows	|
++   |   Reserved                       2*4/8	| |	grows	|
+    |--------------------------------------------| |	down	V
+-   |   Space for callee's LR		4	| |
++   |   Space for callee's LR		4/8	| |
+    |--------------------------------------------| |	lower addresses
+-   |   Saved CR                         4       | |
++   |   Saved CR [low word for m64]      4/8	| |
+    |--------------------------------------------| |     stack pointer here
+-   |   Current backchain pointer	4	|-/	during
++   |   Current backchain pointer	4/8	|-/	during
+    |--------------------------------------------|   <<<	ffi_call_DARWIN
+ 
+    */
+ 
++#if defined(POWERPC_DARWIN64)
++static void
++darwin64_pass_struct_by_value 
++  (ffi_type *, char *, unsigned, unsigned *, double **, unsigned long **);
++#endif
++
++/* This depends on GPR_SIZE = sizeof (unsigned long) */
++
+ void
+ ffi_prep_args (extended_cif *ecif, unsigned long *const stack)
+ {
+   const unsigned bytes = ecif->cif->bytes;
+   const unsigned flags = ecif->cif->flags;
+   const unsigned nargs = ecif->cif->nargs;
++#if !defined(POWERPC_DARWIN64) 
+   const ffi_abi abi = ecif->cif->abi;
++#endif
+ 
+   /* 'stacktop' points at the previous backchain pointer.  */
+   unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long));
+ 
+   /* 'fpr_base' points at the space for fpr1, and grows upwards as
+      we use FPR registers.  */
+   double *fpr_base = (double *) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS;
+-  int fparg_count = 0;
+-
++  int gp_count = 0, fparg_count = 0;
+ 
+   /* 'next_arg' grows up as we put parameters in it.  */
+-  unsigned long *next_arg = stack + 6; /* 6 reserved positions.  */
++  unsigned long *next_arg = stack + LINKAGE_AREA_GPRS; /* 6 reserved positions.  */
+ 
+   int i;
+   double double_tmp;
+   void **p_argv = ecif->avalue;
+   unsigned long gprvalue;
+   ffi_type** ptr = ecif->cif->arg_types;
++#if !defined(POWERPC_DARWIN64) 
+   char *dest_cpy;
++#endif
+   unsigned size_al = 0;
+ 
+   /* Check that everything starts aligned properly.  */
+   FFI_ASSERT(((unsigned) (char *) stack & 0xF) == 0);
+   FFI_ASSERT(((unsigned) (char *) stacktop & 0xF) == 0);
+   FFI_ASSERT((bytes & 0xF) == 0);
+ 
+   /* Deal with return values that are actually pass-by-reference.
+@@ -125,78 +150,95 @@ ffi_prep_args (extended_cif *ecif, unsig
+     {
+       switch ((*ptr)->type)
+ 	{
+ 	/* If a floating-point parameter appears before all of the general-
+ 	   purpose registers are filled, the corresponding GPRs that match
+ 	   the size of the floating-point parameter are skipped.  */
+ 	case FFI_TYPE_FLOAT:
+ 	  double_tmp = *(float *) *p_argv;
+-	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+-	    *(double *)next_arg = double_tmp;
+-	  else
++	  if (fparg_count < NUM_FPR_ARG_REGISTERS)
+ 	    *fpr_base++ = double_tmp;
++#if defined(POWERPC_DARWIN)
++	  *(float *)next_arg = *(float *) *p_argv;
++#else
++	  *(double *)next_arg = double_tmp;
++#endif
+ 	  next_arg++;
++	  gp_count++;
+ 	  fparg_count++;
+ 	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+ 	  double_tmp = *(double *) *p_argv;
+-	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+-	    *(double *)next_arg = double_tmp;
+-	  else
++	  if (fparg_count < NUM_FPR_ARG_REGISTERS)
+ 	    *fpr_base++ = double_tmp;
++	  *(double *)next_arg = double_tmp;
+ #ifdef POWERPC64
+ 	  next_arg++;
++	  gp_count++;
+ #else
+ 	  next_arg += 2;
++	  gp_count += 2;
+ #endif
+ 	  fparg_count++;
+ 	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ 
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ 
+ 	case FFI_TYPE_LONGDOUBLE:
+-#ifdef POWERPC64
++#  if defined(POWERPC64) && !defined(POWERPC_DARWIN64)
++	  /* ??? This will exceed the regs count when the value starts at fp13
++	     and it will not put the extra bit on the stack.  */
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS)
+ 	    *(long double *) fpr_base++ = *(long double *) *p_argv;
+ 	  else
+ 	    *(long double *) next_arg = *(long double *) *p_argv;
+ 	  next_arg += 2;
+ 	  fparg_count += 2;
+-#else
++#  else
+ 	  double_tmp = ((double *) *p_argv)[0];
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS)
+ 	    *fpr_base++ = double_tmp;
+-	  else
+-	    *(double *) next_arg = double_tmp;
++	  *(double *) next_arg = double_tmp;
++#    if defined(POWERPC_DARWIN64)
++	  next_arg++;
++	  gp_count++;
++#    else
+ 	  next_arg += 2;
++	  gp_count += 2;
++#    endif
+ 	  fparg_count++;
+-
+ 	  double_tmp = ((double *) *p_argv)[1];
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS)
+ 	    *fpr_base++ = double_tmp;
+-	  else
+-	    *(double *) next_arg = double_tmp;
++	  *(double *) next_arg = double_tmp;
++#    if defined(POWERPC_DARWIN64)
++	  next_arg++;
++	  gp_count++;
++#    else
+ 	  next_arg += 2;
++	  gp_count += 2;
++#    endif
+ 	  fparg_count++;
+-#endif
++#  endif
+ 	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ #endif
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
+ #ifdef POWERPC64
+ 	  gprvalue = *(long long *) *p_argv;
+ 	  goto putgpr;
+ #else
+ 	  *(long long *) next_arg = *(long long *) *p_argv;
+ 	  next_arg += 2;
++	  gp_count += 2;
+ #endif
+ 	  break;
+ 	case FFI_TYPE_POINTER:
+ 	  gprvalue = *(unsigned long *) *p_argv;
+ 	  goto putgpr;
+ 	case FFI_TYPE_UINT8:
+ 	  gprvalue = *(unsigned char *) *p_argv;
+ 	  goto putgpr;
+@@ -206,101 +248,373 @@ ffi_prep_args (extended_cif *ecif, unsig
+ 	case FFI_TYPE_UINT16:
+ 	  gprvalue = *(unsigned short *) *p_argv;
+ 	  goto putgpr;
+ 	case FFI_TYPE_SINT16:
+ 	  gprvalue = *(signed short *) *p_argv;
+ 	  goto putgpr;
+ 
+ 	case FFI_TYPE_STRUCT:
+-#ifdef POWERPC64
+-	  dest_cpy = (char *) next_arg;
+ 	  size_al = (*ptr)->size;
+-	  if ((*ptr)->elements[0]->type == 3)
+-	    size_al = ALIGN((*ptr)->size, 8);
+-	  if (size_al < 3 && abi == FFI_DARWIN)
+-	    dest_cpy += 4 - size_al;
+-
+-	  memcpy ((char *) dest_cpy, (char *) *p_argv, size_al);
+-	  next_arg += (size_al + 7) / 8;
++#if defined(POWERPC_DARWIN64)
++	  next_arg = (unsigned long *)ALIGN((char *)next_arg, (*ptr)->alignment);
++	  darwin64_pass_struct_by_value (*ptr, (char *) *p_argv, 
++					 (unsigned) size_al,
++					 (unsigned int *) &fparg_count,
++					 &fpr_base, &next_arg);
+ #else
+ 	  dest_cpy = (char *) next_arg;
+ 
++	  /* If the first member of the struct is a double, then include enough
++	     padding in the struct size to align it to double-word.  */
++	  if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE)
++	    size_al = ALIGN((*ptr)->size, 8);
++
++#  if defined(POWERPC64) 
++	  FFI_ASSERT (abi != FFI_DARWIN);
++	  memcpy ((char *) dest_cpy, (char *) *p_argv, size_al);
++	  next_arg += (size_al + 7) / 8;
++#  else
+ 	  /* Structures that match the basic modes (QI 1 byte, HI 2 bytes,
+ 	     SI 4 bytes) are aligned as if they were those modes.
+ 	     Structures with 3 byte in size are padded upwards.  */
+-	  size_al = (*ptr)->size;
+-	  /* If the first member of the struct is a double, then align
+-	     the struct to double-word.  */
+-	  if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE)
+-	    size_al = ALIGN((*ptr)->size, 8);
+ 	  if (size_al < 3 && abi == FFI_DARWIN)
+ 	    dest_cpy += 4 - size_al;
+ 
+ 	  memcpy((char *) dest_cpy, (char *) *p_argv, size_al);
+ 	  next_arg += (size_al + 3) / 4;
++#  endif
+ #endif
+ 	  break;
+ 
+ 	case FFI_TYPE_INT:
+ 	case FFI_TYPE_SINT32:
+ 	  gprvalue = *(signed int *) *p_argv;
+ 	  goto putgpr;
+ 
+ 	case FFI_TYPE_UINT32:
+ 	  gprvalue = *(unsigned int *) *p_argv;
+ 	putgpr:
+ 	  *next_arg++ = gprvalue;
++	  gp_count++;
+ 	  break;
+ 	default:
+ 	  break;
+ 	}
+     }
+ 
+   /* Check that we didn't overrun the stack...  */
+-  //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS);
+-  //FFI_ASSERT((unsigned *)fpr_base
+-  //	     <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
+-  //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
++  /* FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS);
++     FFI_ASSERT((unsigned *)fpr_base
++     	     <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
++     FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);  */
+ }
+ 
++#if defined(POWERPC_DARWIN64)
++
++/* See if we can put some of the struct into fprs.
++   This should not be called for structures of size 16 bytes, since these are not
++   broken out this way.  */
++static void
++darwin64_scan_struct_for_floats (ffi_type *s, unsigned *nfpr)
++{
++  int i;
++
++  FFI_ASSERT (s->type == FFI_TYPE_STRUCT)
++
++  for (i = 0; s->elements[i] != NULL; i++)
++    {
++      ffi_type *p = s->elements[i];
++      switch (p->type)
++	{
++	  case FFI_TYPE_STRUCT:
++	    darwin64_scan_struct_for_floats (p, nfpr);
++	    break;
++	  case FFI_TYPE_LONGDOUBLE:
++	    (*nfpr) += 2;
++	    break;
++	  case FFI_TYPE_DOUBLE:
++	  case FFI_TYPE_FLOAT:
++	    (*nfpr) += 1;
++	    break;
++	  default:
++	    break;    
++	}
++    }
++}
++
++static int
++darwin64_struct_size_exceeds_gprs_p (ffi_type *s, char *src, unsigned *nfpr)
++{
++  unsigned struct_offset=0, i;
++
++  for (i = 0; s->elements[i] != NULL; i++)
++    {
++      char *item_base;
++      ffi_type *p = s->elements[i];
++      /* Find the start of this item (0 for the first one).  */
++      if (i > 0)
++        struct_offset = ALIGN(struct_offset, p->alignment);
++
++      item_base = src + struct_offset;
++
++      switch (p->type)
++	{
++	  case FFI_TYPE_STRUCT:
++	    if (darwin64_struct_size_exceeds_gprs_p (p, item_base, nfpr))
++	      return 1;
++	    break;
++	  case FFI_TYPE_LONGDOUBLE:
++	    if (*nfpr >= NUM_FPR_ARG_REGISTERS)
++	      return 1;
++	    (*nfpr) += 1;
++	    item_base += 8;
++	  /* FALL THROUGH */
++	  case FFI_TYPE_DOUBLE:
++	    if (*nfpr >= NUM_FPR_ARG_REGISTERS)
++	      return 1;
++	    (*nfpr) += 1;
++	    break;
++	  case FFI_TYPE_FLOAT:
++	    if (*nfpr >= NUM_FPR_ARG_REGISTERS)
++	      return 1;
++	    (*nfpr) += 1;
++	    break;
++	  default:
++	    /* If we try and place any item, that is non-float, once we've
++	       exceeded the 8 GPR mark, then we can't fit the struct.  */
++	    if ((unsigned long)item_base >= 8*8) 
++	      return 1;
++	    break;    
++	}
++      /* now count the size of what we just used.  */
++      struct_offset += p->size;
++    }
++  return 0;
++}
++
++/* Can this struct be returned by value?  */
++int 
++darwin64_struct_ret_by_value_p (ffi_type *s)
++{
++  unsigned nfp = 0;
++
++  FFI_ASSERT (s && s->type == FFI_TYPE_STRUCT);
++  
++  /* The largest structure we can return is 8long + 13 doubles.  */
++  if (s->size > 168)
++    return 0;
++  
++  /* We can't pass more than 13 floats.  */
++  darwin64_scan_struct_for_floats (s, &nfp);
++  if (nfp > 13)
++    return 0;
++  
++  /* If there are not too many floats, and the struct is
++     small enough to accommodate in the GPRs, then it must be OK.  */
++  if (s->size <= 64)
++    return 1;
++  
++  /* Well, we have to look harder.  */
++  nfp = 0;
++  if (darwin64_struct_size_exceeds_gprs_p (s, NULL, &nfp))
++    return 0;
++  
++  return 1;
++}
++
++void
++darwin64_pass_struct_floats (ffi_type *s, char *src, 
++			     unsigned *nfpr, double **fprs)
++{
++  int i;
++  double *fpr_base = *fprs;
++  unsigned struct_offset = 0;
++
++  /* We don't assume anything about the alignment of the source.  */
++  for (i = 0; s->elements[i] != NULL; i++)
++    {
++      char *item_base;
++      ffi_type *p = s->elements[i];
++      /* Find the start of this item (0 for the first one).  */
++      if (i > 0)
++        struct_offset = ALIGN(struct_offset, p->alignment);
++      item_base = src + struct_offset;
++
++      switch (p->type)
++	{
++	  case FFI_TYPE_STRUCT:
++	    darwin64_pass_struct_floats (p, item_base, nfpr,
++					   &fpr_base);
++	    break;
++	  case FFI_TYPE_LONGDOUBLE:
++	    if (*nfpr < NUM_FPR_ARG_REGISTERS)
++	      *fpr_base++ = *(double *)item_base;
++	    (*nfpr) += 1;
++	    item_base += 8;
++	  /* FALL THROUGH */
++	  case FFI_TYPE_DOUBLE:
++	    if (*nfpr < NUM_FPR_ARG_REGISTERS)
++	      *fpr_base++ = *(double *)item_base;
++	    (*nfpr) += 1;
++	    break;
++	  case FFI_TYPE_FLOAT:
++	    if (*nfpr < NUM_FPR_ARG_REGISTERS)
++	      *fpr_base++ = (double) *(float *)item_base;
++	    (*nfpr) += 1;
++	    break;
++	  default:
++	    break;    
++	}
++      /* now count the size of what we just used.  */
++      struct_offset += p->size;
++    }
++  /* Update the scores.  */
++  *fprs = fpr_base;
++}
++
++/* Darwin64 special rules.
++   Break out a struct into params and float registers.  */
++static void
++darwin64_pass_struct_by_value (ffi_type *s, char *src, unsigned size,
++			       unsigned *nfpr, double **fprs, unsigned long **arg)
++{
++  unsigned long *next_arg = *arg;
++  char *dest_cpy = (char *)next_arg;
++
++  FFI_ASSERT (s->type == FFI_TYPE_STRUCT)
++
++  if (!size)
++    return;
++
++  /* First... special cases.  */
++  if (size < 3
++      || (size == 4 
++	  && s->elements[0] 
++	  && s->elements[0]->type != FFI_TYPE_FLOAT))
++    {
++      /* Must be at least one GPR, padding is unspecified in value, 
++	 let's make it zero.  */
++      *next_arg = 0UL; 
++      dest_cpy += 8 - size;
++      memcpy ((char *) dest_cpy, src, size);
++      next_arg++;
++    }
++  else if (size == 16)
++    {
++      memcpy ((char *) dest_cpy, src, size);
++      next_arg += 2;
++    }
++  else
++    {
++      /* now the general case, we consider embedded floats.  */
++      memcpy ((char *) dest_cpy, src, size);
++      darwin64_pass_struct_floats (s, src, nfpr, fprs);
++      next_arg += (size+7)/8;
++    }
++    
++  *arg = next_arg;
++}
++
++double *
++darwin64_struct_floats_to_mem (ffi_type *s, char *dest, double *fprs, unsigned *nf)
++{
++  int i;
++  unsigned struct_offset = 0;
++
++  /* We don't assume anything about the alignment of the source.  */
++  for (i = 0; s->elements[i] != NULL; i++)
++    {
++      char *item_base;
++      ffi_type *p = s->elements[i];
++      /* Find the start of this item (0 for the first one).  */
++      if (i > 0)
++        struct_offset = ALIGN(struct_offset, p->alignment);
++      item_base = dest + struct_offset;
++
++      switch (p->type)
++	{
++	  case FFI_TYPE_STRUCT:
++	    fprs = darwin64_struct_floats_to_mem (p, item_base, fprs, nf);
++	    break;
++	  case FFI_TYPE_LONGDOUBLE:
++	    if (*nf < NUM_FPR_ARG_REGISTERS)
++	      {
++		*(double *)item_base = *fprs++ ;
++		(*nf) += 1;
++	      }
++	    item_base += 8;
++	  /* FALL THROUGH */
++	  case FFI_TYPE_DOUBLE:
++	    if (*nf < NUM_FPR_ARG_REGISTERS)
++	      {
++		*(double *)item_base = *fprs++ ;
++		(*nf) += 1;
++	      }
++	    break;
++	  case FFI_TYPE_FLOAT:
++	    if (*nf < NUM_FPR_ARG_REGISTERS)
++	      {
++		*(float *)item_base = (float) *fprs++ ;
++		(*nf) += 1;
++	      }
++	    break;
++	  default:
++	    break;    
++	}
++      /* now count the size of what we just used.  */
++      struct_offset += p->size;
++    }
++  return fprs;
++}
++
++#endif
++
+ /* Adjust the size of S to be correct for Darwin.
+-   On Darwin, the first field of a structure has natural alignment.  */
++   On Darwin m32, the first field of a structure has natural alignment.  
++   On Darwin m64, all fields have natural alignment.  */
+ 
+ static void
+ darwin_adjust_aggregate_sizes (ffi_type *s)
+ {
+   int i;
+ 
+   if (s->type != FFI_TYPE_STRUCT)
+     return;
+ 
+   s->size = 0;
+   for (i = 0; s->elements[i] != NULL; i++)
+     {
+       ffi_type *p;
+       int align;
+       
+       p = s->elements[i];
+-      darwin_adjust_aggregate_sizes (p);
+-      if (i == 0
+-	  && (p->type == FFI_TYPE_UINT64
+-	      || p->type == FFI_TYPE_SINT64
+-	      || p->type == FFI_TYPE_DOUBLE
+-	      || p->alignment == 8))
+-	align = 8;
++      if (p->type == FFI_TYPE_STRUCT)
++	darwin_adjust_aggregate_sizes (p);
++#if defined(POWERPC_DARWIN64)
++      /* Natural alignment for all items.  */
++      align = p->alignment;
++#else
++      /* Natural alignment for the first item... */
++      if (i == 0)
++	align = p->alignment;
+       else if (p->alignment == 16 || p->alignment < 4)
++	/* .. subsequent items with vector or align < 4 have natural align.  */
+ 	align = p->alignment;
+       else
++	/* .. or align is 4.  */
+ 	align = 4;
++#endif
++      /* Pad, if necessary, before adding the current item.  */
+       s->size = ALIGN(s->size, align) + p->size;
+     }
+   
+   s->size = ALIGN(s->size, s->alignment);
+   
++  /* This should not be necessary on m64, but harmless.  */
+   if (s->elements[0]->type == FFI_TYPE_UINT64
+       || s->elements[0]->type == FFI_TYPE_SINT64
+       || s->elements[0]->type == FFI_TYPE_DOUBLE
+       || s->elements[0]->alignment == 8)
+     s->alignment = s->alignment > 8 ? s->alignment : 8;
+   /* Do not add additional tail padding.  */
+ }
+ 
+@@ -342,17 +656,17 @@ aix_adjust_aggregate_sizes (ffi_type *s)
+ /* Perform machine dependent cif processing.  */
+ ffi_status
+ ffi_prep_cif_machdep (ffi_cif *cif)
+ {
+   /* All this is for the DARWIN ABI.  */
+   unsigned i;
+   ffi_type **ptr;
+   unsigned bytes;
+-  int fparg_count = 0, intarg_count = 0;
++  unsigned fparg_count = 0, intarg_count = 0;
+   unsigned flags = 0;
+   unsigned size_al = 0;
+ 
+   /* All the machine-independent calculation of cif->bytes will be wrong.
+      All the calculation of structure sizes will also be wrong.
+      Redo the calculation for DARWIN.  */
+ 
+   if (cif->abi == FFI_DARWIN)
+@@ -367,26 +681,35 @@ ffi_prep_cif_machdep (ffi_cif *cif)
+       aix_adjust_aggregate_sizes (cif->rtype);
+       for (i = 0; i < cif->nargs; i++)
+ 	aix_adjust_aggregate_sizes (cif->arg_types[i]);
+     }
+ 
+   /* Space for the frame pointer, callee's LR, CR, etc, and for
+      the asm's temp regs.  */
+ 
+-  bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long);
++  bytes = (LINKAGE_AREA_GPRS + ASM_NEEDS_REGISTERS) * sizeof(unsigned long);
+ 
+-  /* Return value handling.  The rules are as follows:
++  /* Return value handling.  
++    The rules m32 are as follows:
+      - 32-bit (or less) integer values are returned in gpr3;
+-     - Structures of size <= 4 bytes also returned in gpr3;
+-     - 64-bit integer values and structures between 5 and 8 bytes are returned
+-       in gpr3 and gpr4;
++     - structures of size <= 4 bytes also returned in gpr3;
++     - 64-bit integer values [??? and structures between 5 and 8 bytes] are
++       returned in gpr3 and gpr4;
+      - Single/double FP values are returned in fpr1;
+      - Long double FP (if not equivalent to double) values are returned in
+        fpr1 and fpr2;
++     m64:
++     - 64-bit or smaller integral values are returned in GPR3
++     - Single/double FP values are returned in fpr1;
++     - Long double FP values are returned in fpr1 and fpr2;
++     m64 Structures:
++     - If the structure could be accommodated in registers were it to be the
++       first argument to a routine, then it is returned in those registers.
++     m32/m64 structures otherwise:
+      - Larger structures values are allocated space and a pointer is passed
+        as the first argument.  */
+   switch (cif->rtype->type)
+     {
+ 
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+     case FFI_TYPE_LONGDOUBLE:
+       flags |= FLAG_RETURNS_128BITS;
+@@ -405,124 +728,193 @@ ffi_prep_cif_machdep (ffi_cif *cif)
+     case FFI_TYPE_SINT64:
+ #ifdef POWERPC64
+     case FFI_TYPE_POINTER:
+ #endif
+       flags |= FLAG_RETURNS_64BITS;
+       break;
+ 
+     case FFI_TYPE_STRUCT:
++#if defined(POWERPC_DARWIN64)
++      {
++	/* Can we fit the struct into regs?  */
++	if (darwin64_struct_ret_by_value_p (cif->rtype))
++	  {
++	    unsigned nfpr = 0;
++	    flags |= FLAG_RETURNS_STRUCT;
++	    if (cif->rtype->size != 16)
++	      darwin64_scan_struct_for_floats (cif->rtype, &nfpr) ;
++	    else
++	      flags |= FLAG_RETURNS_128BITS;
++	    /* Will be 0 for 16byte struct.  */
++	    if (nfpr)
++	      flags |= FLAG_RETURNS_FP;
++	  }
++	else /* By ref. */
++	  {
++	    flags |= FLAG_RETVAL_REFERENCE;
++	    flags |= FLAG_RETURNS_NOTHING;
++	    intarg_count++;
++	  }
++      }
++#elif defined(DARWIN_PPC)
++      if (cif->rtype->size <= 4)
++	flags |= FLAG_RETURNS_STRUCT;
++      else /* else by reference.  */
++	{
++	  flags |= FLAG_RETVAL_REFERENCE;
++	  flags |= FLAG_RETURNS_NOTHING;
++	  intarg_count++;
++	}
++#else /* assume we pass by ref.  */
+       flags |= FLAG_RETVAL_REFERENCE;
+       flags |= FLAG_RETURNS_NOTHING;
+       intarg_count++;
++#endif
+       break;
+     case FFI_TYPE_VOID:
+       flags |= FLAG_RETURNS_NOTHING;
+       break;
+ 
+     default:
+       /* Returns 32-bit integer, or similar.  Nothing to do here.  */
+       break;
+     }
+ 
+   /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
+      first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
+-     goes on the stack.  Structures are passed as a pointer to a copy of
+-     the structure. Stuff on the stack needs to keep proper alignment.  */
++     goes on the stack.  
++     ??? Structures are passed as a pointer to a copy of the structure. 
++     Stuff on the stack needs to keep proper alignment.  
++     For m64 the count is effectively of half-GPRs.  */
+   for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+     {
++      unsigned align_words;
+       switch ((*ptr)->type)
+ 	{
+ 	case FFI_TYPE_FLOAT:
+ 	case FFI_TYPE_DOUBLE:
+ 	  fparg_count++;
++#if !defined(POWERPC_DARWIN64)
+ 	  /* If this FP arg is going on the stack, it must be
+ 	     8-byte-aligned.  */
+ 	  if (fparg_count > NUM_FPR_ARG_REGISTERS
+-	      && intarg_count%2 != 0)
++	      && (intarg_count & 0x01) != 0)
+ 	    intarg_count++;
++#endif
+ 	  break;
+ 
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-
+ 	case FFI_TYPE_LONGDOUBLE:
+ 	  fparg_count += 2;
+ 	  /* If this FP arg is going on the stack, it must be
+-	     8-byte-aligned.  */
+-	  if (fparg_count > NUM_FPR_ARG_REGISTERS
+-	      && intarg_count%2 != 0)
+-	    intarg_count++;
+-	  intarg_count +=2;
++	     16-byte-aligned.  */
++	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
++#if defined (POWERPC64)
++	    intarg_count = ALIGN(intarg_count, 2);
++#else
++	    intarg_count = ALIGN(intarg_count, 4);
++#endif
+ 	  break;
+ #endif
+ 
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
++#if defined(POWERPC64)
++	  intarg_count++;
++#else
+ 	  /* 'long long' arguments are passed as two words, but
+ 	     either both words must fit in registers or both go
+ 	     on the stack.  If they go on the stack, they must
+ 	     be 8-byte-aligned.  */
+ 	  if (intarg_count == NUM_GPR_ARG_REGISTERS-1
+-	      || (intarg_count >= NUM_GPR_ARG_REGISTERS && intarg_count%2 != 0))
++	      || (intarg_count >= NUM_GPR_ARG_REGISTERS 
++	          && (intarg_count & 0x01) != 0))
+ 	    intarg_count++;
+ 	  intarg_count += 2;
++#endif
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
+ 	  size_al = (*ptr)->size;
++#if defined(POWERPC_DARWIN64)
++	  align_words = (*ptr)->alignment >> 3;
++	  if (align_words)
++	    intarg_count = ALIGN(intarg_count, align_words);
++	  /* Base size of the struct.  */
++	  intarg_count += (size_al + 7) / 8;
++	  /* If 16 bytes then don't worry about floats.  */
++	  if (size_al != 16)
++	    /* Scan through for floats to be placed in regs.  */
++	    darwin64_scan_struct_for_floats (*ptr, &fparg_count) ;
++#else
++	  align_words = (*ptr)->alignment >> 2;
++	  if (align_words)
++	    intarg_count = ALIGN(intarg_count, align_words);
+ 	  /* If the first member of the struct is a double, then align
+-	     the struct to double-word.  */
++	     the struct to double-word. 
+ 	  if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE)
+-	    size_al = ALIGN((*ptr)->size, 8);
+-#ifdef POWERPC64
++	    size_al = ALIGN((*ptr)->size, 8); */
++#  ifdef POWERPC64
+ 	  intarg_count += (size_al + 7) / 8;
+-#else
++#  else
+ 	  intarg_count += (size_al + 3) / 4;
++#  endif
+ #endif
+ 	  break;
+ 
+ 	default:
+ 	  /* Everything else is passed as a 4-byte word in a GPR, either
+ 	     the object itself or a pointer to it.  */
+ 	  intarg_count++;
+ 	  break;
+ 	}
+     }
+ 
+   if (fparg_count != 0)
+     flags |= FLAG_FP_ARGUMENTS;
+ 
++#if defined(POWERPC_DARWIN64)
++  /* Space to image the FPR registers, if needed - which includes when they might be
++     used in a struct return.  */
++  if (fparg_count != 0 
++      || ((flags & FLAG_RETURNS_STRUCT)
++	   && (flags & FLAG_RETURNS_FP)))
++    bytes += NUM_FPR_ARG_REGISTERS * sizeof(double);
++#else
+   /* Space for the FPR registers, if needed.  */
+   if (fparg_count != 0)
+     bytes += NUM_FPR_ARG_REGISTERS * sizeof(double);
++#endif
+ 
+   /* Stack space.  */
+ #ifdef POWERPC64
+   if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS)
+     bytes += (intarg_count + fparg_count) * sizeof(long);
+ #else
+   if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS)
+     bytes += (intarg_count + 2 * fparg_count) * sizeof(long);
+ #endif
+   else
+     bytes += NUM_GPR_ARG_REGISTERS * sizeof(long);
+ 
+   /* The stack space allocated needs to be a multiple of 16 bytes.  */
+-  bytes = (bytes + 15) & ~0xF;
++  bytes = ALIGN(bytes, 16) ;
+ 
+   cif->flags = flags;
+   cif->bytes = bytes;
+ 
+   return FFI_OK;
+ }
+ 
+ extern void ffi_call_AIX(extended_cif *, long, unsigned, unsigned *,
+ 			 void (*fn)(void), void (*fn2)(void));
++
+ extern void ffi_call_DARWIN(extended_cif *, long, unsigned, unsigned *,
+-			    void (*fn)(void), void (*fn2)(void));
++			    void (*fn)(void), void (*fn2)(void), ffi_type*);
+ 
+ void
+ ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+@@ -541,17 +933,17 @@ ffi_call (ffi_cif *cif, void (*fn)(void)
+   switch (cif->abi)
+     {
+     case FFI_AIX:
+       ffi_call_AIX(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn,
+ 		   FFI_FN(ffi_prep_args));
+       break;
+     case FFI_DARWIN:
+       ffi_call_DARWIN(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn,
+-		      FFI_FN(ffi_prep_args));
++		      FFI_FN(ffi_prep_args), cif->rtype);
+       break;
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
+ 
+ static void flush_icache(char *);
+@@ -561,123 +953,127 @@ static void flush_range(char *, int);
+    points to one of these.  */
+ 
+ typedef struct aix_fd_struct {
+   void *code_pointer;
+   void *toc;
+ } aix_fd;
+ 
+ /* here I'd like to add the stack frame layout we use in darwin_closure.S
+-   and aix_clsoure.S
++   and aix_closure.S
+ 
+-   SP previous -> +---------------------------------------+ <--- child frame
+-		  | back chain to caller 4                |
+-		  +---------------------------------------+ 4
+-		  | saved CR 4                            |
+-		  +---------------------------------------+ 8
+-		  | saved LR 4                            |
+-		  +---------------------------------------+ 12
+-		  | reserved for compilers 4              |
+-		  +---------------------------------------+ 16
+-		  | reserved for binders 4                |
+-		  +---------------------------------------+ 20
+-		  | saved TOC pointer 4                   |
+-		  +---------------------------------------+ 24
+-		  | always reserved 8*4=32 (previous GPRs)|
+-		  | according to the linkage convention   |
+-		  | from AIX                              |
+-		  +---------------------------------------+ 56
+-		  | our FPR area 13*8=104                 |
+-		  | f1                                    |
+-		  | .                                     |
+-		  | f13                                   |
+-		  +---------------------------------------+ 160
+-		  | result area 8                         |
+-		  +---------------------------------------+ 168
+-		  | alignement to the next multiple of 16 |
+-SP current -->    +---------------------------------------+ 176 <- parent frame
+-		  | back chain to caller 4                |
+-		  +---------------------------------------+ 180
+-		  | saved CR 4                            |
+-		  +---------------------------------------+ 184
+-		  | saved LR 4                            |
+-		  +---------------------------------------+ 188
+-		  | reserved for compilers 4              |
+-		  +---------------------------------------+ 192
+-		  | reserved for binders 4                |
+-		  +---------------------------------------+ 196
+-		  | saved TOC pointer 4                   |
+-		  +---------------------------------------+ 200
+-		  | always reserved 8*4=32  we store our  |
+-		  | GPRs here                             |
+-		  | r3                                    |
+-		  | .                                     |
+-		  | r10                                   |
+-		  +---------------------------------------+ 232
+-		  | overflow part                         |
+-		  +---------------------------------------+ xxx
+-		  | ????                                  |
+-		  +---------------------------------------+ xxx
++   m32/m64
++
++   The stack layout looks like this:
++
++   |   Additional params...			| |     Higher address
++   ~						~ ~
++   |   Parameters      (at least 8*4/8=32/64)	| | NUM_GPR_ARG_REGISTERS
++   |--------------------------------------------| |
++   |   TOC=R2 (AIX) Reserved (Darwin)   4/8	| |
++   |--------------------------------------------| |
++   |   Reserved                       2*4/8	| |
++   |--------------------------------------------| |
++   |   Space for callee's LR		4/8	| |
++   |--------------------------------------------| |
++   |   Saved CR [low word for m64]      4/8	| |
++   |--------------------------------------------| |
++   |   Current backchain pointer	4/8	|-/ Parent's frame.
++   |--------------------------------------------| <+ <<< on entry to ffi_closure_ASM
++   |   Result Bytes			16	| |
++   |--------------------------------------------| |
++   ~   padding to 16-byte alignment		~ ~
++   |--------------------------------------------| |
++   |   NUM_FPR_ARG_REGISTERS slots		| |
++   |   here fp13 .. fp1		       13*8	| |
++   |--------------------------------------------| |
++   |   R3..R10			  8*4/8=32/64	| | NUM_GPR_ARG_REGISTERS
++   |--------------------------------------------| |
++   |   TOC=R2 (AIX) Reserved (Darwin)   4/8	| |
++   |--------------------------------------------| |	stack	|
++   |   Reserved [compiler,binder]     2*4/8	| |	grows	|
++   |--------------------------------------------| |	down	V
++   |   Space for callee's LR		4/8	| |
++   |--------------------------------------------| |	lower addresses
++   |   Saved CR [low word for m64]      4/8	| |
++   |--------------------------------------------| |     stack pointer here
++   |   Current backchain pointer	4/8	|-/	during
++   |--------------------------------------------|   <<<	ffi_closure_ASM.
+ 
+ */
++
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*, void*, void**, void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   unsigned int *tramp;
+   struct ffi_aix_trampoline_struct *tramp_aix;
+   aix_fd *fd;
+ 
+   switch (cif->abi)
+     {
+-    case FFI_DARWIN:
++      case FFI_DARWIN:
+ 
+-      FFI_ASSERT (cif->abi == FFI_DARWIN);
++	FFI_ASSERT (cif->abi == FFI_DARWIN);
+ 
+-      tramp = (unsigned int *) &closure->tramp[0];
+-      tramp[0] = 0x7c0802a6;  /*   mflr    r0  */
+-      tramp[1] = 0x429f000d;  /*   bcl-    20,4*cr7+so,0x10  */
+-      tramp[4] = 0x7d6802a6;  /*   mflr    r11  */
+-      tramp[5] = 0x818b0000;  /*   lwz     r12,0(r11) function address  */
+-      tramp[6] = 0x7c0803a6;  /*   mtlr    r0   */
+-      tramp[7] = 0x7d8903a6;  /*   mtctr   r12  */
+-      tramp[8] = 0x816b0004;  /*   lwz     r11,4(r11) static chain  */
+-      tramp[9] = 0x4e800420;  /*   bctr  */
+-      tramp[2] = (unsigned long) ffi_closure_ASM; /* function  */
+-      tramp[3] = (unsigned long) codeloc; /* context  */
++	tramp = (unsigned int *) &closure->tramp[0];
++#if defined(POWERPC_DARWIN64)
++	tramp[0] = 0x7c0802a6;  /*   mflr    r0  */
++	tramp[1] = 0x429f0015;  /*   bcl-    20,4*cr7+so,  +0x18 (L1)  */
++	/* We put the addresses here.  */
++	tramp[6] = 0x7d6802a6;  /*L1:   mflr    r11  */
++	tramp[7] = 0xe98b0000;  /*   ld     r12,0(r11) function address  */
++	tramp[8] = 0x7c0803a6;  /*   mtlr    r0   */
++	tramp[9] = 0x7d8903a6;  /*   mtctr   r12  */
++	tramp[10] = 0xe96b0008;  /*   lwz     r11,8(r11) static chain  */
++	tramp[11] = 0x4e800420;  /*   bctr  */
+ 
+-      closure->cif = cif;
+-      closure->fun = fun;
+-      closure->user_data = user_data;
++	*((unsigned long *)&tramp[2]) = (unsigned long) ffi_closure_ASM; /* function  */
++	*((unsigned long *)&tramp[4]) = (unsigned long) codeloc; /* context  */
++#else
++	tramp[0] = 0x7c0802a6;  /*   mflr    r0  */
++	tramp[1] = 0x429f000d;  /*   bcl-    20,4*cr7+so,0x10  */
++	tramp[4] = 0x7d6802a6;  /*   mflr    r11  */
++	tramp[5] = 0x818b0000;  /*   lwz     r12,0(r11) function address  */
++	tramp[6] = 0x7c0803a6;  /*   mtlr    r0   */
++	tramp[7] = 0x7d8903a6;  /*   mtctr   r12  */
++	tramp[8] = 0x816b0004;  /*   lwz     r11,4(r11) static chain  */
++	tramp[9] = 0x4e800420;  /*   bctr  */
++	tramp[2] = (unsigned long) ffi_closure_ASM; /* function  */
++	tramp[3] = (unsigned long) codeloc; /* context  */
++#endif
++	closure->cif = cif;
++	closure->fun = fun;
++	closure->user_data = user_data;
+ 
+-      /* Flush the icache. Only necessary on Darwin.  */
+-      flush_range(codeloc, FFI_TRAMPOLINE_SIZE);
++	/* Flush the icache. Only necessary on Darwin.  */
++	flush_range(codeloc, FFI_TRAMPOLINE_SIZE);
+ 
+-      break;
++	break;
+ 
+     case FFI_AIX:
+ 
+       tramp_aix = (struct ffi_aix_trampoline_struct *) (closure->tramp);
+       fd = (aix_fd *)(void *)ffi_closure_ASM;
+ 
+       FFI_ASSERT (cif->abi == FFI_AIX);
+ 
+       tramp_aix->code_pointer = fd->code_pointer;
+       tramp_aix->toc = fd->toc;
+       tramp_aix->static_chain = codeloc;
+       closure->cif = cif;
+       closure->fun = fun;
+       closure->user_data = user_data;
++      break;
+ 
+     default:
+-
+-      FFI_ASSERT(0);
++      return FFI_BAD_ABI;
+       break;
+     }
+   return FFI_OK;
+ }
+ 
+ static void
+ flush_icache(char *addr)
+ {
+@@ -703,28 +1099,28 @@ flush_range(char * addr1, int size)
+ }
+ 
+ typedef union
+ {
+   float f;
+   double d;
+ } ffi_dblfl;
+ 
+-int
++ffi_type *
+ ffi_closure_helper_DARWIN (ffi_closure *, void *,
+ 			   unsigned long *, ffi_dblfl *);
+ 
+ /* Basically the trampoline invokes ffi_closure_ASM, and on
+    entry, r11 holds the address of the closure.
+    After storing the registers that could possibly contain
+    parameters to be passed into the stack frame and setting
+    up space for a return value, ffi_closure_ASM invokes the
+    following helper function to do most of the work.  */
+ 
+-int
++ffi_type *
+ ffi_closure_helper_DARWIN (ffi_closure *closure, void *rvalue,
+ 			   unsigned long *pgr, ffi_dblfl *pfr)
+ {
+   /* rvalue is the pointer to space for return value in closure assembly
+      pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM
+      pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM.  */
+ 
+   typedef double ldbits[2];
+@@ -736,97 +1132,132 @@ ffi_closure_helper_DARWIN (ffi_closure *
+   };
+ 
+   void **          avalue;
+   ffi_type **      arg_types;
+   long             i, avn;
+   ffi_cif *        cif;
+   ffi_dblfl *      end_pfr = pfr + NUM_FPR_ARG_REGISTERS;
+   unsigned         size_al;
++#if defined(POWERPC_DARWIN64)
++  unsigned 	   fpsused = 0;
++#endif
+ 
+   cif = closure->cif;
+   avalue = alloca (cif->nargs * sizeof(void *));
+ 
+-  /* Copy the caller's structure return value address so that the closure
+-     returns the data directly to the caller.  */
+   if (cif->rtype->type == FFI_TYPE_STRUCT)
+     {
++#if defined(POWERPC_DARWIN64)
++      if (!darwin64_struct_ret_by_value_p (cif->rtype))
++	{
++    	  /* Won't fit into the regs - return by ref.  */
++	  rvalue = (void *) *pgr;
++	  pgr++;
++	}
++#elif defined(DARWIN_PPC)
++      if (cif->rtype->size > 4)
++	{
++	  rvalue = (void *) *pgr;
++	  pgr++;
++	}
++#else /* assume we return by ref.  */
+       rvalue = (void *) *pgr;
+       pgr++;
++#endif
+     }
+ 
+   i = 0;
+   avn = cif->nargs;
+   arg_types = cif->arg_types;
+ 
+   /* Grab the addresses of the arguments from the stack frame.  */
+   while (i < avn)
+     {
+       switch (arg_types[i]->type)
+ 	{
+ 	case FFI_TYPE_SINT8:
+ 	case FFI_TYPE_UINT8:
+-#ifdef POWERPC64
++#if  defined(POWERPC64)
+ 	  avalue[i] = (char *) pgr + 7;
+ #else
+ 	  avalue[i] = (char *) pgr + 3;
+ #endif
+ 	  pgr++;
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT16:
+ 	case FFI_TYPE_UINT16:
+-#ifdef POWERPC64
++#if  defined(POWERPC64)
+ 	  avalue[i] = (char *) pgr + 6;
+ #else
+ 	  avalue[i] = (char *) pgr + 2;
+ #endif
+ 	  pgr++;
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT32:
+ 	case FFI_TYPE_UINT32:
+-#ifdef POWERPC64
++#if  defined(POWERPC64)
+ 	  avalue[i] = (char *) pgr + 4;
+ #else
+ 	case FFI_TYPE_POINTER:
+ 	  avalue[i] = pgr;
+ #endif
+ 	  pgr++;
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
+-#ifdef POWERPC64
+ 	  size_al = arg_types[i]->size;
+-	  if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE)
+-	    size_al = ALIGN (arg_types[i]->size, 8);
+-	  if (size_al < 3 && cif->abi == FFI_DARWIN)
+-	    avalue[i] = (char *) pgr + 8 - size_al;
+-	  else
+-	    avalue[i] = pgr;
++#if defined(POWERPC_DARWIN64)
++	  pgr = (unsigned long *)ALIGN((char *)pgr, arg_types[i]->alignment);
++	  if (size_al < 3 || size_al == 4)
++	    {
++	      avalue[i] = ((char *)pgr)+8-size_al;
++	      if (arg_types[i]->elements[0]->type == FFI_TYPE_FLOAT
++		  && fpsused < NUM_FPR_ARG_REGISTERS)
++		{
++		  *(float *)pgr = (float) *(double *)pfr;
++		  pfr++;
++		  fpsused++;
++		}
++	    }
++	  else 
++	    {
++	      if (size_al != 16)
++		pfr = (ffi_dblfl *) 
++		    darwin64_struct_floats_to_mem (arg_types[i], (char *)pgr,
++						   (double *)pfr, &fpsused);
++	      avalue[i] = pgr;
++	    }
+ 	  pgr += (size_al + 7) / 8;
+ #else
+-	  /* Structures that match the basic modes (QI 1 byte, HI 2 bytes,
+-	     SI 4 bytes) are aligned as if they were those modes.  */
+-	  size_al = arg_types[i]->size;
+ 	  /* If the first member of the struct is a double, then align
+ 	     the struct to double-word.  */
+ 	  if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE)
+ 	    size_al = ALIGN(arg_types[i]->size, 8);
++#  if defined(POWERPC64)
++	  FFI_ASSERT (cif->abi != FFI_DARWIN);
++	  avalue[i] = pgr;
++	  pgr += (size_al + 7) / 8;
++#  else
++	  /* Structures that match the basic modes (QI 1 byte, HI 2 bytes,
++	     SI 4 bytes) are aligned as if they were those modes.  */
+ 	  if (size_al < 3 && cif->abi == FFI_DARWIN)
+ 	    avalue[i] = (char*) pgr + 4 - size_al;
+ 	  else
+ 	    avalue[i] = pgr;
+ 	  pgr += (size_al + 3) / 4;
++#  endif
+ #endif
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT64:
+ 	case FFI_TYPE_UINT64:
+-#ifdef POWERPC64
++#if  defined(POWERPC64)
+ 	case FFI_TYPE_POINTER:
+ 	  avalue[i] = pgr;
+ 	  pgr++;
+ 	  break;
+ #else
+ 	  /* Long long ints are passed in two gpr's.  */
+ 	  avalue[i] = pgr;
+ 	  pgr += 2;
+@@ -919,10 +1350,10 @@ ffi_closure_helper_DARWIN (ffi_closure *
+ 	  FFI_ASSERT(0);
+ 	}
+       i++;
+     }
+ 
+   (closure->fun) (cif, rvalue, avalue, closure->user_data);
+ 
+   /* Tell ffi_closure_ASM to perform return type promotions.  */
+-  return cif->rtype->type;
++  return cif->rtype;
+ }
+diff --git a/js/src/ctypes/libffi/src/powerpc/ffi_linux64.c b/js/src/ctypes/libffi/src/powerpc/ffi_linux64.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/powerpc/ffi_linux64.c
+@@ -0,0 +1,943 @@
++/* -----------------------------------------------------------------------
++   ffi_linux64.c - Copyright (C) 2013 IBM
++                   Copyright (C) 2011 Anthony Green
++                   Copyright (C) 2011 Kyle Moffett
++                   Copyright (C) 2008 Red Hat, Inc
++                   Copyright (C) 2007, 2008 Free Software Foundation, Inc
++                   Copyright (c) 1998 Geoffrey Keating
++
++   PowerPC Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#include "ffi.h"
++
++#ifdef POWERPC64
++#include "ffi_common.h"
++#include "ffi_powerpc.h"
++
++
++/* About the LINUX64 ABI.  */
++enum {
++  NUM_GPR_ARG_REGISTERS64 = 8,
++  NUM_FPR_ARG_REGISTERS64 = 13
++};
++enum { ASM_NEEDS_REGISTERS64 = 4 };
++
++
++#if HAVE_LONG_DOUBLE_VARIANT && FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++/* Adjust size of ffi_type_longdouble.  */
++void FFI_HIDDEN
++ffi_prep_types_linux64 (ffi_abi abi)
++{
++  if ((abi & (FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128)) == FFI_LINUX)
++    {
++      ffi_type_longdouble.size = 8;
++      ffi_type_longdouble.alignment = 8;
++    }
++  else
++    {
++      ffi_type_longdouble.size = 16;
++      ffi_type_longdouble.alignment = 16;
++    }
++}
++#endif
++
++
++#if _CALL_ELF == 2
++static unsigned int
++discover_homogeneous_aggregate (const ffi_type *t, unsigned int *elnum)
++{
++  switch (t->type)
++    {
++    case FFI_TYPE_FLOAT:
++    case FFI_TYPE_DOUBLE:
++      *elnum = 1;
++      return (int) t->type;
++
++    case FFI_TYPE_STRUCT:;
++      {
++	unsigned int base_elt = 0, total_elnum = 0;
++	ffi_type **el = t->elements;
++	while (*el)
++	  {
++	    unsigned int el_elt, el_elnum = 0;
++	    el_elt = discover_homogeneous_aggregate (*el, &el_elnum);
++	    if (el_elt == 0
++		|| (base_elt && base_elt != el_elt))
++	      return 0;
++	    base_elt = el_elt;
++	    total_elnum += el_elnum;
++	    if (total_elnum > 8)
++	      return 0;
++	    el++;
++	  }
++	*elnum = total_elnum;
++	return base_elt;
++      }
++
++    default:
++      return 0;
++    }
++}
++#endif
++
++
++/* Perform machine dependent cif processing */
++static ffi_status
++ffi_prep_cif_linux64_core (ffi_cif *cif)
++{
++  ffi_type **ptr;
++  unsigned bytes;
++  unsigned i, fparg_count = 0, intarg_count = 0;
++  unsigned flags = cif->flags;
++#if _CALL_ELF == 2
++  unsigned int elt, elnum;
++#endif
++
++#if FFI_TYPE_LONGDOUBLE == FFI_TYPE_DOUBLE
++  /* If compiled without long double support..  */
++  if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
++    return FFI_BAD_ABI;
++#endif
++
++  /* The machine-independent calculation of cif->bytes doesn't work
++     for us.  Redo the calculation.  */
++#if _CALL_ELF == 2
++  /* Space for backchain, CR, LR, TOC and the asm's temp regs.  */
++  bytes = (4 + ASM_NEEDS_REGISTERS64) * sizeof (long);
++
++  /* Space for the general registers.  */
++  bytes += NUM_GPR_ARG_REGISTERS64 * sizeof (long);
++#else
++  /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp
++     regs.  */
++  bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long);
++
++  /* Space for the mandatory parm save area and general registers.  */
++  bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long);
++#endif
++
++  /* Return value handling.  */
++  switch (cif->rtype->type)
++    {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
++	flags |= FLAG_RETURNS_128BITS;
++      /* Fall through.  */
++#endif
++    case FFI_TYPE_DOUBLE:
++      flags |= FLAG_RETURNS_64BITS;
++      /* Fall through.  */
++    case FFI_TYPE_FLOAT:
++      flags |= FLAG_RETURNS_FP;
++      break;
++
++    case FFI_TYPE_UINT128:
++      flags |= FLAG_RETURNS_128BITS;
++      /* Fall through.  */
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_SINT64:
++      flags |= FLAG_RETURNS_64BITS;
++      break;
++
++    case FFI_TYPE_STRUCT:
++#if _CALL_ELF == 2
++      elt = discover_homogeneous_aggregate (cif->rtype, &elnum);
++      if (elt)
++	{
++	  if (elt == FFI_TYPE_DOUBLE)
++	    flags |= FLAG_RETURNS_64BITS;
++	  flags |= FLAG_RETURNS_FP | FLAG_RETURNS_SMST;
++	  break;
++	}
++      if (cif->rtype->size <= 16)
++	{
++	  flags |= FLAG_RETURNS_SMST;
++	  break;
++	}
++#endif
++      intarg_count++;
++      flags |= FLAG_RETVAL_REFERENCE;
++      /* Fall through.  */
++    case FFI_TYPE_VOID:
++      flags |= FLAG_RETURNS_NOTHING;
++      break;
++
++    default:
++      /* Returns 32-bit integer, or similar.  Nothing to do here.  */
++      break;
++    }
++
++  for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
++    {
++      unsigned int align;
++
++      switch ((*ptr)->type)
++	{
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
++	    {
++	      fparg_count++;
++	      intarg_count++;
++	    }
++	  /* Fall through.  */
++#endif
++	case FFI_TYPE_DOUBLE:
++	case FFI_TYPE_FLOAT:
++	  fparg_count++;
++	  intarg_count++;
++	  if (fparg_count > NUM_FPR_ARG_REGISTERS64)
++	    flags |= FLAG_ARG_NEEDS_PSAVE;
++	  break;
++
++	case FFI_TYPE_STRUCT:
++	  if ((cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0)
++	    {
++	      align = (*ptr)->alignment;
++	      if (align > 16)
++		align = 16;
++	      align = align / 8;
++	      if (align > 1)
++		intarg_count = ALIGN (intarg_count, align);
++	    }
++	  intarg_count += ((*ptr)->size + 7) / 8;
++#if _CALL_ELF == 2
++	  elt = discover_homogeneous_aggregate (*ptr, &elnum);
++	  if (elt)
++	    {
++	      fparg_count += elnum;
++	      if (fparg_count > NUM_FPR_ARG_REGISTERS64)
++		flags |= FLAG_ARG_NEEDS_PSAVE;
++	    }
++	  else
++#endif
++	    {
++	      if (intarg_count > NUM_GPR_ARG_REGISTERS64)
++		flags |= FLAG_ARG_NEEDS_PSAVE;
++	    }
++	  break;
++
++	case FFI_TYPE_POINTER:
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	case FFI_TYPE_INT:
++	case FFI_TYPE_UINT32:
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_UINT16:
++	case FFI_TYPE_SINT16:
++	case FFI_TYPE_UINT8:
++	case FFI_TYPE_SINT8:
++	  /* Everything else is passed as a 8-byte word in a GPR, either
++	     the object itself or a pointer to it.  */
++	  intarg_count++;
++	  if (intarg_count > NUM_GPR_ARG_REGISTERS64)
++	    flags |= FLAG_ARG_NEEDS_PSAVE;
++	  break;
++	default:
++	  FFI_ASSERT (0);
++	}
++    }
++
++  if (fparg_count != 0)
++    flags |= FLAG_FP_ARGUMENTS;
++  if (intarg_count > 4)
++    flags |= FLAG_4_GPR_ARGUMENTS;
++
++  /* Space for the FPR registers, if needed.  */
++  if (fparg_count != 0)
++    bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double);
++
++  /* Stack space.  */
++#if _CALL_ELF == 2
++  if ((flags & FLAG_ARG_NEEDS_PSAVE) != 0)
++    bytes += intarg_count * sizeof (long);
++#else
++  if (intarg_count > NUM_GPR_ARG_REGISTERS64)
++    bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long);
++#endif
++
++  /* The stack space allocated needs to be a multiple of 16 bytes.  */
++  bytes = (bytes + 15) & ~0xF;
++
++  cif->flags = flags;
++  cif->bytes = bytes;
++
++  return FFI_OK;
++}
++
++ffi_status FFI_HIDDEN
++ffi_prep_cif_linux64 (ffi_cif *cif)
++{
++  if ((cif->abi & FFI_LINUX) != 0)
++    cif->nfixedargs = cif->nargs;
++#if _CALL_ELF != 2
++  else if (cif->abi == FFI_COMPAT_LINUX64)
++    {
++      /* This call is from old code.  Don't touch cif->nfixedargs
++	 since old code will be using a smaller cif.  */
++      cif->flags |= FLAG_COMPAT;
++      /* Translate to new abi value.  */
++      cif->abi = FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128;
++    }
++#endif
++  else
++    return FFI_BAD_ABI;
++  return ffi_prep_cif_linux64_core (cif);
++}
++
++ffi_status FFI_HIDDEN
++ffi_prep_cif_linux64_var (ffi_cif *cif,
++			  unsigned int nfixedargs,
++			  unsigned int ntotalargs MAYBE_UNUSED)
++{
++  if ((cif->abi & FFI_LINUX) != 0)
++    cif->nfixedargs = nfixedargs;
++#if _CALL_ELF != 2
++  else if (cif->abi == FFI_COMPAT_LINUX64)
++    {
++      /* This call is from old code.  Don't touch cif->nfixedargs
++	 since old code will be using a smaller cif.  */
++      cif->flags |= FLAG_COMPAT;
++      /* Translate to new abi value.  */
++      cif->abi = FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128;
++    }
++#endif
++  else
++    return FFI_BAD_ABI;
++#if _CALL_ELF == 2
++  cif->flags |= FLAG_ARG_NEEDS_PSAVE;
++#endif
++  return ffi_prep_cif_linux64_core (cif);
++}
++
++
++/* ffi_prep_args64 is called by the assembly routine once stack space
++   has been allocated for the function's arguments.
++
++   The stack layout we want looks like this:
++
++   |   Ret addr from ffi_call_LINUX64	8bytes	|	higher addresses
++   |--------------------------------------------|
++   |   CR save area			8bytes	|
++   |--------------------------------------------|
++   |   Previous backchain pointer	8	|	stack pointer here
++   |--------------------------------------------|<+ <<<	on entry to
++   |   Saved r28-r31			4*8	| |	ffi_call_LINUX64
++   |--------------------------------------------| |
++   |   GPR registers r3-r10		8*8	| |
++   |--------------------------------------------| |
++   |   FPR registers f1-f13 (optional)	13*8	| |
++   |--------------------------------------------| |
++   |   Parameter save area		        | |
++   |--------------------------------------------| |
++   |   TOC save area			8	| |
++   |--------------------------------------------| |	stack	|
++   |   Linker doubleword		8	| |	grows	|
++   |--------------------------------------------| |	down	V
++   |   Compiler doubleword		8	| |
++   |--------------------------------------------| |	lower addresses
++   |   Space for callee's LR		8	| |
++   |--------------------------------------------| |
++   |   CR save area			8	| |
++   |--------------------------------------------| |	stack pointer here
++   |   Current backchain pointer	8	|-/	during
++   |--------------------------------------------|   <<<	ffi_call_LINUX64
++
++*/
++
++void FFI_HIDDEN
++ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
++{
++  const unsigned long bytes = ecif->cif->bytes;
++  const unsigned long flags = ecif->cif->flags;
++
++  typedef union
++  {
++    char *c;
++    unsigned long *ul;
++    float *f;
++    double *d;
++    size_t p;
++  } valp;
++
++  /* 'stacktop' points at the previous backchain pointer.  */
++  valp stacktop;
++
++  /* 'next_arg' points at the space for gpr3, and grows upwards as
++     we use GPR registers, then continues at rest.  */
++  valp gpr_base;
++  valp gpr_end;
++  valp rest;
++  valp next_arg;
++
++  /* 'fpr_base' points at the space for fpr3, and grows upwards as
++     we use FPR registers.  */
++  valp fpr_base;
++  unsigned int fparg_count;
++
++  unsigned int i, words, nargs, nfixedargs;
++  ffi_type **ptr;
++  double double_tmp;
++  union
++  {
++    void **v;
++    char **c;
++    signed char **sc;
++    unsigned char **uc;
++    signed short **ss;
++    unsigned short **us;
++    signed int **si;
++    unsigned int **ui;
++    unsigned long **ul;
++    float **f;
++    double **d;
++  } p_argv;
++  unsigned long gprvalue;
++  unsigned long align;
++
++  stacktop.c = (char *) stack + bytes;
++  gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64;
++  gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64;
++#if _CALL_ELF == 2
++  rest.ul = stack + 4 + NUM_GPR_ARG_REGISTERS64;
++#else
++  rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64;
++#endif
++  fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64;
++  fparg_count = 0;
++  next_arg.ul = gpr_base.ul;
++
++  /* Check that everything starts aligned properly.  */
++  FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
++  FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
++  FFI_ASSERT ((bytes & 0xF) == 0);
++
++  /* Deal with return values that are actually pass-by-reference.  */
++  if (flags & FLAG_RETVAL_REFERENCE)
++    *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue;
++
++  /* Now for the arguments.  */
++  p_argv.v = ecif->avalue;
++  nargs = ecif->cif->nargs;
++#if _CALL_ELF != 2
++  nfixedargs = (unsigned) -1;
++  if ((flags & FLAG_COMPAT) == 0)
++#endif
++    nfixedargs = ecif->cif->nfixedargs;
++  for (ptr = ecif->cif->arg_types, i = 0;
++       i < nargs;
++       i++, ptr++, p_argv.v++)
++    {
++#if _CALL_ELF == 2
++      unsigned int elt, elnum;
++#endif
++
++      switch ((*ptr)->type)
++	{
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  if ((ecif->cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
++	    {
++	      double_tmp = (*p_argv.d)[0];
++	      if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
++		{
++		  *fpr_base.d++ = double_tmp;
++# if _CALL_ELF != 2
++		  if ((flags & FLAG_COMPAT) != 0)
++		    *next_arg.d = double_tmp;
++# endif
++		}
++	      else
++		*next_arg.d = double_tmp;
++	      if (++next_arg.ul == gpr_end.ul)
++		next_arg.ul = rest.ul;
++	      fparg_count++;
++	      double_tmp = (*p_argv.d)[1];
++	      if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
++		{
++		  *fpr_base.d++ = double_tmp;
++# if _CALL_ELF != 2
++		  if ((flags & FLAG_COMPAT) != 0)
++		    *next_arg.d = double_tmp;
++# endif
++		}
++	      else
++		*next_arg.d = double_tmp;
++	      if (++next_arg.ul == gpr_end.ul)
++		next_arg.ul = rest.ul;
++	      fparg_count++;
++	      FFI_ASSERT (__LDBL_MANT_DIG__ == 106);
++	      FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	      break;
++	    }
++	  /* Fall through.  */
++#endif
++	case FFI_TYPE_DOUBLE:
++	  double_tmp = **p_argv.d;
++	  if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
++	    {
++	      *fpr_base.d++ = double_tmp;
++#if _CALL_ELF != 2
++	      if ((flags & FLAG_COMPAT) != 0)
++		*next_arg.d = double_tmp;
++#endif
++	    }
++	  else
++	    *next_arg.d = double_tmp;
++	  if (++next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
++	  fparg_count++;
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	  break;
++
++	case FFI_TYPE_FLOAT:
++	  double_tmp = **p_argv.f;
++	  if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
++	    {
++	      *fpr_base.d++ = double_tmp;
++#if _CALL_ELF != 2
++	      if ((flags & FLAG_COMPAT) != 0)
++		*next_arg.f = (float) double_tmp;
++#endif
++	    }
++	  else
++	    *next_arg.f = (float) double_tmp;
++	  if (++next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
++	  fparg_count++;
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	  break;
++
++	case FFI_TYPE_STRUCT:
++	  if ((ecif->cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0)
++	    {
++	      align = (*ptr)->alignment;
++	      if (align > 16)
++		align = 16;
++	      if (align > 1)
++		next_arg.p = ALIGN (next_arg.p, align);
++	    }
++#if _CALL_ELF == 2
++	  elt = discover_homogeneous_aggregate (*ptr, &elnum);
++	  if (elt)
++	    {
++	      union {
++		void *v;
++		float *f;
++		double *d;
++	      } arg;
++
++	      arg.v = *p_argv.v;
++	      if (elt == FFI_TYPE_FLOAT)
++		{
++		  do
++		    {
++		      double_tmp = *arg.f++;
++		      if (fparg_count < NUM_FPR_ARG_REGISTERS64
++			  && i < nfixedargs)
++			*fpr_base.d++ = double_tmp;
++		      else
++			*next_arg.f = (float) double_tmp;
++		      if (++next_arg.f == gpr_end.f)
++			next_arg.f = rest.f;
++		      fparg_count++;
++		    }
++		  while (--elnum != 0);
++		  if ((next_arg.p & 3) != 0)
++		    {
++		      if (++next_arg.f == gpr_end.f)
++			next_arg.f = rest.f;
++		    }
++		}
++	      else
++		do
++		  {
++		    double_tmp = *arg.d++;
++		    if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs)
++		      *fpr_base.d++ = double_tmp;
++		    else
++		      *next_arg.d = double_tmp;
++		    if (++next_arg.d == gpr_end.d)
++		      next_arg.d = rest.d;
++		    fparg_count++;
++		  }
++		while (--elnum != 0);
++	    }
++	  else
++#endif
++	    {
++	      words = ((*ptr)->size + 7) / 8;
++	      if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul)
++		{
++		  size_t first = gpr_end.c - next_arg.c;
++		  memcpy (next_arg.c, *p_argv.c, first);
++		  memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first);
++		  next_arg.c = rest.c + words * 8 - first;
++		}
++	      else
++		{
++		  char *where = next_arg.c;
++
++#ifndef __LITTLE_ENDIAN__
++		  /* Structures with size less than eight bytes are passed
++		     left-padded.  */
++		  if ((*ptr)->size < 8)
++		    where += 8 - (*ptr)->size;
++#endif
++		  memcpy (where, *p_argv.c, (*ptr)->size);
++		  next_arg.ul += words;
++		  if (next_arg.ul == gpr_end.ul)
++		    next_arg.ul = rest.ul;
++		}
++	    }
++	  break;
++
++	case FFI_TYPE_UINT8:
++	  gprvalue = **p_argv.uc;
++	  goto putgpr;
++	case FFI_TYPE_SINT8:
++	  gprvalue = **p_argv.sc;
++	  goto putgpr;
++	case FFI_TYPE_UINT16:
++	  gprvalue = **p_argv.us;
++	  goto putgpr;
++	case FFI_TYPE_SINT16:
++	  gprvalue = **p_argv.ss;
++	  goto putgpr;
++	case FFI_TYPE_UINT32:
++	  gprvalue = **p_argv.ui;
++	  goto putgpr;
++	case FFI_TYPE_INT:
++	case FFI_TYPE_SINT32:
++	  gprvalue = **p_argv.si;
++	  goto putgpr;
++
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	case FFI_TYPE_POINTER:
++	  gprvalue = **p_argv.ul;
++	putgpr:
++	  *next_arg.ul++ = gprvalue;
++	  if (next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
++	  break;
++	}
++    }
++
++  FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS
++	      || (next_arg.ul >= gpr_base.ul
++		  && next_arg.ul <= gpr_base.ul + 4));
++}
++
++
++#if _CALL_ELF == 2
++#define MIN_CACHE_LINE_SIZE 8
++
++static void
++flush_icache (char *wraddr, char *xaddr, int size)
++{
++  int i;
++  for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
++    __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
++		      : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
++  __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
++		    : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
++		    : "memory");
++}
++#endif
++
++ffi_status
++ffi_prep_closure_loc_linux64 (ffi_closure *closure,
++			      ffi_cif *cif,
++			      void (*fun) (ffi_cif *, void *, void **, void *),
++			      void *user_data,
++			      void *codeloc)
++{
++#if _CALL_ELF == 2
++  unsigned int *tramp = (unsigned int *) &closure->tramp[0];
++
++  if (cif->abi < FFI_LINUX || cif->abi >= FFI_LAST_ABI)
++    return FFI_BAD_ABI;
++
++  tramp[0] = 0xe96c0018;	/* 0:	ld	11,2f-0b(12)	*/
++  tramp[1] = 0xe98c0010;	/*	ld	12,1f-0b(12)	*/
++  tramp[2] = 0x7d8903a6;	/*	mtctr	12		*/
++  tramp[3] = 0x4e800420;	/*	bctr			*/
++				/* 1:	.quad	function_addr	*/
++				/* 2:	.quad	context		*/
++  *(void **) &tramp[4] = (void *) ffi_closure_LINUX64;
++  *(void **) &tramp[6] = codeloc;
++  flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
++#else
++  void **tramp = (void **) &closure->tramp[0];
++
++  if (cif->abi < FFI_LINUX || cif->abi >= FFI_LAST_ABI)
++    return FFI_BAD_ABI;
++
++  /* Copy function address and TOC from ffi_closure_LINUX64.  */
++  memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
++  tramp[2] = tramp[1];
++  tramp[1] = codeloc;
++#endif
++
++  closure->cif = cif;
++  closure->fun = fun;
++  closure->user_data = user_data;
++
++  return FFI_OK;
++}
++
++
++int FFI_HIDDEN
++ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
++			    unsigned long *pst, ffi_dblfl *pfr)
++{
++  /* rvalue is the pointer to space for return value in closure assembly */
++  /* pst is the pointer to parameter save area
++     (r3-r10 are stored into its first 8 slots by ffi_closure_LINUX64) */
++  /* pfr is the pointer to where f1-f13 are stored in ffi_closure_LINUX64 */
++
++  void **avalue;
++  ffi_type **arg_types;
++  unsigned long i, avn, nfixedargs;
++  ffi_cif *cif;
++  ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64;
++  unsigned long align;
++
++  cif = closure->cif;
++  avalue = alloca (cif->nargs * sizeof (void *));
++
++  /* Copy the caller's structure return value address so that the
++     closure returns the data directly to the caller.  */
++  if (cif->rtype->type == FFI_TYPE_STRUCT
++      && (cif->flags & FLAG_RETURNS_SMST) == 0)
++    {
++      rvalue = (void *) *pst;
++      pst++;
++    }
++
++  i = 0;
++  avn = cif->nargs;
++#if _CALL_ELF != 2
++  nfixedargs = (unsigned) -1;
++  if ((cif->flags & FLAG_COMPAT) == 0)
++#endif
++    nfixedargs = cif->nfixedargs;
++  arg_types = cif->arg_types;
++
++  /* Grab the addresses of the arguments from the stack frame.  */
++  while (i < avn)
++    {
++      unsigned int elt, elnum;
++
++      switch (arg_types[i]->type)
++	{
++	case FFI_TYPE_SINT8:
++	case FFI_TYPE_UINT8:
++#ifndef __LITTLE_ENDIAN__
++	  avalue[i] = (char *) pst + 7;
++	  pst++;
++	  break;
++#endif
++
++	case FFI_TYPE_SINT16:
++	case FFI_TYPE_UINT16:
++#ifndef __LITTLE_ENDIAN__
++	  avalue[i] = (char *) pst + 6;
++	  pst++;
++	  break;
++#endif
++
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_UINT32:
++#ifndef __LITTLE_ENDIAN__
++	  avalue[i] = (char *) pst + 4;
++	  pst++;
++	  break;
++#endif
++
++	case FFI_TYPE_SINT64:
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_POINTER:
++	  avalue[i] = pst;
++	  pst++;
++	  break;
++
++	case FFI_TYPE_STRUCT:
++	  if ((cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0)
++	    {
++	      align = arg_types[i]->alignment;
++	      if (align > 16)
++		align = 16;
++	      if (align > 1)
++		pst = (unsigned long *) ALIGN ((size_t) pst, align);
++	    }
++	  elt = 0;
++#if _CALL_ELF == 2
++	  elt = discover_homogeneous_aggregate (arg_types[i], &elnum);
++#endif
++	  if (elt)
++	    {
++	      union {
++		void *v;
++		unsigned long *ul;
++		float *f;
++		double *d;
++		size_t p;
++	      } to, from;
++
++	      /* Repackage the aggregate from its parts.  The
++		 aggregate size is not greater than the space taken by
++		 the registers so store back to the register/parameter
++		 save arrays.  */
++	      if (pfr + elnum <= end_pfr)
++		to.v = pfr;
++	      else
++		to.v = pst;
++
++	      avalue[i] = to.v;
++	      from.ul = pst;
++	      if (elt == FFI_TYPE_FLOAT)
++		{
++		  do
++		    {
++		      if (pfr < end_pfr && i < nfixedargs)
++			{
++			  *to.f = (float) pfr->d;
++			  pfr++;
++			}
++		      else
++			*to.f = *from.f;
++		      to.f++;
++		      from.f++;
++		    }
++		  while (--elnum != 0);
++		}
++	      else
++		{
++		  do
++		    {
++		      if (pfr < end_pfr && i < nfixedargs)
++			{
++			  *to.d = pfr->d;
++			  pfr++;
++			}
++		      else
++			*to.d = *from.d;
++		      to.d++;
++		      from.d++;
++		    }
++		  while (--elnum != 0);
++		}
++	    }
++	  else
++	    {
++#ifndef __LITTLE_ENDIAN__
++	      /* Structures with size less than eight bytes are passed
++		 left-padded.  */
++	      if (arg_types[i]->size < 8)
++		avalue[i] = (char *) pst + 8 - arg_types[i]->size;
++	      else
++#endif
++		avalue[i] = pst;
++	    }
++	  pst += (arg_types[i]->size + 7) / 8;
++	  break;
++
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0)
++	    {
++	      if (pfr + 1 < end_pfr && i + 1 < nfixedargs)
++		{
++		  avalue[i] = pfr;
++		  pfr += 2;
++		}
++	      else
++		{
++		  if (pfr < end_pfr && i < nfixedargs)
++		    {
++		      /* Passed partly in f13 and partly on the stack.
++			 Move it all to the stack.  */
++		      *pst = *(unsigned long *) pfr;
++		      pfr++;
++		    }
++		  avalue[i] = pst;
++		}
++	      pst += 2;
++	      break;
++	    }
++	  /* Fall through.  */
++#endif
++	case FFI_TYPE_DOUBLE:
++	  /* On the outgoing stack all values are aligned to 8 */
++	  /* there are 13 64bit floating point registers */
++
++	  if (pfr < end_pfr && i < nfixedargs)
++	    {
++	      avalue[i] = pfr;
++	      pfr++;
++	    }
++	  else
++	    avalue[i] = pst;
++	  pst++;
++	  break;
++
++	case FFI_TYPE_FLOAT:
++	  if (pfr < end_pfr && i < nfixedargs)
++	    {
++	      /* Float values are stored as doubles in the
++		 ffi_closure_LINUX64 code.  Fix them here.  */
++	      pfr->f = (float) pfr->d;
++	      avalue[i] = pfr;
++	      pfr++;
++	    }
++	  else
++	    avalue[i] = pst;
++	  pst++;
++	  break;
++
++	default:
++	  FFI_ASSERT (0);
++	}
++
++      i++;
++    }
++
++
++  (closure->fun) (cif, rvalue, avalue, closure->user_data);
++
++  /* Tell ffi_closure_LINUX64 how to perform return type promotions.  */
++  if ((cif->flags & FLAG_RETURNS_SMST) != 0)
++    {
++      if ((cif->flags & FLAG_RETURNS_FP) == 0)
++	return FFI_V2_TYPE_SMALL_STRUCT + cif->rtype->size - 1;
++      else if ((cif->flags & FLAG_RETURNS_64BITS) != 0)
++	return FFI_V2_TYPE_DOUBLE_HOMOG;
++      else
++	return FFI_V2_TYPE_FLOAT_HOMOG;
++    }
++  return cif->rtype->type;
++}
++#endif
+diff --git a/js/src/ctypes/libffi/src/powerpc/ffi_powerpc.h b/js/src/ctypes/libffi/src/powerpc/ffi_powerpc.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/powerpc/ffi_powerpc.h
+@@ -0,0 +1,77 @@
++/* -----------------------------------------------------------------------
++   ffi_powerpc.h - Copyright (C) 2013 IBM
++                   Copyright (C) 2011 Anthony Green
++                   Copyright (C) 2011 Kyle Moffett
++                   Copyright (C) 2008 Red Hat, Inc
++                   Copyright (C) 2007, 2008 Free Software Foundation, Inc
++                   Copyright (c) 1998 Geoffrey Keating
++
++   PowerPC Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++enum {
++  /* The assembly depends on these exact flags.  */
++  /* These go in cr7 */
++  FLAG_RETURNS_SMST	= 1 << (31-31), /* Used for FFI_SYSV small structs.  */
++  FLAG_RETURNS_NOTHING  = 1 << (31-30),
++  FLAG_RETURNS_FP       = 1 << (31-29),
++  FLAG_RETURNS_64BITS   = 1 << (31-28),
++
++  /* This goes in cr6 */
++  FLAG_RETURNS_128BITS  = 1 << (31-27),
++
++  FLAG_COMPAT		= 1 << (31- 8), /* Not used by assembly */
++
++  /* These go in cr1 */
++  FLAG_ARG_NEEDS_COPY   = 1 << (31- 7), /* Used by sysv code */
++  FLAG_ARG_NEEDS_PSAVE  = FLAG_ARG_NEEDS_COPY, /* Used by linux64 code */
++  FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI */
++  FLAG_4_GPR_ARGUMENTS  = 1 << (31- 5),
++  FLAG_RETVAL_REFERENCE = 1 << (31- 4)
++};
++
++typedef union
++{
++  float f;
++  double d;
++} ffi_dblfl;
++
++void FFI_HIDDEN ffi_closure_SYSV (void);
++void FFI_HIDDEN ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *,
++			      void (*)(void));
++
++void FFI_HIDDEN ffi_prep_types_sysv (ffi_abi);
++ffi_status FFI_HIDDEN ffi_prep_cif_sysv (ffi_cif *);
++int FFI_HIDDEN ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *,
++					ffi_dblfl *, unsigned long *);
++
++void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long, unsigned long,
++				 unsigned long *, void (*)(void));
++void FFI_HIDDEN ffi_closure_LINUX64 (void);
++
++void FFI_HIDDEN ffi_prep_types_linux64 (ffi_abi);
++ffi_status FFI_HIDDEN ffi_prep_cif_linux64 (ffi_cif *);
++ffi_status FFI_HIDDEN ffi_prep_cif_linux64_var (ffi_cif *, unsigned int,
++						unsigned int);
++void FFI_HIDDEN ffi_prep_args64 (extended_cif *, unsigned long *const);
++int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *,
++					   unsigned long *, ffi_dblfl *);
+diff --git a/js/src/ctypes/libffi/src/powerpc/ffi_sysv.c b/js/src/ctypes/libffi/src/powerpc/ffi_sysv.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/powerpc/ffi_sysv.c
+@@ -0,0 +1,931 @@
++/* -----------------------------------------------------------------------
++   ffi_sysv.c - Copyright (C) 2013 IBM
++                Copyright (C) 2011 Anthony Green
++                Copyright (C) 2011 Kyle Moffett
++                Copyright (C) 2008 Red Hat, Inc
++                Copyright (C) 2007, 2008 Free Software Foundation, Inc
++                Copyright (c) 1998 Geoffrey Keating
++
++   PowerPC Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#include "ffi.h"
++
++#ifndef POWERPC64
++#include "ffi_common.h"
++#include "ffi_powerpc.h"
++
++
++/* About the SYSV ABI.  */
++#define ASM_NEEDS_REGISTERS 4
++#define NUM_GPR_ARG_REGISTERS 8
++#define NUM_FPR_ARG_REGISTERS 8
++
++
++#if HAVE_LONG_DOUBLE_VARIANT && FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++/* Adjust size of ffi_type_longdouble.  */
++void FFI_HIDDEN
++ffi_prep_types_sysv (ffi_abi abi)
++{
++  if ((abi & (FFI_SYSV | FFI_SYSV_LONG_DOUBLE_128)) == FFI_SYSV)
++    {
++      ffi_type_longdouble.size = 8;
++      ffi_type_longdouble.alignment = 8;
++    }
++  else
++    {
++      ffi_type_longdouble.size = 16;
++      ffi_type_longdouble.alignment = 16;
++    }
++}
++#endif
++
++/* Transform long double, double and float to other types as per abi.  */
++static int
++translate_float (int abi, int type)
++{
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++  if (type == FFI_TYPE_LONGDOUBLE
++      && (abi & FFI_SYSV_LONG_DOUBLE_128) == 0)
++    type = FFI_TYPE_DOUBLE;
++#endif
++  if ((abi & FFI_SYSV_SOFT_FLOAT) != 0)
++    {
++      if (type == FFI_TYPE_FLOAT)
++	type = FFI_TYPE_UINT32;
++      else if (type == FFI_TYPE_DOUBLE)
++	type = FFI_TYPE_UINT64;
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++      else if (type == FFI_TYPE_LONGDOUBLE)
++	type = FFI_TYPE_UINT128;
++    }
++  else if ((abi & FFI_SYSV_IBM_LONG_DOUBLE) == 0)
++    {
++      if (type == FFI_TYPE_LONGDOUBLE)
++	type = FFI_TYPE_STRUCT;
++#endif
++    }
++  return type;
++}
++
++/* Perform machine dependent cif processing */
++static ffi_status
++ffi_prep_cif_sysv_core (ffi_cif *cif)
++{
++  ffi_type **ptr;
++  unsigned bytes;
++  unsigned i, fparg_count = 0, intarg_count = 0;
++  unsigned flags = cif->flags;
++  unsigned struct_copy_size = 0;
++  unsigned type = cif->rtype->type;
++  unsigned size = cif->rtype->size;
++
++  /* The machine-independent calculation of cif->bytes doesn't work
++     for us.  Redo the calculation.  */
++
++  /* Space for the frame pointer, callee's LR, and the asm's temp regs.  */
++  bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int);
++
++  /* Space for the GPR registers.  */
++  bytes += NUM_GPR_ARG_REGISTERS * sizeof (int);
++
++  /* Return value handling.  The rules for SYSV are as follows:
++     - 32-bit (or less) integer values are returned in gpr3;
++     - Structures of size <= 4 bytes also returned in gpr3;
++     - 64-bit integer values and structures between 5 and 8 bytes are returned
++     in gpr3 and gpr4;
++     - Larger structures are allocated space and a pointer is passed as
++     the first argument.
++     - Single/double FP values are returned in fpr1;
++     - long doubles (if not equivalent to double) are returned in
++     fpr1,fpr2 for Linux and as for large structs for SysV.  */
++
++  type = translate_float (cif->abi, type);
++
++  switch (type)
++    {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      flags |= FLAG_RETURNS_128BITS;
++      /* Fall through.  */
++#endif
++    case FFI_TYPE_DOUBLE:
++      flags |= FLAG_RETURNS_64BITS;
++      /* Fall through.  */
++    case FFI_TYPE_FLOAT:
++      flags |= FLAG_RETURNS_FP;
++#ifdef __NO_FPRS__
++      return FFI_BAD_ABI;
++#endif
++      break;
++
++    case FFI_TYPE_UINT128:
++      flags |= FLAG_RETURNS_128BITS;
++      /* Fall through.  */
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_SINT64:
++      flags |= FLAG_RETURNS_64BITS;
++      break;
++
++    case FFI_TYPE_STRUCT:
++      /* The final SYSV ABI says that structures smaller or equal 8 bytes
++	 are returned in r3/r4.  A draft ABI used by linux instead
++	 returns them in memory.  */
++      if ((cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8)
++	{
++	  flags |= FLAG_RETURNS_SMST;
++	  break;
++	}
++      intarg_count++;
++      flags |= FLAG_RETVAL_REFERENCE;
++      /* Fall through.  */
++    case FFI_TYPE_VOID:
++      flags |= FLAG_RETURNS_NOTHING;
++      break;
++
++    default:
++      /* Returns 32-bit integer, or similar.  Nothing to do here.  */
++      break;
++    }
++
++  /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the
++     first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest
++     goes on the stack.  Structures and long doubles (if not equivalent
++     to double) are passed as a pointer to a copy of the structure.
++     Stuff on the stack needs to keep proper alignment.  */
++  for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
++    {
++      unsigned short typenum = (*ptr)->type;
++
++      typenum = translate_float (cif->abi, typenum);
++
++      switch (typenum)
++	{
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  fparg_count++;
++	  /* Fall thru */
++#endif
++	case FFI_TYPE_DOUBLE:
++	  fparg_count++;
++	  /* If this FP arg is going on the stack, it must be
++	     8-byte-aligned.  */
++	  if (fparg_count > NUM_FPR_ARG_REGISTERS
++	      && intarg_count >= NUM_GPR_ARG_REGISTERS
++	      && intarg_count % 2 != 0)
++	    intarg_count++;
++#ifdef __NO_FPRS__
++	  return FFI_BAD_ABI;
++#endif
++	  break;
++
++	case FFI_TYPE_FLOAT:
++	  fparg_count++;
++#ifdef __NO_FPRS__
++	  return FFI_BAD_ABI;
++#endif
++	  break;
++
++	case FFI_TYPE_UINT128:
++	  /* A long double in FFI_LINUX_SOFT_FLOAT can use only a set
++	     of four consecutive gprs. If we do not have enough, we
++	     have to adjust the intarg_count value.  */
++	  if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3
++	      && intarg_count < NUM_GPR_ARG_REGISTERS)
++	    intarg_count = NUM_GPR_ARG_REGISTERS;
++	  intarg_count += 4;
++	  break;
++
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	  /* 'long long' arguments are passed as two words, but
++	     either both words must fit in registers or both go
++	     on the stack.  If they go on the stack, they must
++	     be 8-byte-aligned.
++
++	     Also, only certain register pairs can be used for
++	     passing long long int -- specifically (r3,r4), (r5,r6),
++	     (r7,r8), (r9,r10).  */
++	  if (intarg_count == NUM_GPR_ARG_REGISTERS-1
++	      || intarg_count % 2 != 0)
++	    intarg_count++;
++	  intarg_count += 2;
++	  break;
++
++	case FFI_TYPE_STRUCT:
++	  /* We must allocate space for a copy of these to enforce
++	     pass-by-value.  Pad the space up to a multiple of 16
++	     bytes (the maximum alignment required for anything under
++	     the SYSV ABI).  */
++	  struct_copy_size += ((*ptr)->size + 15) & ~0xF;
++	  /* Fall through (allocate space for the pointer).  */
++
++	case FFI_TYPE_POINTER:
++	case FFI_TYPE_INT:
++	case FFI_TYPE_UINT32:
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_UINT16:
++	case FFI_TYPE_SINT16:
++	case FFI_TYPE_UINT8:
++	case FFI_TYPE_SINT8:
++	  /* Everything else is passed as a 4-byte word in a GPR, either
++	     the object itself or a pointer to it.  */
++	  intarg_count++;
++	  break;
++
++	default:
++	  FFI_ASSERT (0);
++	}
++    }
++
++  if (fparg_count != 0)
++    flags |= FLAG_FP_ARGUMENTS;
++  if (intarg_count > 4)
++    flags |= FLAG_4_GPR_ARGUMENTS;
++  if (struct_copy_size != 0)
++    flags |= FLAG_ARG_NEEDS_COPY;
++
++  /* Space for the FPR registers, if needed.  */
++  if (fparg_count != 0)
++    bytes += NUM_FPR_ARG_REGISTERS * sizeof (double);
++
++  /* Stack space.  */
++  if (intarg_count > NUM_GPR_ARG_REGISTERS)
++    bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int);
++  if (fparg_count > NUM_FPR_ARG_REGISTERS)
++    bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double);
++
++  /* The stack space allocated needs to be a multiple of 16 bytes.  */
++  bytes = (bytes + 15) & ~0xF;
++
++  /* Add in the space for the copied structures.  */
++  bytes += struct_copy_size;
++
++  cif->flags = flags;
++  cif->bytes = bytes;
++
++  return FFI_OK;
++}
++
++ffi_status FFI_HIDDEN
++ffi_prep_cif_sysv (ffi_cif *cif)
++{
++  if ((cif->abi & FFI_SYSV) == 0)
++    {
++      /* This call is from old code.  Translate to new ABI values.  */
++      cif->flags |= FLAG_COMPAT;
++      switch (cif->abi)
++	{
++	default:
++	  return FFI_BAD_ABI;
++
++	case FFI_COMPAT_SYSV:
++	  cif->abi = FFI_SYSV | FFI_SYSV_STRUCT_RET | FFI_SYSV_LONG_DOUBLE_128;
++	  break;
++
++	case FFI_COMPAT_GCC_SYSV:
++	  cif->abi = FFI_SYSV | FFI_SYSV_LONG_DOUBLE_128;
++	  break;
++
++	case FFI_COMPAT_LINUX:
++	  cif->abi = (FFI_SYSV | FFI_SYSV_IBM_LONG_DOUBLE
++		      | FFI_SYSV_LONG_DOUBLE_128);
++	  break;
++
++	case FFI_COMPAT_LINUX_SOFT_FLOAT:
++	  cif->abi = (FFI_SYSV | FFI_SYSV_SOFT_FLOAT | FFI_SYSV_IBM_LONG_DOUBLE
++		      | FFI_SYSV_LONG_DOUBLE_128);
++	  break;
++	}
++    }
++  return ffi_prep_cif_sysv_core (cif);
++}
++
++/* ffi_prep_args_SYSV is called by the assembly routine once stack space
++   has been allocated for the function's arguments.
++
++   The stack layout we want looks like this:
++
++   |   Return address from ffi_call_SYSV 4bytes	|	higher addresses
++   |--------------------------------------------|
++   |   Previous backchain pointer	4	|       stack pointer here
++   |--------------------------------------------|<+ <<<	on entry to
++   |   Saved r28-r31			4*4	| |	ffi_call_SYSV
++   |--------------------------------------------| |
++   |   GPR registers r3-r10		8*4	| |	ffi_call_SYSV
++   |--------------------------------------------| |
++   |   FPR registers f1-f8 (optional)	8*8	| |
++   |--------------------------------------------| |	stack	|
++   |   Space for copied structures		| |	grows	|
++   |--------------------------------------------| |	down    V
++   |   Parameters that didn't fit in registers  | |
++   |--------------------------------------------| |	lower addresses
++   |   Space for callee's LR		4	| |
++   |--------------------------------------------| |	stack pointer here
++   |   Current backchain pointer	4	|-/	during
++   |--------------------------------------------|   <<<	ffi_call_SYSV
++
++*/
++
++void FFI_HIDDEN
++ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
++{
++  const unsigned bytes = ecif->cif->bytes;
++  const unsigned flags = ecif->cif->flags;
++
++  typedef union
++  {
++    char *c;
++    unsigned *u;
++    long long *ll;
++    float *f;
++    double *d;
++  } valp;
++
++  /* 'stacktop' points at the previous backchain pointer.  */
++  valp stacktop;
++
++  /* 'gpr_base' points at the space for gpr3, and grows upwards as
++     we use GPR registers.  */
++  valp gpr_base;
++  int intarg_count;
++
++#ifndef __NO_FPRS__
++  /* 'fpr_base' points at the space for fpr1, and grows upwards as
++     we use FPR registers.  */
++  valp fpr_base;
++  int fparg_count;
++#endif
++
++  /* 'copy_space' grows down as we put structures in it.  It should
++     stay 16-byte aligned.  */
++  valp copy_space;
++
++  /* 'next_arg' grows up as we put parameters in it.  */
++  valp next_arg;
++
++  int i;
++  ffi_type **ptr;
++#ifndef __NO_FPRS__
++  double double_tmp;
++#endif
++  union
++  {
++    void **v;
++    char **c;
++    signed char **sc;
++    unsigned char **uc;
++    signed short **ss;
++    unsigned short **us;
++    unsigned int **ui;
++    long long **ll;
++    float **f;
++    double **d;
++  } p_argv;
++  size_t struct_copy_size;
++  unsigned gprvalue;
++
++  stacktop.c = (char *) stack + bytes;
++  gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
++  intarg_count = 0;
++#ifndef __NO_FPRS__
++  fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
++  fparg_count = 0;
++  copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
++#else
++  copy_space.c = gpr_base.c;
++#endif
++  next_arg.u = stack + 2;
++
++  /* Check that everything starts aligned properly.  */
++  FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
++  FFI_ASSERT (((unsigned long) copy_space.c & 0xF) == 0);
++  FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
++  FFI_ASSERT ((bytes & 0xF) == 0);
++  FFI_ASSERT (copy_space.c >= next_arg.c);
++
++  /* Deal with return values that are actually pass-by-reference.  */
++  if (flags & FLAG_RETVAL_REFERENCE)
++    {
++      *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue;
++      intarg_count++;
++    }
++
++  /* Now for the arguments.  */
++  p_argv.v = ecif->avalue;
++  for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
++       i > 0;
++       i--, ptr++, p_argv.v++)
++    {
++      unsigned int typenum = (*ptr)->type;
++
++      typenum = translate_float (ecif->cif->abi, typenum);
++
++      /* Now test the translated value */
++      switch (typenum)
++	{
++#ifndef __NO_FPRS__
++# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  double_tmp = (*p_argv.d)[0];
++
++	  if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1)
++	    {
++	      if (intarg_count >= NUM_GPR_ARG_REGISTERS
++		  && intarg_count % 2 != 0)
++		{
++		  intarg_count++;
++		  next_arg.u++;
++		}
++	      *next_arg.d = double_tmp;
++	      next_arg.u += 2;
++	      double_tmp = (*p_argv.d)[1];
++	      *next_arg.d = double_tmp;
++	      next_arg.u += 2;
++	    }
++	  else
++	    {
++	      *fpr_base.d++ = double_tmp;
++	      double_tmp = (*p_argv.d)[1];
++	      *fpr_base.d++ = double_tmp;
++	    }
++
++	  fparg_count += 2;
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	  break;
++# endif
++	case FFI_TYPE_DOUBLE:
++	  double_tmp = **p_argv.d;
++
++	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
++	    {
++	      if (intarg_count >= NUM_GPR_ARG_REGISTERS
++		  && intarg_count % 2 != 0)
++		{
++		  intarg_count++;
++		  next_arg.u++;
++		}
++	      *next_arg.d = double_tmp;
++	      next_arg.u += 2;
++	    }
++	  else
++	    *fpr_base.d++ = double_tmp;
++	  fparg_count++;
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	  break;
++
++	case FFI_TYPE_FLOAT:
++	  double_tmp = **p_argv.f;
++	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
++	    {
++	      *next_arg.f = (float) double_tmp;
++	      next_arg.u += 1;
++	      intarg_count++;
++	    }
++	  else
++	    *fpr_base.d++ = double_tmp;
++	  fparg_count++;
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	  break;
++#endif /* have FPRs */
++
++	case FFI_TYPE_UINT128:
++	  /* The soft float ABI for long doubles works like this, a long double
++	     is passed in four consecutive GPRs if available.  A maximum of 2
++	     long doubles can be passed in gprs.  If we do not have 4 GPRs
++	     left, the long double is passed on the stack, 4-byte aligned.  */
++	  {
++	    unsigned int int_tmp;
++	    unsigned int ii;
++	    if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3)
++	      {
++		if (intarg_count < NUM_GPR_ARG_REGISTERS)
++		  intarg_count = NUM_GPR_ARG_REGISTERS;
++		for (ii = 0; ii < 4; ii++)
++		  {
++		    int_tmp = (*p_argv.ui)[ii];
++		    *next_arg.u++ = int_tmp;
++		  }
++	      }
++	    else
++	      {
++		for (ii = 0; ii < 4; ii++)
++		  {
++		    int_tmp = (*p_argv.ui)[ii];
++		    *gpr_base.u++ = int_tmp;
++		  }
++	      }
++	    intarg_count += 4;
++	    break;
++	  }
++
++	case FFI_TYPE_UINT64:
++	case FFI_TYPE_SINT64:
++	  if (intarg_count == NUM_GPR_ARG_REGISTERS-1)
++	    intarg_count++;
++	  if (intarg_count >= NUM_GPR_ARG_REGISTERS)
++	    {
++	      if (intarg_count % 2 != 0)
++		{
++		  intarg_count++;
++		  next_arg.u++;
++		}
++	      *next_arg.ll = **p_argv.ll;
++	      next_arg.u += 2;
++	    }
++	  else
++	    {
++	      /* The abi states only certain register pairs can be
++		 used for passing long long int specifically (r3,r4),
++		 (r5,r6), (r7,r8), (r9,r10).  If next arg is long long
++		 but not correct starting register of pair then skip
++		 until the proper starting register.  */
++	      if (intarg_count % 2 != 0)
++		{
++		  intarg_count ++;
++		  gpr_base.u++;
++		}
++	      *gpr_base.ll++ = **p_argv.ll;
++	    }
++	  intarg_count += 2;
++	  break;
++
++	case FFI_TYPE_STRUCT:
++	  struct_copy_size = ((*ptr)->size + 15) & ~0xF;
++	  copy_space.c -= struct_copy_size;
++	  memcpy (copy_space.c, *p_argv.c, (*ptr)->size);
++
++	  gprvalue = (unsigned long) copy_space.c;
++
++	  FFI_ASSERT (copy_space.c > next_arg.c);
++	  FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY);
++	  goto putgpr;
++
++	case FFI_TYPE_UINT8:
++	  gprvalue = **p_argv.uc;
++	  goto putgpr;
++	case FFI_TYPE_SINT8:
++	  gprvalue = **p_argv.sc;
++	  goto putgpr;
++	case FFI_TYPE_UINT16:
++	  gprvalue = **p_argv.us;
++	  goto putgpr;
++	case FFI_TYPE_SINT16:
++	  gprvalue = **p_argv.ss;
++	  goto putgpr;
++
++	case FFI_TYPE_INT:
++	case FFI_TYPE_UINT32:
++	case FFI_TYPE_SINT32:
++	case FFI_TYPE_POINTER:
++
++	  gprvalue = **p_argv.ui;
++
++	putgpr:
++	  if (intarg_count >= NUM_GPR_ARG_REGISTERS)
++	    *next_arg.u++ = gprvalue;
++	  else
++	    *gpr_base.u++ = gprvalue;
++	  intarg_count++;
++	  break;
++	}
++    }
++
++  /* Check that we didn't overrun the stack...  */
++  FFI_ASSERT (copy_space.c >= next_arg.c);
++  FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS);
++  /* The assert below is testing that the number of integer arguments agrees
++     with the number found in ffi_prep_cif_machdep().  However, intarg_count
++     is incremented whenever we place an FP arg on the stack, so account for
++     that before our assert test.  */
++#ifndef __NO_FPRS__
++  if (fparg_count > NUM_FPR_ARG_REGISTERS)
++    intarg_count -= fparg_count - NUM_FPR_ARG_REGISTERS;
++  FFI_ASSERT (fpr_base.u
++	      <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
++#endif
++  FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
++}
++
++#define MIN_CACHE_LINE_SIZE 8
++
++static void
++flush_icache (char *wraddr, char *xaddr, int size)
++{
++  int i;
++  for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
++    __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
++		      : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
++  __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
++		    : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
++		    : "memory");
++}
++
++ffi_status FFI_HIDDEN
++ffi_prep_closure_loc_sysv (ffi_closure *closure,
++			   ffi_cif *cif,
++			   void (*fun) (ffi_cif *, void *, void **, void *),
++			   void *user_data,
++			   void *codeloc)
++{
++  unsigned int *tramp;
++
++  if (cif->abi < FFI_SYSV || cif->abi >= FFI_LAST_ABI)
++    return FFI_BAD_ABI;
++
++  tramp = (unsigned int *) &closure->tramp[0];
++  tramp[0] = 0x7c0802a6;  /*   mflr    r0 */
++  tramp[1] = 0x4800000d;  /*   bl      10 <trampoline_initial+0x10> */
++  tramp[4] = 0x7d6802a6;  /*   mflr    r11 */
++  tramp[5] = 0x7c0803a6;  /*   mtlr    r0 */
++  tramp[6] = 0x800b0000;  /*   lwz     r0,0(r11) */
++  tramp[7] = 0x816b0004;  /*   lwz     r11,4(r11) */
++  tramp[8] = 0x7c0903a6;  /*   mtctr   r0 */
++  tramp[9] = 0x4e800420;  /*   bctr */
++  *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */
++  *(void **) &tramp[3] = codeloc;                   /* context */
++
++  /* Flush the icache.  */
++  flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
++
++  closure->cif = cif;
++  closure->fun = fun;
++  closure->user_data = user_data;
++
++  return FFI_OK;
++}
++
++/* Basically the trampoline invokes ffi_closure_SYSV, and on
++   entry, r11 holds the address of the closure.
++   After storing the registers that could possibly contain
++   parameters to be passed into the stack frame and setting
++   up space for a return value, ffi_closure_SYSV invokes the
++   following helper function to do most of the work.  */
++
++int
++ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
++			 unsigned long *pgr, ffi_dblfl *pfr,
++			 unsigned long *pst)
++{
++  /* rvalue is the pointer to space for return value in closure assembly */
++  /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
++  /* pfr is the pointer to where f1-f8 are stored in ffi_closure_SYSV  */
++  /* pst is the pointer to outgoing parameter stack in original caller */
++
++  void **          avalue;
++  ffi_type **      arg_types;
++  long             i, avn;
++#ifndef __NO_FPRS__
++  long             nf = 0;   /* number of floating registers already used */
++#endif
++  long             ng = 0;   /* number of general registers already used */
++
++  ffi_cif *cif = closure->cif;
++  unsigned       size     = cif->rtype->size;
++  unsigned short rtypenum = cif->rtype->type;
++
++  avalue = alloca (cif->nargs * sizeof (void *));
++
++  /* First translate for softfloat/nonlinux */
++  rtypenum = translate_float (cif->abi, rtypenum);
++
++  /* Copy the caller's structure return value address so that the closure
++     returns the data directly to the caller.
++     For FFI_SYSV the result is passed in r3/r4 if the struct size is less
++     or equal 8 bytes.  */
++  if (rtypenum == FFI_TYPE_STRUCT
++      && !((cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8))
++    {
++      rvalue = (void *) *pgr;
++      ng++;
++      pgr++;
++    }
++
++  i = 0;
++  avn = cif->nargs;
++  arg_types = cif->arg_types;
++
++  /* Grab the addresses of the arguments from the stack frame.  */
++  while (i < avn) {
++    unsigned short typenum = arg_types[i]->type;
++
++    /* We may need to handle some values depending on ABI.  */
++    typenum = translate_float (cif->abi, typenum);
++
++    switch (typenum)
++      {
++#ifndef __NO_FPRS__
++      case FFI_TYPE_FLOAT:
++	/* Unfortunately float values are stored as doubles
++	   in the ffi_closure_SYSV code (since we don't check
++	   the type in that routine).  */
++	if (nf < NUM_FPR_ARG_REGISTERS)
++	  {
++	    /* FIXME? here we are really changing the values
++	       stored in the original calling routines outgoing
++	       parameter stack.  This is probably a really
++	       naughty thing to do but...  */
++	    double temp = pfr->d;
++	    pfr->f = (float) temp;
++	    avalue[i] = pfr;
++	    nf++;
++	    pfr++;
++	  }
++	else
++	  {
++	    avalue[i] = pst;
++	    pst += 1;
++	  }
++	break;
++
++      case FFI_TYPE_DOUBLE:
++	if (nf < NUM_FPR_ARG_REGISTERS)
++	  {
++	    avalue[i] = pfr;
++	    nf++;
++	    pfr++;
++	  }
++	else
++	  {
++	    if (((long) pst) & 4)
++	      pst++;
++	    avalue[i] = pst;
++	    pst += 2;
++	  }
++	break;
++
++# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++      case FFI_TYPE_LONGDOUBLE:
++	if (nf < NUM_FPR_ARG_REGISTERS - 1)
++	  {
++	    avalue[i] = pfr;
++	    pfr += 2;
++	    nf += 2;
++	  }
++	else
++	  {
++	    if (((long) pst) & 4)
++	      pst++;
++	    avalue[i] = pst;
++	    pst += 4;
++	    nf = 8;
++	  }
++	break;
++# endif
++#endif
++
++      case FFI_TYPE_UINT128:
++	/* Test if for the whole long double, 4 gprs are available.
++	   otherwise the stuff ends up on the stack.  */
++	if (ng < NUM_GPR_ARG_REGISTERS - 3)
++	  {
++	    avalue[i] = pgr;
++	    pgr += 4;
++	    ng += 4;
++	  }
++	else
++	  {
++	    avalue[i] = pst;
++	    pst += 4;
++	    ng = 8+4;
++	  }
++	break;
++
++      case FFI_TYPE_SINT8:
++      case FFI_TYPE_UINT8:
++#ifndef __LITTLE_ENDIAN__
++	if (ng < NUM_GPR_ARG_REGISTERS)
++	  {
++	    avalue[i] = (char *) pgr + 3;
++	    ng++;
++	    pgr++;
++	  }
++	else
++	  {
++	    avalue[i] = (char *) pst + 3;
++	    pst++;
++	  }
++	break;
++#endif
++
++      case FFI_TYPE_SINT16:
++      case FFI_TYPE_UINT16:
++#ifndef __LITTLE_ENDIAN__
++	if (ng < NUM_GPR_ARG_REGISTERS)
++	  {
++	    avalue[i] = (char *) pgr + 2;
++	    ng++;
++	    pgr++;
++	  }
++	else
++	  {
++	    avalue[i] = (char *) pst + 2;
++	    pst++;
++	  }
++	break;
++#endif
++
++      case FFI_TYPE_SINT32:
++      case FFI_TYPE_UINT32:
++      case FFI_TYPE_POINTER:
++	if (ng < NUM_GPR_ARG_REGISTERS)
++	  {
++	    avalue[i] = pgr;
++	    ng++;
++	    pgr++;
++	  }
++	else
++	  {
++	    avalue[i] = pst;
++	    pst++;
++	  }
++	break;
++
++      case FFI_TYPE_STRUCT:
++	/* Structs are passed by reference. The address will appear in a
++	   gpr if it is one of the first 8 arguments.  */
++	if (ng < NUM_GPR_ARG_REGISTERS)
++	  {
++	    avalue[i] = (void *) *pgr;
++	    ng++;
++	    pgr++;
++	  }
++	else
++	  {
++	    avalue[i] = (void *) *pst;
++	    pst++;
++	  }
++	break;
++
++      case FFI_TYPE_SINT64:
++      case FFI_TYPE_UINT64:
++	/* Passing long long ints are complex, they must
++	   be passed in suitable register pairs such as
++	   (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
++	   and if the entire pair aren't available then the outgoing
++	   parameter stack is used for both but an alignment of 8
++	   must will be kept.  So we must either look in pgr
++	   or pst to find the correct address for this type
++	   of parameter.  */
++	if (ng < NUM_GPR_ARG_REGISTERS - 1)
++	  {
++	    if (ng & 1)
++	      {
++		/* skip r4, r6, r8 as starting points */
++		ng++;
++		pgr++;
++	      }
++	    avalue[i] = pgr;
++	    ng += 2;
++	    pgr += 2;
++	  }
++	else
++	  {
++	    if (((long) pst) & 4)
++	      pst++;
++	    avalue[i] = pst;
++	    pst += 2;
++	    ng = NUM_GPR_ARG_REGISTERS;
++	  }
++	break;
++
++      default:
++	FFI_ASSERT (0);
++      }
++
++    i++;
++  }
++
++  (closure->fun) (cif, rvalue, avalue, closure->user_data);
++
++  /* Tell ffi_closure_SYSV how to perform return type promotions.
++     Because the FFI_SYSV ABI returns the structures <= 8 bytes in
++     r3/r4 we have to tell ffi_closure_SYSV how to treat them.  We
++     combine the base type FFI_SYSV_TYPE_SMALL_STRUCT with the size of
++     the struct less one.  We never have a struct with size zero.
++     See the comment in ffitarget.h about ordering.  */
++  if (rtypenum == FFI_TYPE_STRUCT
++      && (cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8)
++    return FFI_SYSV_TYPE_SMALL_STRUCT - 1 + size;
++  return rtypenum;
++}
++#endif
+diff --git a/js/src/ctypes/libffi/src/powerpc/ffitarget.h b/js/src/ctypes/libffi/src/powerpc/ffitarget.h
+--- a/js/src/ctypes/libffi/src/powerpc/ffitarget.h
++++ b/js/src/ctypes/libffi/src/powerpc/ffitarget.h
+@@ -35,72 +35,106 @@
+ #endif
+ 
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ #if defined (POWERPC) && defined (__powerpc64__)	/* linux64 */
+ #ifndef POWERPC64
+ #define POWERPC64
+ #endif
+-#elif defined (POWERPC_DARWIN) && defined (__ppc64__)	/* Darwin */
++#elif defined (POWERPC_DARWIN) && defined (__ppc64__)	/* Darwin64 */
+ #ifndef POWERPC64
+ #define POWERPC64
+ #endif
++#ifndef POWERPC_DARWIN64
++#define POWERPC_DARWIN64
++#endif
+ #elif defined (POWERPC_AIX) && defined (__64BIT__)	/* AIX64 */
+ #ifndef POWERPC64
+ #define POWERPC64
+ #endif
+ #endif
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+ 
+-#ifdef POWERPC
+-  FFI_SYSV,
+-  FFI_GCC_SYSV,
+-  FFI_LINUX64,
+-  FFI_LINUX,
+-  FFI_LINUX_SOFT_FLOAT,
+-# if defined(POWERPC64)
+-  FFI_DEFAULT_ABI = FFI_LINUX64,
+-# elif defined(__NO_FPRS__)
+-  FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT,
+-# elif (__LDBL_MANT_DIG__ == 106)
+-  FFI_DEFAULT_ABI = FFI_LINUX,
++#if defined (POWERPC_AIX)
++  FFI_AIX,
++  FFI_DARWIN,
++  FFI_DEFAULT_ABI = FFI_AIX,
++  FFI_LAST_ABI
++
++#elif defined (POWERPC_DARWIN)
++  FFI_AIX,
++  FFI_DARWIN,
++  FFI_DEFAULT_ABI = FFI_DARWIN,
++  FFI_LAST_ABI
++
++#else
++  /* The FFI_COMPAT values are used by old code.  Since libffi may be
++     a shared library we have to support old values for backwards
++     compatibility.  */
++  FFI_COMPAT_SYSV,
++  FFI_COMPAT_GCC_SYSV,
++  FFI_COMPAT_LINUX64,
++  FFI_COMPAT_LINUX,
++  FFI_COMPAT_LINUX_SOFT_FLOAT,
++
++# if defined (POWERPC64)
++  /* This bit, always set in new code, must not be set in any of the
++     old FFI_COMPAT values that might be used for 64-bit linux.  We
++     only need worry about FFI_COMPAT_LINUX64, but to be safe avoid
++     all old values.  */
++  FFI_LINUX = 8,
++  /* This and following bits can reuse FFI_COMPAT values.  */
++  FFI_LINUX_STRUCT_ALIGN = 1,
++  FFI_LINUX_LONG_DOUBLE_128 = 2,
++  FFI_DEFAULT_ABI = (FFI_LINUX
++#  ifdef __STRUCT_PARM_ALIGN__
++		     | FFI_LINUX_STRUCT_ALIGN
++#  endif
++#  ifdef __LONG_DOUBLE_128__
++		     | FFI_LINUX_LONG_DOUBLE_128
++#  endif
++		     ),
++  FFI_LAST_ABI = 12
++
+ # else
+-  FFI_DEFAULT_ABI = FFI_GCC_SYSV,
++  /* This bit, always set in new code, must not be set in any of the
++     old FFI_COMPAT values that might be used for 32-bit linux/sysv/bsd.  */
++  FFI_SYSV = 8,
++  /* This and following bits can reuse FFI_COMPAT values.  */
++  FFI_SYSV_SOFT_FLOAT = 1,
++  FFI_SYSV_STRUCT_RET = 2,
++  FFI_SYSV_IBM_LONG_DOUBLE = 4,
++  FFI_SYSV_LONG_DOUBLE_128 = 16,
++
++  FFI_DEFAULT_ABI = (FFI_SYSV
++#  ifdef __NO_FPRS__
++		     | FFI_SYSV_SOFT_FLOAT
++#  endif
++#  if (defined (__SVR4_STRUCT_RETURN)					\
++       || defined (POWERPC_FREEBSD) && !defined (__AIX_STRUCT_RETURN))
++		     | FFI_SYSV_STRUCT_RET
++#  endif
++#  if __LDBL_MANT_DIG__ == 106
++		     | FFI_SYSV_IBM_LONG_DOUBLE
++#  endif
++#  ifdef __LONG_DOUBLE_128__
++		     | FFI_SYSV_LONG_DOUBLE_128
++#  endif
++		     ),
++  FFI_LAST_ABI = 32
+ # endif
+ #endif
+ 
+-#ifdef POWERPC_AIX
+-  FFI_AIX,
+-  FFI_DARWIN,
+-  FFI_DEFAULT_ABI = FFI_AIX,
+-#endif
+-
+-#ifdef POWERPC_DARWIN
+-  FFI_AIX,
+-  FFI_DARWIN,
+-  FFI_DEFAULT_ABI = FFI_DARWIN,
+-#endif
+-
+-#ifdef POWERPC_FREEBSD
+-  FFI_SYSV,
+-  FFI_GCC_SYSV,
+-  FFI_LINUX64,
+-  FFI_LINUX,
+-  FFI_LINUX_SOFT_FLOAT,
+-  FFI_DEFAULT_ABI = FFI_SYSV,
+-#endif
+-
+-  FFI_LAST_ABI
+ } ffi_abi;
+ #endif
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #define FFI_CLOSURES 1
+ #define FFI_NATIVE_RAW_API 0
+ #if defined (POWERPC) || defined (POWERPC_FREEBSD)
+@@ -109,31 +143,33 @@ typedef enum ffi_abi {
+ #endif
+ 
+ /* For additional types like the below, take care about the order in
+    ppc_closures.S. They must follow after the FFI_TYPE_LAST.  */
+ 
+ /* Needed for soft-float long-double-128 support.  */
+ #define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1)
+ 
+-/* Needed for FFI_SYSV small structure returns.
+-   We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are
+-   defined in ffi.c, to determine the exact return type and its size.  */
++/* Needed for FFI_SYSV small structure returns.  */
+ #define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2)
+ 
+ /* Used by ELFv2 for homogenous structure returns.  */
+ #define FFI_V2_TYPE_FLOAT_HOMOG		(FFI_TYPE_LAST + 1)
+ #define FFI_V2_TYPE_DOUBLE_HOMOG	(FFI_TYPE_LAST + 2)
+ #define FFI_V2_TYPE_SMALL_STRUCT	(FFI_TYPE_LAST + 3)
+ 
+ #if _CALL_ELF == 2
+ # define FFI_TRAMPOLINE_SIZE 32
+ #else
+ # if defined(POWERPC64) || defined(POWERPC_AIX)
+-#  define FFI_TRAMPOLINE_SIZE 24
++#  if defined(POWERPC_DARWIN64)
++#    define FFI_TRAMPOLINE_SIZE 48
++#  else
++#    define FFI_TRAMPOLINE_SIZE 24
++#  endif
+ # else /* POWERPC || POWERPC_AIX */
+ #  define FFI_TRAMPOLINE_SIZE 40
+ # endif
+ #endif
+ 
+ #ifndef LIBFFI_ASM
+ #if defined(POWERPC_DARWIN) || defined(POWERPC_AIX)
+ struct ffi_aix_trampoline_struct {
+diff --git a/js/src/ctypes/libffi/src/powerpc/linux64.S b/js/src/ctypes/libffi/src/powerpc/linux64.S
+--- a/js/src/ctypes/libffi/src/powerpc/linux64.S
++++ b/js/src/ctypes/libffi/src/powerpc/linux64.S
+@@ -24,17 +24,17 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ 
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+ 
+-#ifdef __powerpc64__
++#ifdef POWERPC64
+ 	.hidden	ffi_call_LINUX64
+ 	.globl	ffi_call_LINUX64
+ # if _CALL_ELF == 2
+ 	.text
+ ffi_call_LINUX64:
+ 	addis	%r2, %r12, .TOC.-ffi_call_LINUX64@ha
+ 	addi	%r2, %r2, .TOC.-ffi_call_LINUX64@l
+ 	.localentry ffi_call_LINUX64, . - ffi_call_LINUX64
+diff --git a/js/src/ctypes/libffi/src/powerpc/linux64_closure.S b/js/src/ctypes/libffi/src/powerpc/linux64_closure.S
+--- a/js/src/ctypes/libffi/src/powerpc/linux64_closure.S
++++ b/js/src/ctypes/libffi/src/powerpc/linux64_closure.S
+@@ -25,17 +25,17 @@
+    DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+ 
+ 	.file	"linux64_closure.S"
+ 
+-#ifdef __powerpc64__
++#ifdef POWERPC64
+ 	FFI_HIDDEN (ffi_closure_LINUX64)
+ 	.globl  ffi_closure_LINUX64
+ # if _CALL_ELF == 2
+ 	.text
+ ffi_closure_LINUX64:
+ 	addis	%r2, %r12, .TOC.-ffi_closure_LINUX64@ha
+ 	addi	%r2, %r2, .TOC.-ffi_closure_LINUX64@l
+ 	.localentry ffi_closure_LINUX64, . - ffi_closure_LINUX64
+@@ -95,16 +95,20 @@ ffi_closure_LINUX64:
+ 	std	%r7, 32(%r12)
+ 	std	%r8, 40(%r12)
+ 	std	%r9, 48(%r12)
+ 	std	%r10, 56(%r12)
+ 
+ 	# load up the pointer to the parm save area
+ 	mr	%r5, %r12
+ # else
++	# copy r2 to r11 and load TOC into r2
++	mr	%r11, %r2
++	ld	%r2, 16(%r11)
++
+ 	mflr	%r0
+ 	# Save general regs into parm save area
+ 	# This is the parameter save area set up by our caller.
+ 	std	%r3, PARMSAVE+0(%r1)
+ 	std	%r4, PARMSAVE+8(%r1)
+ 	std	%r5, PARMSAVE+16(%r1)
+ 	std	%r6, PARMSAVE+24(%r1)
+ 	std	%r7, PARMSAVE+32(%r1)
+diff --git a/js/src/ctypes/libffi/src/powerpc/ppc_closure.S b/js/src/ctypes/libffi/src/powerpc/ppc_closure.S
+--- a/js/src/ctypes/libffi/src/powerpc/ppc_closure.S
++++ b/js/src/ctypes/libffi/src/powerpc/ppc_closure.S
+@@ -26,17 +26,17 @@
+    ----------------------------------------------------------------------- */
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+ #include <powerpc/asm.h>
+ 
+ 	.file   "ppc_closure.S"
+ 
+-#ifndef __powerpc64__
++#ifndef POWERPC64
+ 
+ ENTRY(ffi_closure_SYSV)
+ .LFB1:
+ 	stwu %r1,-144(%r1)
+ .LCFI0:
+ 	mflr %r0
+ .LCFI1:
+ 	stw %r0,148(%r1)
+@@ -322,17 +322,17 @@ ENTRY(ffi_closure_SYSV)
+ 	blr
+ #endif
+ 
+ .Luint128:
+ 	lwz %r6,112+12(%r1)
+ 	mtlr %r0
+ 	addi %r1,%r1,144
+ 	blr
+-
++	
+ END(ffi_closure_SYSV)
+ 
+ 	.section	".eh_frame",EH_FRAME_FLAGS,@progbits
+ .Lframe1:
+ 	.4byte	.LECIE1-.LSCIE1	 # Length of Common Information Entry
+ .LSCIE1:
+ 	.4byte	0x0	 # CIE Identifier Tag
+ 	.byte	0x1	 # CIE Version
+@@ -373,13 +373,12 @@ END(ffi_closure_SYSV)
+ 	.byte	0x4	 # DW_CFA_advance_loc4
+ 	.4byte	.LCFI1-.LCFI0
+ 	.byte	0x11	 # DW_CFA_offset_extended_sf
+ 	.uleb128 0x41
+ 	.sleb128 -1
+ 	.align 2
+ .LEFDE1:
+ 
+-#endif
+-
+ #if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",@progbits
+ #endif
++#endif
+diff --git a/js/src/ctypes/libffi/src/powerpc/sysv.S b/js/src/ctypes/libffi/src/powerpc/sysv.S
+--- a/js/src/ctypes/libffi/src/powerpc/sysv.S
++++ b/js/src/ctypes/libffi/src/powerpc/sysv.S
+@@ -25,17 +25,17 @@
+    DEALINGS IN THE SOFTWARE.
+    ----------------------------------------------------------------------- */
+ 
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+ #include <powerpc/asm.h>
+ 
+-#ifndef __powerpc64__
++#ifndef POWERPC64
+ 	.globl ffi_prep_args_SYSV
+ ENTRY(ffi_call_SYSV)
+ .LFB1:
+ 	/* Save the old stack pointer as AP.  */
+ 	mr	%r8,%r1
+ 
+ .LCFI0:
+ 	/* Allocate the stack space we need.  */
+@@ -208,13 +208,13 @@ END(ffi_call_SYSV)
+       .byte     0x9c     /*  DW_CFA_offset, column 0x1c */
+       .uleb128  0x4
+       .byte     0x4      /*  DW_CFA_advance_loc4 */
+       .4byte    .LCFI6-.LCFI5
+       .byte     0xd      /*  DW_CFA_def_cfa_register */
+       .uleb128  0x1c
+       .align 2
+ .LEFDE1:
+-#endif
+ 
+ #if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",@progbits
+ #endif
++#endif
+diff --git a/js/src/ctypes/libffi/src/prep_cif.c b/js/src/ctypes/libffi/src/prep_cif.c
+--- a/js/src/ctypes/libffi/src/prep_cif.c
++++ b/js/src/ctypes/libffi/src/prep_cif.c
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   prep_cif.c - Copyright (c) 1996, 1998, 2007  Red Hat, Inc.
++   prep_cif.c - Copyright (c) 2011, 2012  Anthony Green
++                Copyright (c) 1996, 1998, 2007  Red Hat, Inc.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+@@ -32,27 +33,31 @@
+ 
+ /* Perform machine independent initialization of aggregate type
+    specifications. */
+ 
+ static ffi_status initialize_aggregate(ffi_type *arg)
+ {
+   ffi_type **ptr;
+ 
+-  FFI_ASSERT(arg != NULL);
++  if (UNLIKELY(arg == NULL || arg->elements == NULL))
++    return FFI_BAD_TYPEDEF;
+ 
+-  FFI_ASSERT(arg->elements != NULL);
+-  FFI_ASSERT(arg->size == 0);
+-  FFI_ASSERT(arg->alignment == 0);
++  arg->size = 0;
++  arg->alignment = 0;
+ 
+   ptr = &(arg->elements[0]);
+ 
++  if (UNLIKELY(ptr == 0))
++    return FFI_BAD_TYPEDEF;
++
+   while ((*ptr) != NULL)
+     {
+-      if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK))
++      if (UNLIKELY(((*ptr)->size == 0)
++		    && (initialize_aggregate((*ptr)) != FFI_OK)))
+ 	return FFI_BAD_TYPEDEF;
+ 
+       /* Perform a sanity check on the argument type */
+       FFI_ASSERT_VALID_TYPE(*ptr);
+ 
+       arg->size = ALIGN(arg->size, (*ptr)->alignment);
+       arg->size += (*ptr)->size;
+ 
+@@ -66,61 +71,95 @@ static ffi_status initialize_aggregate(f
+      structures that fit in one register on ABIs like the PowerPC64
+      Linux ABI that right justify small structs in a register.
+      It's also needed for nested structure layout, for example
+      struct A { long a; char b; }; struct B { struct A x; char y; };
+      should find y at an offset of 2*sizeof(long) and result in a
+      total size of 3*sizeof(long).  */
+   arg->size = ALIGN (arg->size, arg->alignment);
+ 
++  /* On some targets, the ABI defines that structures have an additional
++     alignment beyond the "natural" one based on their elements.  */
++#ifdef FFI_AGGREGATE_ALIGNMENT
++  if (FFI_AGGREGATE_ALIGNMENT > arg->alignment)
++    arg->alignment = FFI_AGGREGATE_ALIGNMENT;
++#endif
++
+   if (arg->size == 0)
+     return FFI_BAD_TYPEDEF;
+   else
+     return FFI_OK;
+ }
+ 
+ #ifndef __CRIS__
+ /* The CRIS ABI specifies structure elements to have byte
+    alignment only, so it completely overrides this functions,
+    which assumes "natural" alignment and padding.  */
+ 
+ /* Perform machine independent ffi_cif preparation, then call
+    machine dependent routine. */
+ 
+-ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs,
+-			ffi_type *rtype, ffi_type **atypes)
++/* For non variadic functions isvariadic should be 0 and
++   nfixedargs==ntotalargs.
++
++   For variadic calls, isvariadic should be 1 and nfixedargs
++   and ntotalargs set as appropriate. nfixedargs must always be >=1 */
++
++
++ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi,
++			     unsigned int isvariadic,
++                             unsigned int nfixedargs,
++                             unsigned int ntotalargs,
++			     ffi_type *rtype, ffi_type **atypes)
+ {
+   unsigned bytes = 0;
+   unsigned int i;
+   ffi_type **ptr;
+ 
+   FFI_ASSERT(cif != NULL);
+-  FFI_ASSERT(abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI);
++  FFI_ASSERT((!isvariadic) || (nfixedargs >= 1));
++  FFI_ASSERT(nfixedargs <= ntotalargs);
++
++  if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI))
++    return FFI_BAD_ABI;
+ 
+   cif->abi = abi;
+   cif->arg_types = atypes;
+-  cif->nargs = nargs;
++  cif->nargs = ntotalargs;
+   cif->rtype = rtype;
+ 
+   cif->flags = 0;
+ 
++#if HAVE_LONG_DOUBLE_VARIANT
++  ffi_prep_types (abi);
++#endif
++
+   /* Initialize the return type if necessary */
+   if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK))
+     return FFI_BAD_TYPEDEF;
+ 
+   /* Perform a sanity check on the return type */
+   FFI_ASSERT_VALID_TYPE(cif->rtype);
+ 
+   /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */
+ #if !defined M68K && !defined X86_ANY && !defined S390 && !defined PA
+   /* Make space for the return structure pointer */
+   if (cif->rtype->type == FFI_TYPE_STRUCT
+ #ifdef SPARC
+       && (cif->abi != FFI_V9 || cif->rtype->size > 32)
+ #endif
++#ifdef TILE
++      && (cif->rtype->size > 10 * FFI_SIZEOF_ARG)
++#endif
++#ifdef XTENSA
++      && (cif->rtype->size > 16)
++#endif
++#ifdef NIOS2
++      && (cif->rtype->size > 8)
++#endif
+      )
+     bytes = STACK_ARG_SIZE(sizeof(void*));
+ #endif
+ 
+   for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+     {
+ 
+       /* Initialize any uninitialized aggregate type definitions */
+@@ -138,30 +177,65 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ff
+ 	  || ((*ptr)->type == FFI_TYPE_LONGDOUBLE
+ 	      && cif->abi != FFI_V9))
+ 	bytes += sizeof(void*);
+       else
+ #endif
+ 	{
+ 	  /* Add any padding if necessary */
+ 	  if (((*ptr)->alignment - 1) & bytes)
+-	    bytes = ALIGN(bytes, (*ptr)->alignment);
++	    bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment);
++
++#ifdef TILE
++	  if (bytes < 10 * FFI_SIZEOF_ARG &&
++	      bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG)
++	    {
++	      /* An argument is never split between the 10 parameter
++		 registers and the stack.  */
++	      bytes = 10 * FFI_SIZEOF_ARG;
++	    }
++#endif
++#ifdef XTENSA
++	  if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4)
++	    bytes = 6*4;
++#endif
+ 
+ 	  bytes += STACK_ARG_SIZE((*ptr)->size);
+ 	}
+ #endif
+     }
+ 
+   cif->bytes = bytes;
+ 
+   /* Perform machine dependent cif processing */
++#ifdef FFI_TARGET_SPECIFIC_VARIADIC
++  if (isvariadic)
++	return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs);
++#endif
++
+   return ffi_prep_cif_machdep(cif);
+ }
+ #endif /* not __CRIS__ */
+ 
++ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs,
++			     ffi_type *rtype, ffi_type **atypes)
++{
++  return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes);
++}
++
++ffi_status ffi_prep_cif_var(ffi_cif *cif,
++                            ffi_abi abi,
++                            unsigned int nfixedargs,
++                            unsigned int ntotalargs,
++                            ffi_type *rtype,
++                            ffi_type **atypes)
++{
++  return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes);
++}
++
+ #if FFI_CLOSURES
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure* closure,
+ 		  ffi_cif* cif,
+ 		  void (*fun)(ffi_cif*,void*,void**,void*),
+ 		  void *user_data)
+ {
+diff --git a/js/src/ctypes/libffi/src/s390/ffi.c b/js/src/ctypes/libffi/src/s390/ffi.c
+--- a/js/src/ctypes/libffi/src/s390/ffi.c
++++ b/js/src/ctypes/libffi/src/s390/ffi.c
+@@ -745,17 +745,18 @@ ffi_closure_helper_SYSV (ffi_closure *cl
+  
+ ffi_status
+ ffi_prep_closure_loc (ffi_closure *closure,
+ 		      ffi_cif *cif,
+ 		      void (*fun) (ffi_cif *, void *, void **, void *),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+-  FFI_ASSERT (cif->abi == FFI_SYSV);
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
+ 
+ #ifndef __s390x__
+   *(short *)&closure->tramp [0] = 0x0d10;   /* basr %r1,0 */
+   *(short *)&closure->tramp [2] = 0x9801;   /* lm %r0,%r1,6(%r1) */
+   *(short *)&closure->tramp [4] = 0x1006;
+   *(short *)&closure->tramp [6] = 0x07f1;   /* br %r1 */
+   *(long  *)&closure->tramp [8] = (long)codeloc;
+   *(long  *)&closure->tramp[12] = (long)&ffi_closure_SYSV;
+diff --git a/js/src/ctypes/libffi/src/s390/ffitarget.h b/js/src/ctypes/libffi/src/s390/ffitarget.h
+--- a/js/src/ctypes/libffi/src/s390/ffitarget.h
++++ b/js/src/ctypes/libffi/src/s390/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for S390.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ #if defined (__s390x__)
+ #ifndef S390X
+ #define S390X
+ #endif
+ #endif
+ 
+ /* ---- System specific configurations ----------------------------------- */
+ 
+diff --git a/js/src/ctypes/libffi/src/sh/ffi.c b/js/src/ctypes/libffi/src/sh/ffi.c
+--- a/js/src/ctypes/libffi/src/sh/ffi.c
++++ b/js/src/ctypes/libffi/src/sh/ffi.c
+@@ -1,10 +1,10 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Kaz Kojima
++   ffi.c - Copyright (c) 2002-2008, 2012 Kaz Kojima
+            Copyright (c) 2008 Red Hat, Inc.
+    
+    SuperH Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+@@ -36,17 +36,17 @@
+ #endif
+ 
+ #if defined(__HITACHI__)
+ #define STRUCT_VALUE_ADDRESS_WITH_ARG 1
+ #else
+ #define STRUCT_VALUE_ADDRESS_WITH_ARG 0
+ #endif
+ 
+-/* If the structure has essentialy an unique element, return its type.  */
++/* If the structure has essentially an unique element, return its type.  */
+ static int
+ simple_type (ffi_type *arg)
+ {
+   if (arg->type != FFI_TYPE_STRUCT)
+     return arg->type;
+   else if (arg->elements[1])
+     return FFI_TYPE_STRUCT;
+ 
+@@ -458,17 +458,18 @@ ffi_prep_closure_loc (ffi_closure* closu
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*, void*, void**, void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   unsigned int *tramp;
+   unsigned int insn;
+ 
+-  FFI_ASSERT (cif->abi == FFI_GCC_SYSV);
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
+ 
+   tramp = (unsigned int *) &closure->tramp[0];
+   /* Set T bit if the function returns a struct pointed with R2.  */
+   insn = (return_type (cif->rtype) == FFI_TYPE_STRUCT
+ 	  ? 0x0018 /* sett */
+ 	  : 0x0008 /* clrt */);
+ 
+ #ifdef __LITTLE_ENDIAN__
+diff --git a/js/src/ctypes/libffi/src/sh/ffitarget.h b/js/src/ctypes/libffi/src/sh/ffitarget.h
+--- a/js/src/ctypes/libffi/src/sh/ffitarget.h
++++ b/js/src/ctypes/libffi/src/sh/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012 Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for SuperH.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- Generic type definitions ----------------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+diff --git a/js/src/ctypes/libffi/src/sh64/ffi.c b/js/src/ctypes/libffi/src/sh64/ffi.c
+--- a/js/src/ctypes/libffi/src/sh64/ffi.c
++++ b/js/src/ctypes/libffi/src/sh64/ffi.c
+@@ -1,10 +1,10 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 2003, 2004, 2006, 2007 Kaz Kojima
++   ffi.c - Copyright (c) 2003, 2004, 2006, 2007, 2012 Kaz Kojima
+            Copyright (c) 2008 Anthony Green
+    
+    SuperH SHmedia Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+@@ -297,17 +297,18 @@ ffi_status
+ ffi_prep_closure_loc (ffi_closure *closure,
+ 		      ffi_cif *cif,
+ 		      void (*fun)(ffi_cif*, void*, void**, void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   unsigned int *tramp;
+ 
+-  FFI_ASSERT (cif->abi == FFI_GCC_SYSV);
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
+ 
+   tramp = (unsigned int *) &closure->tramp[0];
+   /* Since ffi_closure is an aligned object, the ffi trampoline is
+      called as an SHcompact code.  Sigh.
+      SHcompact part:
+      mova @(1,pc),r0; add #1,r0; jmp @r0; nop;
+      SHmedia part:
+      movi fnaddr >> 16,r1; shori fnaddr,r1; ptabs/l r1,tr0
+diff --git a/js/src/ctypes/libffi/src/sh64/ffitarget.h b/js/src/ctypes/libffi/src/sh64/ffitarget.h
+--- a/js/src/ctypes/libffi/src/sh64/ffitarget.h
++++ b/js/src/ctypes/libffi/src/sh64/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for SuperH - SHmedia.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- Generic type definitions ----------------------------------------- */
+ 
+ #ifndef LIBFFI_ASM
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+diff --git a/js/src/ctypes/libffi/src/sparc/ffi.c b/js/src/ctypes/libffi/src/sparc/ffi.c
+--- a/js/src/ctypes/libffi/src/sparc/ffi.c
++++ b/js/src/ctypes/libffi/src/sparc/ffi.c
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 1996, 2003, 2004, 2007, 2008 Red Hat, Inc.
++   ffi.c - Copyright (c) 2011, 2013 Anthony Green
++           Copyright (c) 1996, 2003-2004, 2007-2008 Red Hat, Inc.
+    
+    SPARC Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -370,16 +371,20 @@ int ffi_v9_layout_struct(ffi_type *arg, 
+ #ifdef SPARC64
+ extern int ffi_call_v9(void *, extended_cif *, unsigned, 
+ 		       unsigned, unsigned *, void (*fn)(void));
+ #else
+ extern int ffi_call_v8(void *, extended_cif *, unsigned, 
+ 		       unsigned, unsigned *, void (*fn)(void));
+ #endif
+ 
++#ifndef __GNUC__
++void ffi_flush_icache (void *, size_t);
++#endif
++
+ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+   void *rval = rvalue;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+ 
+@@ -401,18 +406,64 @@ void ffi_call(ffi_cif *cif, void (*fn)(v
+ 
+   switch (cif->abi) 
+     {
+     case FFI_V8:
+ #ifdef SPARC64
+       /* We don't yet support calling 32bit code from 64bit */
+       FFI_ASSERT(0);
+ #else
+-      ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, 
+-		  cif->flags, rvalue, fn);
++      if (rvalue && (cif->rtype->type == FFI_TYPE_STRUCT
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	  || cif->flags == FFI_TYPE_LONGDOUBLE
++#endif
++	  ))
++	{
++	  /* For v8, we need an "unimp" with size of returning struct */
++	  /* behind "call", so we alloc some executable space for it. */
++	  /* l7 is used, we need to make sure v8.S doesn't use %l7.   */
++	  unsigned int *call_struct = NULL;
++	  ffi_closure_alloc(32, (void **)&call_struct);
++	  if (call_struct)
++	    {
++	      unsigned long f = (unsigned long)fn;
++	      call_struct[0] = 0xae10001f;		 /* mov   %i7, %l7	 */
++	      call_struct[1] = 0xbe10000f;		 /* mov   %o7, %i7	 */
++	      call_struct[2] = 0x03000000 | f >> 10;     /* sethi %hi(fn), %g1	 */
++	      call_struct[3] = 0x9fc06000 | (f & 0x3ff); /* jmp %g1+%lo(fn), %o7 */
++	      call_struct[4] = 0x01000000;		 /* nop			 */
++	      if (cif->rtype->size < 0x7f)
++		call_struct[5] = cif->rtype->size;	 /* unimp		 */
++	      else
++		call_struct[5] = 0x01000000;	     	 /* nop			 */
++	      call_struct[6] = 0x81c7e008;		 /* ret			 */
++	      call_struct[7] = 0xbe100017;		 /* mov   %l7, %i7	 */
++#ifdef __GNUC__
++	      asm volatile ("iflush %0; iflush %0+8; iflush %0+16; iflush %0+24" : :
++			    "r" (call_struct) : "memory");
++	      /* SPARC v8 requires 5 instructions for flush to be visible */
++	      asm volatile ("nop; nop; nop; nop; nop");
++#else
++	      ffi_flush_icache (call_struct, 32);
++#endif
++	      ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes,
++			  cif->flags, rvalue, call_struct);
++	      ffi_closure_free(call_struct);
++	    }
++	  else
++	    {
++	      ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes,
++			  cif->flags, rvalue, fn);
++	    }
++	}
++      else
++	{
++	  ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes,
++		      cif->flags, rvalue, fn);
++	}
+ #endif
+       break;
+     case FFI_V9:
+ #ifdef SPARC64
+       ffi_call_v9(ffi_prep_args_v9, &ecif, cif->bytes,
+ 		  cif->flags, rval, fn);
+       if (rvalue && rval && cif->rtype->type == FFI_TYPE_STRUCT)
+ 	ffi_v9_layout_struct(cif->rtype, 0, (char *)rvalue, (char *)rval, ((char *)rval)+32);
+@@ -420,17 +471,16 @@ void ffi_call(ffi_cif *cif, void (*fn)(v
+       /* And vice versa */
+       FFI_ASSERT(0);
+ #endif
+       break;
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+-
+ }
+ 
+ 
+ #ifdef SPARC64
+ extern void ffi_closure_v9(void);
+ #else
+ extern void ffi_closure_v8(void);
+ #endif
+@@ -442,44 +492,50 @@ ffi_prep_closure_loc (ffi_closure* closu
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   unsigned int *tramp = (unsigned int *) &closure->tramp[0];
+   unsigned long fn;
+ #ifdef SPARC64
+   /* Trampoline address is equal to the closure address.  We take advantage
+      of that to reduce the trampoline size by 8 bytes. */
+-  FFI_ASSERT (cif->abi == FFI_V9);
++  if (cif->abi != FFI_V9)
++    return FFI_BAD_ABI;
+   fn = (unsigned long) ffi_closure_v9;
+   tramp[0] = 0x83414000;	/* rd	%pc, %g1	*/
+   tramp[1] = 0xca586010;	/* ldx	[%g1+16], %g5	*/
+   tramp[2] = 0x81c14000;	/* jmp	%g5		*/
+   tramp[3] = 0x01000000;	/* nop			*/
+   *((unsigned long *) &tramp[4]) = fn;
+ #else
+   unsigned long ctx = (unsigned long) codeloc;
+-  FFI_ASSERT (cif->abi == FFI_V8);
++  if (cif->abi != FFI_V8)
++    return FFI_BAD_ABI;
+   fn = (unsigned long) ffi_closure_v8;
+   tramp[0] = 0x03000000 | fn >> 10;	/* sethi %hi(fn), %g1	*/
+   tramp[1] = 0x05000000 | ctx >> 10;	/* sethi %hi(ctx), %g2	*/
+   tramp[2] = 0x81c06000 | (fn & 0x3ff);	/* jmp   %g1+%lo(fn)	*/
+   tramp[3] = 0x8410a000 | (ctx & 0x3ff);/* or    %g2, %lo(ctx)	*/
+ #endif
+ 
+   closure->cif = cif;
+   closure->fun = fun;
+   closure->user_data = user_data;
+ 
+-  /* Flush the Icache.  FIXME: alignment isn't certain, assume 8 bytes */
++  /* Flush the Icache.  closure is 8 bytes aligned.  */
++#ifdef __GNUC__
+ #ifdef SPARC64
+-  asm volatile ("flush	%0" : : "r" (closure) : "memory");
+-  asm volatile ("flush	%0" : : "r" (((char *) closure) + 8) : "memory");
++  asm volatile ("flush	%0; flush %0+8" : : "r" (closure) : "memory");
+ #else
+-  asm volatile ("iflush	%0" : : "r" (closure) : "memory");
+-  asm volatile ("iflush	%0" : : "r" (((char *) closure) + 8) : "memory");
++  asm volatile ("iflush	%0; iflush %0+8" : : "r" (closure) : "memory");
++  /* SPARC v8 requires 5 instructions for flush to be visible */
++  asm volatile ("nop; nop; nop; nop; nop");
++#endif
++#else
++  ffi_flush_icache (closure, 16);
+ #endif
+ 
+   return FFI_OK;
+ }
+ 
+ int
+ ffi_closure_sparc_inner_v8(ffi_closure *closure,
+   void *rvalue, unsigned long *gpr, unsigned long *scratch)
+diff --git a/js/src/ctypes/libffi/src/sparc/ffitarget.h b/js/src/ctypes/libffi/src/sparc/ffitarget.h
+--- a/js/src/ctypes/libffi/src/sparc/ffitarget.h
++++ b/js/src/ctypes/libffi/src/sparc/ffitarget.h
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003  Red Hat, Inc.
+    Target configuration macros for SPARC.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+@@ -22,16 +23,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ #if defined(__arch64__) || defined(__sparcv9)
+ #ifndef SPARC64
+ #define SPARC64
+ #endif
+ #endif
+ 
+diff --git a/js/src/ctypes/libffi/src/sparc/v8.S b/js/src/ctypes/libffi/src/sparc/v8.S
+--- a/js/src/ctypes/libffi/src/sparc/v8.S
++++ b/js/src/ctypes/libffi/src/sparc/v8.S
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   v8.S - Copyright (c) 1996, 1997, 2003, 2004, 2008 Red Hat, Inc.
++   v8.S - Copyright (c) 2013  The Written Word, Inc.
++	  Copyright (c) 1996, 1997, 2003, 2004, 2008  Red Hat, Inc.
+    
+    SPARC Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -26,21 +27,49 @@
+ 
+ #define LIBFFI_ASM	
+ #include <fficonfig.h>
+ #include <ffi.h>
+ 
+ #define STACKFRAME 96		/* Minimum stack framesize for SPARC */
+ #define ARGS (64+4)		/* Offset of register area in frame */
+ 
+-.text
++#ifndef __GNUC__	
++	.text
++        .align 8
++.globl ffi_flush_icache
++.globl _ffi_flush_icache
++
++ffi_flush_icache:
++_ffi_flush_icache:	
++        add %o0, %o1, %o2
++#ifdef SPARC64	
++1:	flush %o0
++#else	
++1:	iflush %o0
++#endif
++	add %o0, 8, %o0
++	cmp %o0, %o2
++	blt 1b
++	nop
++	nop
++	nop
++	nop
++	nop
++	retl
++	nop
++.ffi_flush_icache_end:
++	.size	ffi_flush_icache,.ffi_flush_icache_end-ffi_flush_icache
++#endif
++
++	.text
+         .align 8
+ .globl ffi_call_v8
+ .globl _ffi_call_v8
+-
++	
+ ffi_call_v8:
+ _ffi_call_v8:
+ .LLFB1:
+ 	save	%sp, -STACKFRAME, %sp
+ .LLCFI0:
+ 	
+ 	sub	%sp, %i2, %sp	! alloca() space in stack for frame to set up
+ 	add	%sp, STACKFRAME, %l0	! %l0 has start of 
+@@ -208,16 +237,20 @@ ffi_closure_v8:
+ 
+ 	cmp	%o0, FFI_TYPE_STRUCT
+ 	be	done2
+ 
+ 	cmp	%o0, FFI_TYPE_SINT64
+ 	be,a	done1
+ 	 ldd	[%fp-8], %i0
+ 
++	cmp	%o0, FFI_TYPE_UINT64
++	be,a	done1
++	 ldd	[%fp-8], %i0
++
+ 	ld	[%fp-8], %i0
+ done1:
+ 	jmp	%i7+8
+ 	 restore
+ done2:
+ 	! Skip 'unimp'.
+ 	jmp	%i7+12
+ 	 restore
+diff --git a/js/src/ctypes/libffi/src/sparc/v9.S b/js/src/ctypes/libffi/src/sparc/v9.S
+--- a/js/src/ctypes/libffi/src/sparc/v9.S
++++ b/js/src/ctypes/libffi/src/sparc/v9.S
+@@ -27,17 +27,17 @@
+ #define LIBFFI_ASM	
+ #include <fficonfig.h>
+ #include <ffi.h>
+ 
+ #ifdef SPARC64
+ /* Only compile this in for 64bit builds, because otherwise the object file
+    will have inproper architecture due to used instructions.  */
+ 
+-#define STACKFRAME 128		/* Minimum stack framesize for SPARC */
++#define STACKFRAME 176		/* Minimum stack framesize for SPARC 64-bit */
+ #define STACK_BIAS 2047
+ #define ARGS (128)		/* Offset of register area in frame */
+ 
+ .text
+         .align 8
+ .globl ffi_call_v9
+ .globl _ffi_call_v9
+ 
+diff --git a/js/src/ctypes/libffi/src/tile/ffi.c b/js/src/ctypes/libffi/src/tile/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/tile/ffi.c
+@@ -0,0 +1,355 @@
++/* -----------------------------------------------------------------------
++   ffi.c - Copyright (c) 2012 Tilera Corp.
++
++   TILE Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#include <ffi.h>
++#include <ffi_common.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <unistd.h>
++#include <arch/abi.h>
++#include <arch/icache.h>
++#include <arch/opcode.h>
++
++
++/* The first 10 registers are used to pass arguments and return values. */
++#define NUM_ARG_REGS 10
++
++/* Performs a raw function call with the given NUM_ARG_REGS register arguments
++   and the specified additional stack arguments (if any). */
++extern void ffi_call_tile(ffi_sarg reg_args[NUM_ARG_REGS],
++                          const ffi_sarg *stack_args,
++                          size_t stack_args_bytes,
++                          void (*fnaddr)(void))
++  FFI_HIDDEN;
++
++/* This handles the raw call from the closure stub, cleaning up the
++   parameters and delegating to ffi_closure_tile_inner. */
++extern void ffi_closure_tile(void) FFI_HIDDEN;
++
++
++ffi_status
++ffi_prep_cif_machdep(ffi_cif *cif)
++{
++  /* We always allocate room for all registers. Even if we don't
++     use them as parameters, they get returned in the same array
++     as struct return values so we need to make room. */
++  if (cif->bytes < NUM_ARG_REGS * FFI_SIZEOF_ARG)
++    cif->bytes = NUM_ARG_REGS * FFI_SIZEOF_ARG;
++
++  if (cif->rtype->size > NUM_ARG_REGS * FFI_SIZEOF_ARG)
++    cif->flags = FFI_TYPE_STRUCT;
++  else
++    cif->flags = FFI_TYPE_INT;
++
++  /* Nothing to do. */
++  return FFI_OK;
++}
++
++
++static long
++assign_to_ffi_arg(ffi_sarg *out, void *in, const ffi_type *type,
++                  int write_to_reg)
++{
++  switch (type->type)
++    {
++    case FFI_TYPE_SINT8:
++      *out = *(SINT8 *)in;
++      return 1;
++
++    case FFI_TYPE_UINT8:
++      *out = *(UINT8 *)in;
++      return 1;
++
++    case FFI_TYPE_SINT16:
++      *out = *(SINT16 *)in;
++      return 1;
++
++    case FFI_TYPE_UINT16:
++      *out = *(UINT16 *)in;
++      return 1;
++
++    case FFI_TYPE_SINT32:
++    case FFI_TYPE_UINT32:
++#ifndef __LP64__
++    case FFI_TYPE_POINTER:
++#endif
++      /* Note that even unsigned 32-bit quantities are sign extended
++         on tilegx when stored in a register.  */
++      *out = *(SINT32 *)in;
++      return 1;
++
++    case FFI_TYPE_FLOAT:
++#ifdef __tilegx__
++      if (write_to_reg)
++        {
++          /* Properly sign extend the value.  */
++          union { float f; SINT32 s32; } val;
++          val.f = *(float *)in;
++          *out = val.s32;
++        }
++      else
++#endif
++        {
++          *(float *)out = *(float *)in;
++        }
++      return 1;
++
++    case FFI_TYPE_SINT64:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_DOUBLE:
++#ifdef __LP64__
++    case FFI_TYPE_POINTER:
++#endif
++      *(UINT64 *)out = *(UINT64 *)in;
++      return sizeof(UINT64) / FFI_SIZEOF_ARG;
++
++    case FFI_TYPE_STRUCT:
++      memcpy(out, in, type->size);
++      return (type->size + FFI_SIZEOF_ARG - 1) / FFI_SIZEOF_ARG;
++
++    case FFI_TYPE_VOID:
++      /* Must be a return type. Nothing to do. */
++      return 0;
++
++    default:
++      FFI_ASSERT(0);
++      return -1;
++    }
++}
++
++
++void
++ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
++{
++  ffi_sarg * const arg_mem = alloca(cif->bytes);
++  ffi_sarg * const reg_args = arg_mem;
++  ffi_sarg * const stack_args = &reg_args[NUM_ARG_REGS];
++  ffi_sarg *argp = arg_mem;
++  ffi_type ** const arg_types = cif->arg_types;
++  const long num_args = cif->nargs;
++  long i;
++
++  if (cif->flags == FFI_TYPE_STRUCT)
++    {
++      /* Pass a hidden pointer to the return value. We make sure there
++         is scratch space for the callee to store the return value even if
++         our caller doesn't care about it. */
++      *argp++ = (intptr_t)(rvalue ? rvalue : alloca(cif->rtype->size));
++
++      /* No more work needed to return anything. */
++      rvalue = NULL;
++    }
++
++  for (i = 0; i < num_args; i++)
++    {
++      ffi_type *type = arg_types[i];
++      void * const arg_in = avalue[i];
++      ptrdiff_t arg_word = argp - arg_mem;
++
++#ifndef __tilegx__
++      /* Doubleword-aligned values are always in an even-number register
++         pair, or doubleword-aligned stack slot if out of registers. */
++      long align = arg_word & (type->alignment > FFI_SIZEOF_ARG);
++      argp += align;
++      arg_word += align;
++#endif
++
++      if (type->type == FFI_TYPE_STRUCT)
++        {
++          const size_t arg_size_in_words =
++            (type->size + FFI_SIZEOF_ARG - 1) / FFI_SIZEOF_ARG;
++
++          if (arg_word < NUM_ARG_REGS &&
++              arg_word + arg_size_in_words > NUM_ARG_REGS)
++            {
++              /* Args are not allowed to span registers and the stack. */
++              argp = stack_args;
++            }
++
++          memcpy(argp, arg_in, type->size);
++          argp += arg_size_in_words;
++        }
++      else
++        {
++          argp += assign_to_ffi_arg(argp, arg_in, arg_types[i], 1);
++        }
++    }
++
++  /* Actually do the call. */
++  ffi_call_tile(reg_args, stack_args,
++                cif->bytes - (NUM_ARG_REGS * FFI_SIZEOF_ARG), fn);
++
++  if (rvalue != NULL)
++    assign_to_ffi_arg(rvalue, reg_args, cif->rtype, 0);
++}
++
++
++/* Template code for closure. */
++extern const UINT64 ffi_template_tramp_tile[] FFI_HIDDEN;
++
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure *closure,
++                      ffi_cif *cif,
++                      void (*fun)(ffi_cif*, void*, void**, void*),
++                      void *user_data,
++                      void *codeloc)
++{
++#ifdef __tilegx__
++  /* TILE-Gx */
++  SINT64 c;
++  SINT64 h;
++  int s;
++  UINT64 *out;
++
++  if (cif->abi != FFI_UNIX)
++    return FFI_BAD_ABI;
++
++  out = (UINT64 *)closure->tramp;
++
++  c = (intptr_t)closure;
++  h = (intptr_t)ffi_closure_tile;
++  s = 0;
++
++  /* Find the smallest shift count that doesn't lose information
++     (i.e. no need to explicitly insert high bits of the address that
++     are just the sign extension of the low bits). */
++  while ((c >> s) != (SINT16)(c >> s) || (h >> s) != (SINT16)(h >> s))
++    s += 16;
++
++#define OPS(a, b, shift) \
++  (create_Imm16_X0((a) >> (shift)) | create_Imm16_X1((b) >> (shift)))
++
++  /* Emit the moveli. */
++  *out++ = ffi_template_tramp_tile[0] | OPS(c, h, s);
++  for (s -= 16; s >= 0; s -= 16)
++    *out++ = ffi_template_tramp_tile[1] | OPS(c, h, s);
++
++#undef OPS
++
++  *out++ = ffi_template_tramp_tile[2];
++
++#else
++  /* TILEPro */
++  UINT64 *out;
++  intptr_t delta;
++
++  if (cif->abi != FFI_UNIX)
++    return FFI_BAD_ABI;
++
++  out = (UINT64 *)closure->tramp;
++  delta = (intptr_t)ffi_closure_tile - (intptr_t)codeloc;
++
++  *out++ = ffi_template_tramp_tile[0] | create_JOffLong_X1(delta >> 3);
++#endif
++
++  closure->cif = cif;
++  closure->fun = fun;
++  closure->user_data = user_data;
++
++  invalidate_icache(closure->tramp, (char *)out - closure->tramp,
++                    getpagesize());
++
++  return FFI_OK;
++}
++
++
++/* This is called by the assembly wrapper for closures. This does
++   all of the work. On entry reg_args[0] holds the values the registers
++   had when the closure was invoked. On return reg_args[1] holds the register
++   values to be returned to the caller (many of which may be garbage). */
++void FFI_HIDDEN
++ffi_closure_tile_inner(ffi_closure *closure,
++                       ffi_sarg reg_args[2][NUM_ARG_REGS],
++                       ffi_sarg *stack_args)
++{
++  ffi_cif * const cif = closure->cif;
++  void ** const avalue = alloca(cif->nargs * sizeof(void *));
++  void *rvalue;
++  ffi_type ** const arg_types = cif->arg_types;
++  ffi_sarg * const reg_args_in = reg_args[0];
++  ffi_sarg * const reg_args_out = reg_args[1];
++  ffi_sarg * argp;
++  long i, arg_word, nargs = cif->nargs;
++  /* Use a union to guarantee proper alignment for double. */
++  union { ffi_sarg arg[NUM_ARG_REGS]; double d; UINT64 u64; } closure_ret;
++
++  /* Start out reading register arguments. */
++  argp = reg_args_in;
++
++  /* Copy the caller's structure return address to that the closure
++     returns the data directly to the caller.  */
++  if (cif->flags == FFI_TYPE_STRUCT)
++    {
++      /* Return by reference via hidden pointer. */
++      rvalue = (void *)(intptr_t)*argp++;
++      arg_word = 1;
++    }
++  else
++    {
++      /* Return the value in registers. */
++      rvalue = &closure_ret;
++      arg_word = 0;
++    }
++
++  /* Grab the addresses of the arguments. */
++  for (i = 0; i < nargs; i++)
++    {
++      ffi_type * const type = arg_types[i];
++      const size_t arg_size_in_words =
++        (type->size + FFI_SIZEOF_ARG - 1) / FFI_SIZEOF_ARG;
++
++#ifndef __tilegx__
++      /* Doubleword-aligned values are always in an even-number register
++         pair, or doubleword-aligned stack slot if out of registers. */
++      long align = arg_word & (type->alignment > FFI_SIZEOF_ARG);
++      argp += align;
++      arg_word += align;
++#endif
++
++      if (arg_word == NUM_ARG_REGS ||
++          (arg_word < NUM_ARG_REGS &&
++           arg_word + arg_size_in_words > NUM_ARG_REGS))
++        {
++          /* Switch to reading arguments from the stack. */
++          argp = stack_args;
++          arg_word = NUM_ARG_REGS;
++        }
++
++      avalue[i] = argp;
++      argp += arg_size_in_words;
++      arg_word += arg_size_in_words;
++    }
++
++  /* Invoke the closure.  */
++  closure->fun(cif, rvalue, avalue, closure->user_data);
++
++  if (cif->flags != FFI_TYPE_STRUCT)
++    {
++      /* Canonicalize for register representation. */
++      assign_to_ffi_arg(reg_args_out, &closure_ret, cif->rtype, 1);
++    }
++}
+diff --git a/js/src/ctypes/libffi/src/tile/ffitarget.h b/js/src/ctypes/libffi/src/tile/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/tile/ffitarget.h
+@@ -0,0 +1,65 @@
++/* -----------------------------------------------------------------*-C-*-
++   ffitarget.h - Copyright (c) 2012 Tilera Corp.
++   Target configuration macros for TILE.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++#ifndef LIBFFI_ASM
++
++#include <arch/abi.h>
++
++typedef uint_reg_t ffi_arg;
++typedef int_reg_t  ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_UNIX,
++  FFI_LAST_ABI,
++  FFI_DEFAULT_ABI = FFI_UNIX
++} ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++#define FFI_CLOSURES 1
++
++#ifdef __tilegx__
++/* We always pass 8-byte values, even in -m32 mode. */
++# define FFI_SIZEOF_ARG 8
++# ifdef __LP64__
++#  define FFI_TRAMPOLINE_SIZE (8 * 5)  /* 5 bundles */
++# else
++#  define FFI_TRAMPOLINE_SIZE (8 * 3)  /* 3 bundles */
++# endif
++#else
++# define FFI_SIZEOF_ARG 4
++# define FFI_TRAMPOLINE_SIZE 8 /* 1 bundle */
++#endif
++#define FFI_NATIVE_RAW_API 0
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/tile/tile.S b/js/src/ctypes/libffi/src/tile/tile.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/tile/tile.S
+@@ -0,0 +1,360 @@
++/* -----------------------------------------------------------------------
++   tile.S - Copyright (c) 2011 Tilera Corp.
++
++   Tilera TILEPro and TILE-Gx Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++/* Number of bytes in a register. */
++#define REG_SIZE FFI_SIZEOF_ARG
++
++/* Number of bytes in stack linkage area for backtracing.
++
++   A note about the ABI: on entry to a procedure, sp points to a stack
++   slot where it must spill the return address if it's not a leaf.
++   REG_SIZE bytes beyond that is a slot owned by the caller which
++   contains the sp value that the caller had when it was originally
++   entered (i.e. the caller's frame pointer). */
++#define LINKAGE_SIZE (2 * REG_SIZE)
++
++/* The first 10 registers are used to pass arguments and return values. */
++#define NUM_ARG_REGS 10
++
++#ifdef __tilegx__
++#define SW st
++#define LW ld
++#define BGZT bgtzt
++#else
++#define SW sw
++#define LW lw
++#define BGZT bgzt
++#endif
++
++
++/* void ffi_call_tile (int_reg_t reg_args[NUM_ARG_REGS],
++                       const int_reg_t *stack_args,
++                       unsigned long stack_args_bytes,
++                       void (*fnaddr)(void));
++
++        On entry, REG_ARGS contain the outgoing register values,
++        and STACK_ARGS contains STACK_ARG_BYTES of additional values
++        to be passed on the stack. If STACK_ARG_BYTES is zero, then
++        STACK_ARGS is ignored.
++
++        When the invoked function returns, the values of r0-r9 are
++        blindly stored back into REG_ARGS for the caller to examine. */
++
++        .section .text.ffi_call_tile, "ax", @progbits
++        .align  8
++        .globl  ffi_call_tile
++        FFI_HIDDEN(ffi_call_tile)
++ffi_call_tile:
++
++/* Incoming arguments. */
++#define REG_ARGS                r0
++#define INCOMING_STACK_ARGS     r1
++#define STACK_ARG_BYTES         r2
++#define ORIG_FNADDR             r3
++
++/* Temporary values. */
++#define FRAME_SIZE              r10
++#define TMP                     r11
++#define TMP2                    r12
++#define OUTGOING_STACK_ARGS     r13
++#define REG_ADDR_PTR            r14
++#define RETURN_REG_ADDR         r15
++#define FNADDR                  r16
++
++        .cfi_startproc
++        {
++         /* Save return address. */
++         SW     sp, lr
++         .cfi_offset lr, 0
++         /* Prepare to spill incoming r52. */
++         addi   TMP, sp, -REG_SIZE
++         /* Increase frame size to have room to spill r52 and REG_ARGS.
++            The +7 is to round up mod 8. */
++         addi   FRAME_SIZE, STACK_ARG_BYTES, \
++                REG_SIZE + REG_SIZE + LINKAGE_SIZE + 7
++        }
++        {
++         /* Round stack frame size to a multiple of 8 to satisfy ABI. */
++         andi   FRAME_SIZE, FRAME_SIZE, -8
++         /* Compute where to spill REG_ARGS value. */
++         addi   TMP2, sp, -(REG_SIZE * 2)
++        }
++        {
++         /* Spill incoming r52. */
++         SW     TMP, r52
++         .cfi_offset r52, -REG_SIZE
++         /* Set up our frame pointer. */
++         move   r52, sp
++         .cfi_def_cfa_register r52
++         /* Push stack frame. */
++         sub    sp, sp, FRAME_SIZE
++        }
++        {
++         /* Prepare to set up stack linkage. */
++         addi   TMP, sp, REG_SIZE
++         /* Prepare to memcpy stack args. */
++         addi   OUTGOING_STACK_ARGS, sp, LINKAGE_SIZE
++         /* Save REG_ARGS which we will need after we call the subroutine. */
++         SW     TMP2, REG_ARGS
++        }
++        {
++         /* Set up linkage info to hold incoming stack pointer. */
++         SW     TMP, r52
++        }
++        {
++         /* Skip stack args memcpy if we don't have any stack args (common). */
++         blezt  STACK_ARG_BYTES, .Ldone_stack_args_memcpy
++        }
++
++.Lmemcpy_stack_args:
++        {
++         /* Load incoming argument from stack_args. */
++         LW     TMP, INCOMING_STACK_ARGS
++         addi   INCOMING_STACK_ARGS, INCOMING_STACK_ARGS, REG_SIZE
++        }
++        {
++         /* Store stack argument into outgoing stack argument area. */
++         SW     OUTGOING_STACK_ARGS, TMP
++         addi   OUTGOING_STACK_ARGS, OUTGOING_STACK_ARGS, REG_SIZE
++         addi   STACK_ARG_BYTES, STACK_ARG_BYTES, -REG_SIZE
++        }
++        {
++         BGZT   STACK_ARG_BYTES, .Lmemcpy_stack_args
++        }
++.Ldone_stack_args_memcpy:
++
++        {
++         /* Copy aside ORIG_FNADDR so we can overwrite its register. */
++         move   FNADDR, ORIG_FNADDR
++         /* Prepare to load argument registers. */
++         addi   REG_ADDR_PTR, r0, REG_SIZE
++         /* Load outgoing r0. */
++         LW     r0, r0
++        }
++
++        /* Load up argument registers from the REG_ARGS array. */
++#define LOAD_REG(REG, PTR) \
++        { \
++         LW     REG, PTR ; \
++         addi   PTR, PTR, REG_SIZE \
++        }
++
++        LOAD_REG(r1, REG_ADDR_PTR)
++        LOAD_REG(r2, REG_ADDR_PTR)
++        LOAD_REG(r3, REG_ADDR_PTR)
++        LOAD_REG(r4, REG_ADDR_PTR)
++        LOAD_REG(r5, REG_ADDR_PTR)
++        LOAD_REG(r6, REG_ADDR_PTR)
++        LOAD_REG(r7, REG_ADDR_PTR)
++        LOAD_REG(r8, REG_ADDR_PTR)
++        LOAD_REG(r9, REG_ADDR_PTR)
++
++        {
++         /* Call the subroutine. */
++         jalr   FNADDR
++        }
++
++        {
++         /* Restore original lr. */
++         LW     lr, r52
++         /* Prepare to recover ARGS, which we spilled earlier. */
++         addi   TMP, r52, -(2 * REG_SIZE)
++        }
++        {
++         /* Restore ARGS, so we can fill it in with the return regs r0-r9. */
++         LW     RETURN_REG_ADDR, TMP
++         /* Prepare to restore original r52. */
++         addi   TMP, r52, -REG_SIZE
++        }
++
++        {
++         /* Pop stack frame. */
++         move   sp, r52
++         /* Restore original r52. */
++         LW     r52, TMP
++        }
++
++#define STORE_REG(REG, PTR) \
++        { \
++         SW     PTR, REG ; \
++         addi   PTR, PTR, REG_SIZE \
++        }
++
++        /* Return all register values by reference. */
++        STORE_REG(r0, RETURN_REG_ADDR)
++        STORE_REG(r1, RETURN_REG_ADDR)
++        STORE_REG(r2, RETURN_REG_ADDR)
++        STORE_REG(r3, RETURN_REG_ADDR)
++        STORE_REG(r4, RETURN_REG_ADDR)
++        STORE_REG(r5, RETURN_REG_ADDR)
++        STORE_REG(r6, RETURN_REG_ADDR)
++        STORE_REG(r7, RETURN_REG_ADDR)
++        STORE_REG(r8, RETURN_REG_ADDR)
++        STORE_REG(r9, RETURN_REG_ADDR)
++
++        {
++         jrp    lr
++        }
++
++        .cfi_endproc
++        .size ffi_call_tile, .-ffi_call_tile
++
++/* ffi_closure_tile(...)
++
++   On entry, lr points to the closure plus 8 bytes, and r10
++   contains the actual return address.
++
++   This function simply dumps all register parameters into a stack array
++   and passes the closure, the registers array, and the stack arguments
++   to C code that does all of the actual closure processing. */
++
++        .section .text.ffi_closure_tile, "ax", @progbits
++        .align  8
++        .globl  ffi_closure_tile
++        FFI_HIDDEN(ffi_closure_tile)
++
++        .cfi_startproc
++/* Room to spill all NUM_ARG_REGS incoming registers, plus frame linkage. */
++#define CLOSURE_FRAME_SIZE (((NUM_ARG_REGS * REG_SIZE * 2 + LINKAGE_SIZE) + 7) & -8)
++ffi_closure_tile:
++        {
++#ifdef __tilegx__
++         st     sp, lr
++         .cfi_offset lr, 0
++#else
++         /* Save return address (in r10 due to closure stub wrapper). */
++         SW     sp, r10
++         .cfi_return_column r10
++         .cfi_offset r10, 0
++#endif
++         /* Compute address for stack frame linkage. */
++         addli   r10, sp, -(CLOSURE_FRAME_SIZE - REG_SIZE)
++        }
++        {
++         /* Save incoming stack pointer in linkage area. */
++         SW     r10, sp
++         .cfi_offset sp, -(CLOSURE_FRAME_SIZE - REG_SIZE)
++         /* Push a new stack frame. */
++         addli   sp, sp, -CLOSURE_FRAME_SIZE
++         .cfi_adjust_cfa_offset CLOSURE_FRAME_SIZE
++        }
++
++        {
++         /* Create pointer to where to start spilling registers. */
++         addi   r10, sp, LINKAGE_SIZE
++        }
++
++        /* Spill all the incoming registers. */
++        STORE_REG(r0, r10)
++        STORE_REG(r1, r10)
++        STORE_REG(r2, r10)
++        STORE_REG(r3, r10)
++        STORE_REG(r4, r10)
++        STORE_REG(r5, r10)
++        STORE_REG(r6, r10)
++        STORE_REG(r7, r10)
++        STORE_REG(r8, r10)
++        {
++         /* Save r9. */
++         SW     r10, r9
++#ifdef __tilegx__
++         /* Pointer to closure is passed in r11. */
++         move  r0, r11
++#else
++         /* Compute pointer to the closure object. Because the closure
++            starts with a "jal ffi_closure_tile", we can just take the
++            value of lr (a phony return address pointing into the closure)
++            and subtract 8. */
++         addi   r0, lr, -8
++#endif
++         /* Compute a pointer to the register arguments we just spilled. */
++         addi   r1, sp, LINKAGE_SIZE
++        }
++        {
++         /* Compute a pointer to the extra stack arguments (if any). */
++         addli   r2, sp, CLOSURE_FRAME_SIZE + LINKAGE_SIZE
++         /* Call C code to deal with all of the grotty details. */
++         jal    ffi_closure_tile_inner
++        }
++        {
++         addli   r10, sp, CLOSURE_FRAME_SIZE
++        }
++        {
++         /* Restore the return address. */
++         LW     lr, r10
++         /* Compute pointer to registers array. */
++         addli   r10, sp, LINKAGE_SIZE + (NUM_ARG_REGS * REG_SIZE)
++        }
++        /* Return all the register values, which C code may have set. */
++        LOAD_REG(r0, r10)
++        LOAD_REG(r1, r10)
++        LOAD_REG(r2, r10)
++        LOAD_REG(r3, r10)
++        LOAD_REG(r4, r10)
++        LOAD_REG(r5, r10)
++        LOAD_REG(r6, r10)
++        LOAD_REG(r7, r10)
++        LOAD_REG(r8, r10)
++        LOAD_REG(r9, r10)
++        {
++         /* Pop the frame. */
++         addli   sp, sp, CLOSURE_FRAME_SIZE
++         jrp    lr
++        }
++
++        .cfi_endproc
++        .size   ffi_closure_tile, . - ffi_closure_tile
++
++
++/* What follows are code template instructions that get copied to the
++   closure trampoline by ffi_prep_closure_loc.  The zeroed operands
++   get replaced by their proper values at runtime. */
++
++        .section .text.ffi_template_tramp_tile, "ax", @progbits
++        .align  8
++        .globl  ffi_template_tramp_tile
++        FFI_HIDDEN(ffi_template_tramp_tile)
++ffi_template_tramp_tile:
++#ifdef __tilegx__
++        {
++          moveli r11, 0 /* backpatched to address of containing closure. */
++          moveli r10, 0 /* backpatched to ffi_closure_tile. */
++        }
++        /* Note: the following bundle gets generated multiple times
++           depending on the pointer value (esp. useful for -m32 mode). */
++        { shl16insli r11, r11, 0 ; shl16insli r10, r10, 0 }
++        { info 2+8 /* for backtracer: -> pc in lr, frame size 0 */ ; jr r10 }
++#else
++        /* 'jal .' yields a PC-relative offset of zero so we can OR in the
++           right offset at runtime. */
++        { move r10, lr ; jal . /* ffi_closure_tile */ }
++#endif
++
++        .size   ffi_template_tramp_tile, . - ffi_template_tramp_tile
+diff --git a/js/src/ctypes/libffi/src/types.c b/js/src/ctypes/libffi/src/types.c
+--- a/js/src/ctypes/libffi/src/types.c
++++ b/js/src/ctypes/libffi/src/types.c
+@@ -39,16 +39,27 @@ struct struct_align_##name {			\
+   type x;					\
+ };						\
+ const ffi_type ffi_type_##name = {		\
+   sizeof(type),					\
+   offsetof(struct struct_align_##name, x),	\
+   id, NULL					\
+ }
+ 
++#define FFI_NONCONST_TYPEDEF(name, type, id)	\
++struct struct_align_##name {			\
++  char c;					\
++  type x;					\
++};						\
++ffi_type ffi_type_##name = {			\
++  sizeof(type),					\
++  offsetof(struct struct_align_##name, x),	\
++  id, NULL					\
++}
++
+ /* Size and alignment are fake here. They must not be 0. */
+ const ffi_type ffi_type_void = {
+   1, 1, FFI_TYPE_VOID, NULL
+ };
+ 
+ FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8);
+ FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8);
+ FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16);
+@@ -68,10 +79,14 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOU
+    maintain binary compatibility, as -mlong-double-128 can be used
+    at any time.  */
+ /* Validate the hard-coded number below.  */
+ # if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4
+ #  error FFI_TYPE_LONGDOUBLE out of date
+ # endif
+ const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL };
+ #elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++# if HAVE_LONG_DOUBLE_VARIANT
++FFI_NONCONST_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
++# else
+ FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
++# endif
+ #endif
+diff --git a/js/src/ctypes/libffi/src/vax/elfbsd.S b/js/src/ctypes/libffi/src/vax/elfbsd.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/vax/elfbsd.S
+@@ -0,0 +1,195 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat.  <miod@openbsd.org>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ * 
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ * 
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * vax Foreign Function Interface
++ */
++
++#define LIBFFI_ASM	
++#include <fficonfig.h>
++#include <ffi.h>
++
++	.text
++
++/*
++ * void *					%r0
++ * ffi_call_elfbsd(extended_cif *ecif,		4(%ap)
++ *		   unsigned bytes,		8(%ap)
++ *		   unsigned flags,		12(%ap)
++ *		   void *rvalue,		16(%ap)
++ *		   void (*fn)());		20(%ap)
++ */
++	.globl	ffi_call_elfbsd
++	.type	ffi_call_elfbsd,@function
++	.align	2
++ffi_call_elfbsd:
++	.word	0x00c		# save R2 and R3
++
++	# Allocate stack space for the args
++	subl2	8(%ap), %sp
++
++	# Call ffi_prep_args
++	pushl	%sp
++	pushl	4(%ap)
++	calls	$2, ffi_prep_args
++
++	# Get function pointer
++	movl	20(%ap), %r1
++
++	# Build a CALLS frame
++	ashl	$-2, 8(%ap), %r0
++	pushl	%r0		# argument stack usage
++	movl	%sp, %r0	# future %ap
++	# saved registers
++	bbc	$11, 0(%r1), 1f
++	pushl	%r11
++1:	bbc	$10, 0(%r1), 1f
++	pushl	%r10
++1:	bbc	$9, 0(%r1), 1f
++	pushl	%r9
++1:	bbc	$8, 0(%r1), 1f
++	pushl	%r8
++1:	bbc	$7, 0(%r1), 1f
++	pushl	%r7
++1:	bbc	$6, 0(%r1), 1f
++	pushl	%r6
++1:	bbc	$5, 0(%r1), 1f
++	pushl	%r5
++1:	bbc	$4, 0(%r1), 1f
++	pushl	%r4
++1:	bbc	$3, 0(%r1), 1f
++	pushl	%r3
++1:	bbc	$2, 0(%r1), 1f
++	pushl	%r2
++1:	
++	pushal	9f
++	pushl	%fp
++	pushl	%ap
++	movl	16(%ap), %r3	# struct return address, if needed
++	movl	%r0, %ap
++	movzwl	4(%fp), %r0	# previous PSW, without the saved registers mask
++	bisl2	$0x20000000, %r0 # calls frame
++	movzwl	0(%r1), %r2
++	bicw2	$0xf003, %r2	# only keep R11-R2
++	ashl	$16, %r2, %r2
++	bisl2	%r2, %r0	# saved register mask of the called function
++	pushl	%r0	
++	pushl	$0
++	movl	%sp, %fp
++
++	# Invoke the function
++	pushal	2(%r1)		# skip procedure entry mask
++	movl	%r3, %r1
++	bicpsw	$0x000f
++	rsb
++
++9:
++	# Copy return value if necessary
++	tstl	16(%ap)
++	jeql	9f
++	movl	16(%ap), %r2
++
++	bbc	$0, 12(%ap), 1f	# CIF_FLAGS_CHAR
++	movb	%r0, 0(%r2)
++	brb	9f
++1:
++	bbc	$1, 12(%ap), 1f	# CIF_FLAGS_SHORT
++	movw	%r0, 0(%r2)
++	brb	9f
++1:
++	bbc	$2, 12(%ap), 1f	# CIF_FLAGS_INT
++	movl	%r0, 0(%r2)
++	brb	9f
++1:
++	bbc	$3, 12(%ap), 1f	# CIF_FLAGS_DINT
++	movq	%r0, 0(%r2)
++	brb	9f
++1:
++	movl	%r1, %r0	# might have been a struct
++	#brb	9f
++
++9:
++	ret
++
++/*
++ * ffi_closure_elfbsd(void);
++ * invoked with	%r0: ffi_closure *closure
++ */
++	.globl	ffi_closure_elfbsd
++	.type	ffi_closure_elfbsd, @function
++	.align	2
++ffi_closure_elfbsd:
++	.word	0
++
++	# Allocate room on stack for return value
++	subl2	$8, %sp
++
++	# Invoke the closure function
++	pushal	4(%ap)		# calling stack
++	pushal	4(%sp)		# return value
++	pushl	%r0		# closure
++	calls	$3, ffi_closure_elfbsd_inner
++
++	# Copy return value if necessary
++	bitb	$1, %r0		# CIF_FLAGS_CHAR
++	beql	1f
++	movb	0(%sp), %r0
++	brb	9f
++1:
++	bitb	$2, %r0		# CIF_FLAGS_SHORT
++	beql	1f
++	movw	0(%sp), %r0
++	brb	9f
++1:
++	bitb	$4, %r0		# CIF_FLAGS_INT
++	beql	1f
++	movl	0(%sp), %r0
++	brb	9f
++1:
++	bitb	$8, %r0		# CIF_FLAGS_DINT
++	beql	1f
++	movq	0(%sp), %r0
++	#brb	9f
++1:
++
++9:
++	ret
++
++/*
++ * ffi_closure_struct_elfbsd(void);
++ * invoked with	%r0: ffi_closure *closure
++ *		%r1: struct return address
++ */
++	.globl	ffi_closure_struct_elfbsd
++	.type	ffi_closure_struct_elfbsd, @function
++	.align	2
++ffi_closure_struct_elfbsd:
++	.word	0
++
++	# Invoke the closure function
++	pushal	4(%ap)		# calling stack
++	pushl	%r1		# return value
++	pushl	%r0		# closure
++	calls	$3, ffi_closure_elfbsd_inner
++
++	ret
+diff --git a/js/src/ctypes/libffi/src/vax/ffi.c b/js/src/ctypes/libffi/src/vax/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/vax/ffi.c
+@@ -0,0 +1,276 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat.  <miod@openbsd.org>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ * 
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ * 
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * vax Foreign Function Interface
++ *
++ * This file attempts to provide all the FFI entry points which can reliably
++ * be implemented in C.
++ */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++#include <unistd.h>
++
++#define CIF_FLAGS_CHAR		1	/* for struct only */
++#define CIF_FLAGS_SHORT		2	/* for struct only */
++#define CIF_FLAGS_INT		4
++#define CIF_FLAGS_DINT		8
++
++/*
++ * Foreign Function Interface API
++ */
++
++void ffi_call_elfbsd (extended_cif *, unsigned, unsigned, void *,
++		       void (*) ());
++void *ffi_prep_args (extended_cif *ecif, void *stack);
++
++void *
++ffi_prep_args (extended_cif *ecif, void *stack)
++{
++  unsigned int i;
++  void **p_argv;
++  char *argp;
++  ffi_type **p_arg;
++  void *struct_value_ptr;
++
++  argp = stack;
++
++  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
++      && !ecif->cif->flags)
++    struct_value_ptr = ecif->rvalue;
++  else
++    struct_value_ptr = NULL;
++
++  p_argv = ecif->avalue;
++
++  for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
++       i != 0;
++       i--, p_arg++)
++    {
++      size_t z;
++
++      z = (*p_arg)->size;
++      if (z < sizeof (int))
++	{
++	  switch ((*p_arg)->type)
++	    {
++	    case FFI_TYPE_SINT8:
++	      *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
++	      break;
++
++	    case FFI_TYPE_UINT8:
++	      *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv;
++	      break;
++
++	    case FFI_TYPE_SINT16:
++	      *(signed int *) argp = (signed int) *(SINT16 *) *p_argv;
++	      break;
++
++	    case FFI_TYPE_UINT16:
++	      *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv;
++	      break;
++
++	    case FFI_TYPE_STRUCT:
++	      memcpy (argp, *p_argv, z);
++	      break;
++
++	    default:
++	      FFI_ASSERT (0);
++	    }
++	  z = sizeof (int);
++	}
++      else
++	{
++	  memcpy (argp, *p_argv, z);
++
++	  /* Align if necessary.  */
++	  if ((sizeof(int) - 1) & z)
++	    z = ALIGN(z, sizeof(int));
++	}
++
++      p_argv++;
++      argp += z;
++    }
++
++  return struct_value_ptr;
++}
++
++ffi_status
++ffi_prep_cif_machdep (ffi_cif *cif)
++{
++  /* Set the return type flag */
++  switch (cif->rtype->type)
++    {
++    case FFI_TYPE_VOID:
++      cif->flags = 0;
++      break;
++
++    case FFI_TYPE_STRUCT:
++      if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT &&
++	  cif->rtype->elements[1])
++	{
++	  cif->flags = 0;
++	  break;
++	}
++
++      if (cif->rtype->size == sizeof (char))
++	cif->flags = CIF_FLAGS_CHAR;
++      else if (cif->rtype->size == sizeof (short))
++	cif->flags = CIF_FLAGS_SHORT;
++      else if (cif->rtype->size == sizeof (int))
++	cif->flags = CIF_FLAGS_INT;
++      else if (cif->rtype->size == 2 * sizeof (int))
++	cif->flags = CIF_FLAGS_DINT;
++      else
++	cif->flags = 0;
++      break;
++
++    default:
++      if (cif->rtype->size <= sizeof (int))
++	cif->flags = CIF_FLAGS_INT;
++      else
++	cif->flags = CIF_FLAGS_DINT;
++      break;
++    }
++
++  return FFI_OK;
++}
++
++void
++ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue)
++{
++  extended_cif ecif;
++
++  ecif.cif = cif;
++  ecif.avalue = avalue;
++
++  /* If the return value is a struct and we don't have a return value
++     address then we need to make one.  */
++
++  if (rvalue == NULL
++      && cif->rtype->type == FFI_TYPE_STRUCT
++      && cif->flags == 0)
++    ecif.rvalue = alloca (cif->rtype->size);
++  else
++    ecif.rvalue = rvalue;
++
++  switch (cif->abi)
++    {
++    case FFI_ELFBSD:
++      ffi_call_elfbsd (&ecif, cif->bytes, cif->flags, ecif.rvalue, fn);
++      break;
++
++    default:
++      FFI_ASSERT (0);
++      break;
++    }
++}
++
++/*
++ * Closure API
++ */
++
++void ffi_closure_elfbsd (void);
++void ffi_closure_struct_elfbsd (void);
++unsigned int ffi_closure_elfbsd_inner (ffi_closure *, void *, char *);
++
++static void
++ffi_prep_closure_elfbsd (ffi_cif *cif, void **avalue, char *stackp)
++{
++  unsigned int i;
++  void **p_argv;
++  ffi_type **p_arg;
++
++  p_argv = avalue;
++
++  for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
++    {
++      size_t z;
++
++      z = (*p_arg)->size;
++      *p_argv = stackp;
++
++      /* Align if necessary */
++      if ((sizeof (int) - 1) & z)
++	z = ALIGN(z, sizeof (int));
++
++      p_argv++;
++      stackp += z;
++    }
++}
++
++unsigned int
++ffi_closure_elfbsd_inner (ffi_closure *closure, void *resp, char *stack)
++{
++  ffi_cif *cif;
++  void **arg_area;
++
++  cif = closure->cif;
++  arg_area = (void **) alloca (cif->nargs * sizeof (void *));
++
++  ffi_prep_closure_elfbsd (cif, arg_area, stack);
++
++  (closure->fun) (cif, resp, arg_area, closure->user_data);
++
++  return cif->flags;
++}
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure *closure, ffi_cif *cif,
++		      void (*fun)(ffi_cif *, void *, void **, void *),
++		      void *user_data, void *codeloc)
++{
++  char *tramp = (char *) codeloc;
++  void *fn;
++
++  FFI_ASSERT (cif->abi == FFI_ELFBSD);
++
++  /* entry mask */
++  *(unsigned short *)(tramp + 0) = 0x0000;
++  /* movl #closure, r0 */
++  tramp[2] = 0xd0;
++  tramp[3] = 0x8f;
++  *(unsigned int *)(tramp + 4) = (unsigned int) closure;
++  tramp[8] = 0x50;
++
++  if (cif->rtype->type == FFI_TYPE_STRUCT
++      && !cif->flags)
++    fn = &ffi_closure_struct_elfbsd;
++  else
++    fn = &ffi_closure_elfbsd;
++
++  /* jmpl #fn */
++  tramp[9] = 0x17;
++  tramp[10] = 0xef;
++  *(unsigned int *)(tramp + 11) = (unsigned int)fn + 2 -
++				  (unsigned int)tramp - 9 - 6;
++
++  closure->cif = cif;
++  closure->user_data = user_data;
++  closure->fun = fun;
++
++  return FFI_OK;
++}
+diff --git a/js/src/ctypes/libffi/src/vax/ffitarget.h b/js/src/ctypes/libffi/src/vax/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/vax/ffitarget.h
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat.  <miod@openbsd.org>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ * 
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ * 
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * vax Foreign Function Interface
++ */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_ASM
++typedef unsigned long ffi_arg;
++typedef signed long ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_ELFBSD,
++  FFI_DEFAULT_ABI = FFI_ELFBSD,
++  FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
++} ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 15
++#define FFI_NATIVE_RAW_API 0
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/x86/ffi.c b/js/src/ctypes/libffi/src/x86/ffi.c
+--- a/js/src/ctypes/libffi/src/x86/ffi.c
++++ b/js/src/ctypes/libffi/src/x86/ffi.c
+@@ -1,14 +1,14 @@
+ /* -----------------------------------------------------------------------
+    ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008  Red Hat, Inc.
+            Copyright (c) 2002  Ranjit Mathew
+            Copyright (c) 2002  Bo Thorsen
+            Copyright (c) 2002  Roger Sayle
+-           Copyright (C) 2008  Free Software Foundation, Inc.
++           Copyright (C) 2008, 2010  Free Software Foundation, Inc.
+ 
+    x86 Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -34,36 +34,56 @@
+ #include <windows.h>
+ #endif
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+ 
+ #include <stdlib.h>
+ 
++
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments */
+ 
++void ffi_prep_args(char *stack, extended_cif *ecif);
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+ {
+   register unsigned int i;
+   register void **p_argv;
+   register char *argp;
+   register ffi_type **p_arg;
++#ifndef X86_WIN64
++  size_t p_stack_args[2];
++  void *p_stack_data[2];
++  char *argp2 = stack;
++  int stack_args_count = 0;
++  int cabi = ecif->cif->abi;
++#endif
+ 
+   argp = stack;
+ 
+-  if (ecif->cif->flags == FFI_TYPE_STRUCT
++  if ((ecif->cif->flags == FFI_TYPE_STRUCT
++       || ecif->cif->flags == FFI_TYPE_MS_STRUCT)
+ #ifdef X86_WIN64
+       && (ecif->cif->rtype->size != 1 && ecif->cif->rtype->size != 2
+           && ecif->cif->rtype->size != 4 && ecif->cif->rtype->size != 8)
+ #endif
+       )
+     {
+       *(void **) argp = ecif->rvalue;
++#ifndef X86_WIN64
++      /* For fastcall/thiscall this is first register-passed
++         argument.  */
++      if (cabi == FFI_THISCALL || cabi == FFI_FASTCALL)
++	{
++	  p_stack_args[stack_args_count] = sizeof (void*);
++	  p_stack_data[stack_args_count] = argp;
++	  ++stack_args_count;
++	}
++#endif
+       argp += sizeof(void*);
+     }
+ 
+   p_argv = ecif->avalue;
+ 
+   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+        i != 0;
+        i--, p_arg++)
+@@ -129,24 +149,80 @@ void ffi_prep_args(char *stack, extended
+             default:
+               FFI_ASSERT(0);
+             }
+         }
+       else
+         {
+           memcpy(argp, *p_argv, z);
+         }
++
++#ifndef X86_WIN64
++    /* For thiscall/fastcall convention register-passed arguments
++       are the first two none-floating-point arguments with a size
++       smaller or equal to sizeof (void*).  */
++    if ((cabi == FFI_THISCALL && stack_args_count < 1)
++        || (cabi == FFI_FASTCALL && stack_args_count < 2))
++      {
++	if (z <= 4
++	    && ((*p_arg)->type != FFI_TYPE_FLOAT
++	        && (*p_arg)->type != FFI_TYPE_STRUCT))
++	  {
++	    p_stack_args[stack_args_count] = z;
++	    p_stack_data[stack_args_count] = argp;
++	    ++stack_args_count;
++	  }
++      }
++#endif
+       p_argv++;
+ #ifdef X86_WIN64
+       argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
+ #else
+       argp += z;
+ #endif
+     }
+-  
++
++#ifndef X86_WIN64
++  /* We need to move the register-passed arguments for thiscall/fastcall
++     on top of stack, so that those can be moved to registers ecx/edx by
++     call-handler.  */
++  if (stack_args_count > 0)
++    {
++      size_t zz = (p_stack_args[0] + 3) & ~3;
++      char *h;
++
++      /* Move first argument to top-stack position.  */
++      if (p_stack_data[0] != argp2)
++	{
++	  h = alloca (zz + 1);
++	  memcpy (h, p_stack_data[0], zz);
++	  memmove (argp2 + zz, argp2,
++	           (size_t) ((char *) p_stack_data[0] - (char*)argp2));
++	  memcpy (argp2, h, zz);
++	}
++
++      argp2 += zz;
++      --stack_args_count;
++      if (zz > 4)
++	stack_args_count = 0;
++
++      /* If we have a second argument, then move it on top
++         after the first one.  */
++      if (stack_args_count > 0 && p_stack_data[1] != argp2)
++	{
++	  zz = p_stack_args[1];
++	  zz = (zz + 3) & ~3;
++	  h = alloca (zz + 1);
++	  h = alloca (zz + 1);
++	  memcpy (h, p_stack_data[1], zz);
++	  memmove (argp2 + zz, argp2, (size_t) ((char*) p_stack_data[1] - (char*)argp2));
++	  memcpy (argp2, h, zz);
++	}
++    }
++#endif
+   return;
+ }
+ 
+ /* Perform machine dependent cif processing */
+ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
+ {
+   unsigned int i;
+   ffi_type **ptr;
+@@ -201,17 +277,22 @@ ffi_status ffi_prep_cif_machdep(ffi_cif 
+         }
+       else if (cif->rtype->size == 8)
+         {
+           cif->flags = FFI_TYPE_SINT64; /* same as int64 type */
+         }
+       else
+ #endif
+         {
+-          cif->flags = FFI_TYPE_STRUCT;
++#ifdef X86_WIN32
++          if (cif->abi == FFI_MS_CDECL)
++            cif->flags = FFI_TYPE_MS_STRUCT;
++          else
++#endif
++            cif->flags = FFI_TYPE_STRUCT;
+           /* allocate space for return value pointer */
+           cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG);
+         }
+       break;
+ 
+     default:
+ #ifdef X86_WIN64
+       cif->flags = FFI_TYPE_SINT64;
+@@ -223,40 +304,42 @@ ffi_status ffi_prep_cif_machdep(ffi_cif 
+ #endif
+       break;
+     }
+ 
+   for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+     {
+       if (((*ptr)->alignment - 1) & cif->bytes)
+         cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment);
+-      cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG);
++      cif->bytes += (unsigned)ALIGN((*ptr)->size, FFI_SIZEOF_ARG);
+     }
+ 
+ #ifdef X86_WIN64
+   /* ensure space for storing four registers */
+   cif->bytes += 4 * sizeof(ffi_arg);
+ #endif
+ 
+-#ifdef X86_DARWIN
+-  cif->bytes = (cif->bytes + 15) & ~0xF;
++#ifndef X86_WIN32
++#ifndef X86_WIN64
++  if (cif->abi != FFI_STDCALL && cif->abi != FFI_THISCALL && cif->abi != FFI_FASTCALL)
++#endif
++    cif->bytes = (cif->bytes + 15) & ~0xF;
+ #endif
+ 
+   return FFI_OK;
+ }
+ 
+ #ifdef X86_WIN64
+ extern int
+ ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *,
+                unsigned, unsigned, unsigned *, void (*fn)(void));
+-#elif defined(X86_WIN32)
++#else
+ extern void
+ ffi_call_win32(void (*)(char *, extended_cif *), extended_cif *,
+-               unsigned, unsigned, unsigned *, void (*fn)(void));
+-#else
++               unsigned, unsigned, unsigned, unsigned *, void (*fn)(void));
+ extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
+                           unsigned, unsigned, unsigned *, void (*fn)(void));
+ #endif
+ 
+ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+@@ -271,68 +354,104 @@ void ffi_call(ffi_cif *cif, void (*fn)(v
+       && cif->flags == FFI_TYPE_STRUCT
+       && cif->rtype->size != 1 && cif->rtype->size != 2
+       && cif->rtype->size != 4 && cif->rtype->size != 8)
+     {
+       ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF);
+     }
+ #else
+   if (rvalue == NULL
+-      && cif->flags == FFI_TYPE_STRUCT)
++      && (cif->flags == FFI_TYPE_STRUCT
++          || cif->flags == FFI_TYPE_MS_STRUCT))
+     {
+       ecif.rvalue = alloca(cif->rtype->size);
+     }
+ #endif
+   else
+     ecif.rvalue = rvalue;
+     
+   
+   switch (cif->abi) 
+     {
+ #ifdef X86_WIN64
+     case FFI_WIN64:
+       ffi_call_win64(ffi_prep_args, &ecif, cif->bytes,
+                      cif->flags, ecif.rvalue, fn);
+       break;
+-#elif defined(X86_WIN32)
++#else
++#ifndef X86_WIN32
+     case FFI_SYSV:
+-    case FFI_STDCALL:
+-      ffi_call_win32(ffi_prep_args, &ecif, cif->bytes, cif->flags,
+-                     ecif.rvalue, fn);
++      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue,
++                    fn);
+       break;
+ #else
+     case FFI_SYSV:
+-      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue,
+-                    fn);
++    case FFI_MS_CDECL:
++#endif
++    case FFI_STDCALL:
++      ffi_call_win32(ffi_prep_args, &ecif, cif->abi, cif->bytes, cif->flags,
++		     ecif.rvalue, fn);
++      break;
++    case FFI_THISCALL:
++    case FFI_FASTCALL:
++      {
++	unsigned int abi = cif->abi;
++	unsigned int i, passed_regs = 0;
++
++	if (cif->flags == FFI_TYPE_STRUCT)
++	  ++passed_regs;
++
++	for (i=0; i < cif->nargs && passed_regs < 2;i++)
++	  {
++	    size_t sz;
++
++	    if (cif->arg_types[i]->type == FFI_TYPE_FLOAT
++	        || cif->arg_types[i]->type == FFI_TYPE_STRUCT)
++	      continue;
++	    sz = (cif->arg_types[i]->size + 3) & ~3;
++	    if (sz == 0 || sz > 4)
++	      continue;
++	    ++passed_regs;
++	  }
++	if (passed_regs < 2 && abi == FFI_FASTCALL)
++	  abi = FFI_THISCALL;
++	if (passed_regs < 1 && abi == FFI_THISCALL)
++	  abi = FFI_STDCALL;
++        ffi_call_win32(ffi_prep_args, &ecif, abi, cif->bytes, cif->flags,
++                       ecif.rvalue, fn);
++      }
+       break;
+ #endif
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
+ 
+ 
+ /** private members **/
+ 
+ /* The following __attribute__((regparm(1))) decorations will have no effect
+-   on MSVC - standard cdecl convention applies. */
++   on MSVC or SUNPRO_C -- standard conventions apply. */
+ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
+                                          void** args, ffi_cif* cif);
+ void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *)
+      __attribute__ ((regparm(1)));
+ unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *)
+      __attribute__ ((regparm(1)));
+ void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *)
+      __attribute__ ((regparm(1)));
+-#ifdef X86_WIN32
++#ifndef X86_WIN64
++void FFI_HIDDEN ffi_closure_raw_THISCALL (ffi_raw_closure *)
++     __attribute__ ((regparm(1)));
+ void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *)
+      __attribute__ ((regparm(1)));
+-#endif
+-#ifdef X86_WIN64
++void FFI_HIDDEN ffi_closure_THISCALL (ffi_closure *)
++     __attribute__ ((regparm(1)));
++#else
+ void FFI_HIDDEN ffi_closure_win64 (ffi_closure *);
+ #endif
+ 
+ /* This function is jumped to by the trampoline */
+ 
+ #ifdef X86_WIN64
+ void * FFI_HIDDEN
+ ffi_closure_win64_inner (ffi_closure *closure, void *args) {
+@@ -402,17 +521,18 @@ ffi_prep_incoming_args_SYSV(char *stack,
+   if (cif->rtype->size > sizeof(ffi_arg)
+       || (cif->flags == FFI_TYPE_STRUCT
+           && (cif->rtype->size != 1 && cif->rtype->size != 2
+               && cif->rtype->size != 4 && cif->rtype->size != 8))) {
+     *rvalue = *(void **) argp;
+     argp += sizeof(void *);
+   }
+ #else
+-  if ( cif->flags == FFI_TYPE_STRUCT ) {
++  if ( cif->flags == FFI_TYPE_STRUCT
++       || cif->flags == FFI_TYPE_MS_STRUCT ) {
+     *rvalue = *(void **) argp;
+     argp += sizeof(void *);
+   }
+ #endif
+ 
+   p_argv = avalue;
+ 
+   for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++)
+@@ -480,16 +600,43 @@ ffi_prep_incoming_args_SYSV(char *stack,
+    unsigned int  __ctx = (unsigned int)(CTX); \
+    unsigned int  __dis = __fun - (__ctx + 10);  \
+    *(unsigned char*) &__tramp[0] = 0xb8; \
+    *(unsigned int*)  &__tramp[1] = __ctx; /* movl __ctx, %eax */ \
+    *(unsigned char *)  &__tramp[5] = 0xe9; \
+    *(unsigned int*)  &__tramp[6] = __dis; /* jmp __fun  */ \
+  }
+ 
++#define FFI_INIT_TRAMPOLINE_THISCALL(TRAMP,FUN,CTX,SIZE) \
++{ unsigned char *__tramp = (unsigned char*)(TRAMP); \
++   unsigned int  __fun = (unsigned int)(FUN); \
++   unsigned int  __ctx = (unsigned int)(CTX); \
++   unsigned int  __dis = __fun - (__ctx + 49);  \
++   unsigned short __size = (unsigned short)(SIZE); \
++   *(unsigned int *) &__tramp[0] = 0x8324048b;	/* mov (%esp), %eax */ \
++   *(unsigned int *) &__tramp[4] = 0x4c890cec;	/* sub $12, %esp */ \
++   *(unsigned int *) &__tramp[8] = 0x04890424;	/* mov %ecx, 4(%esp) */ \
++   *(unsigned char*) &__tramp[12] = 0x24;	/* mov %eax, (%esp) */ \
++   *(unsigned char*) &__tramp[13] = 0xb8; \
++   *(unsigned int *) &__tramp[14] = __size;	/* mov __size, %eax */ \
++   *(unsigned int *) &__tramp[18] = 0x08244c8d;	/* lea 8(%esp), %ecx */ \
++   *(unsigned int *) &__tramp[22] = 0x4802e8c1; /* shr $2, %eax ; dec %eax */ \
++   *(unsigned short*) &__tramp[26] = 0x0b74;	/* jz 1f */ \
++   *(unsigned int *) &__tramp[28] = 0x8908518b;	/* 2b: mov 8(%ecx), %edx */ \
++   *(unsigned int *) &__tramp[32] = 0x04c18311; /* mov %edx, (%ecx) ; add $4, %ecx */ \
++   *(unsigned char*) &__tramp[36] = 0x48;	/* dec %eax */ \
++   *(unsigned short*) &__tramp[37] = 0xf575;	/* jnz 2b ; 1f: */ \
++   *(unsigned char*) &__tramp[39] = 0xb8; \
++   *(unsigned int*)  &__tramp[40] = __ctx; /* movl __ctx, %eax */ \
++   *(unsigned char *)  &__tramp[44] = 0xe8; \
++   *(unsigned int*)  &__tramp[45] = __dis; /* call __fun  */ \
++   *(unsigned char*)  &__tramp[49] = 0xc2; /* ret  */ \
++   *(unsigned short*)  &__tramp[50] = (__size + 8); /* ret (__size + 8)  */ \
++ }
++
+ #define FFI_INIT_TRAMPOLINE_STDCALL(TRAMP,FUN,CTX,SIZE)  \
+ { unsigned char *__tramp = (unsigned char*)(TRAMP); \
+    unsigned int  __fun = (unsigned int)(FUN); \
+    unsigned int  __ctx = (unsigned int)(CTX); \
+    unsigned int  __dis = __fun - (__ctx + 10); \
+    unsigned short __size = (unsigned short)(SIZE); \
+    *(unsigned char*) &__tramp[0] = 0xb8; \
+    *(unsigned int*)  &__tramp[1] = __ctx; /* movl __ctx, %eax */ \
+@@ -521,23 +668,36 @@ ffi_prep_closure_loc (ffi_closure* closu
+     }
+ #else
+   if (cif->abi == FFI_SYSV)
+     {
+       FFI_INIT_TRAMPOLINE (&closure->tramp[0],
+                            &ffi_closure_SYSV,
+                            (void*)codeloc);
+     }
+-#ifdef X86_WIN32
++  else if (cif->abi == FFI_THISCALL)
++    {
++      FFI_INIT_TRAMPOLINE_THISCALL (&closure->tramp[0],
++				    &ffi_closure_THISCALL,
++				    (void*)codeloc,
++				    cif->bytes);
++    }
+   else if (cif->abi == FFI_STDCALL)
+     {
+       FFI_INIT_TRAMPOLINE_STDCALL (&closure->tramp[0],
+                                    &ffi_closure_STDCALL,
+                                    (void*)codeloc, cif->bytes);
+     }
++#ifdef X86_WIN32
++  else if (cif->abi == FFI_MS_CDECL)
++    {
++      FFI_INIT_TRAMPOLINE (&closure->tramp[0],
++                           &ffi_closure_SYSV,
++                           (void*)codeloc);
++    }
+ #endif /* X86_WIN32 */
+ #endif /* !X86_WIN64 */
+   else
+     {
+       return FFI_BAD_ABI;
+     }
+     
+   closure->cif  = cif;
+@@ -555,35 +715,48 @@ ffi_status
+ ffi_prep_raw_closure_loc (ffi_raw_closure* closure,
+                           ffi_cif* cif,
+                           void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+                           void *user_data,
+                           void *codeloc)
+ {
+   int i;
+ 
+-  if (cif->abi != FFI_SYSV) {
++  if (cif->abi != FFI_SYSV
++#ifndef X86_WIN64
++      && cif->abi != FFI_THISCALL
++#endif
++     )
+     return FFI_BAD_ABI;
+-  }
+ 
+   /* we currently don't support certain kinds of arguments for raw
+      closures.  This should be implemented by a separate assembly
+      language routine, since it would require argument processing,
+      something we don't do now for performance.  */
+ 
+   for (i = cif->nargs-1; i >= 0; i--)
+     {
+       FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT);
+       FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE);
+     }
+   
+-
++#ifndef X86_WIN64
++  if (cif->abi == FFI_SYSV)
++    {
++#endif
+   FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV,
+                        codeloc);
+-    
++#ifndef X86_WIN64
++    }
++  else if (cif->abi == FFI_THISCALL)
++    {
++      FFI_INIT_TRAMPOLINE_THISCALL (&closure->tramp[0], &ffi_closure_raw_THISCALL,
++				    codeloc, cif->bytes);
++    }
++#endif
+   closure->cif  = cif;
+   closure->user_data = user_data;
+   closure->fun  = fun;
+ 
+   return FFI_OK;
+ }
+ 
+ static void 
+@@ -604,37 +777,70 @@ ffi_raw_call(ffi_cif *cif, void (*fn)(vo
+   void **avalue = (void **)fake_avalue;
+ 
+   ecif.cif = cif;
+   ecif.avalue = avalue;
+   
+   /* If the return value is a struct and we don't have a return */
+   /* value address then we need to make one                     */
+ 
+-  if ((rvalue == NULL) && 
+-      (cif->rtype->type == FFI_TYPE_STRUCT))
++  if (rvalue == NULL
++      && (cif->flags == FFI_TYPE_STRUCT
++          || cif->flags == FFI_TYPE_MS_STRUCT))
+     {
+       ecif.rvalue = alloca(cif->rtype->size);
+     }
+   else
+     ecif.rvalue = rvalue;
+     
+   
+   switch (cif->abi) 
+     {
+-#ifdef X86_WIN32
++#ifndef X86_WIN32
+     case FFI_SYSV:
+-    case FFI_STDCALL:
+-      ffi_call_win32(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags,
+-                     ecif.rvalue, fn);
++      ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags,
++                    ecif.rvalue, fn);
+       break;
+ #else
+     case FFI_SYSV:
+-      ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags,
+-                    ecif.rvalue, fn);
++    case FFI_MS_CDECL:
++#endif
++#ifndef X86_WIN64
++    case FFI_STDCALL:
++      ffi_call_win32(ffi_prep_args_raw, &ecif, cif->abi, cif->bytes, cif->flags,
++		     ecif.rvalue, fn);
++      break;
++    case FFI_THISCALL:
++    case FFI_FASTCALL:
++      {
++	unsigned int abi = cif->abi;
++	unsigned int i, passed_regs = 0;
++
++	if (cif->flags == FFI_TYPE_STRUCT)
++	  ++passed_regs;
++
++	for (i=0; i < cif->nargs && passed_regs < 2;i++)
++	  {
++	    size_t sz;
++
++	    if (cif->arg_types[i]->type == FFI_TYPE_FLOAT
++	        || cif->arg_types[i]->type == FFI_TYPE_STRUCT)
++	      continue;
++	    sz = (cif->arg_types[i]->size + 3) & ~3;
++	    if (sz == 0 || sz > 4)
++	      continue;
++	    ++passed_regs;
++	  }
++	if (passed_regs < 2 && abi == FFI_FASTCALL)
++	  cif->abi = abi = FFI_THISCALL;
++	if (passed_regs < 1 && abi == FFI_THISCALL)
++	  cif->abi = abi = FFI_STDCALL;
++        ffi_call_win32(ffi_prep_args_raw, &ecif, abi, cif->bytes, cif->flags,
++                       ecif.rvalue, fn);
++      }
+       break;
+ #endif
+     default:
+       FFI_ASSERT(0);
+       break;
+     }
+ }
+ 
+diff --git a/js/src/ctypes/libffi/src/x86/ffi64.c b/js/src/ctypes/libffi/src/x86/ffi64.c
+--- a/js/src/ctypes/libffi/src/x86/ffi64.c
++++ b/js/src/ctypes/libffi/src/x86/ffi64.c
+@@ -1,13 +1,15 @@
+ /* -----------------------------------------------------------------------
+-   ffi64.c - Copyright (c) 2002, 2007  Bo Thorsen <bo@suse.de>
+-             Copyright (c) 2008  Red Hat, Inc.
+-   
+-   x86-64 Foreign Function Interface 
++   ffi64.c - Copyright (c) 2013  The Written Word, Inc.
++             Copyright (c) 2011  Anthony Green
++             Copyright (c) 2008, 2010  Red Hat, Inc.
++             Copyright (c) 2002, 2007  Bo Thorsen <bo@suse.de>
++
++   x86-64 Foreign Function Interface
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+@@ -31,21 +33,40 @@
+ #include <stdlib.h>
+ #include <stdarg.h>
+ 
+ #ifdef __x86_64__
+ 
+ #define MAX_GPR_REGS 6
+ #define MAX_SSE_REGS 8
+ 
++#if defined(__INTEL_COMPILER)
++#include "xmmintrin.h"
++#define UINT128 __m128
++#else
++#if defined(__SUNPRO_C)
++#include <sunmedia_types.h>
++#define UINT128 __m128i
++#else
++#define UINT128 __int128_t
++#endif
++#endif
++
++union big_int_union
++{
++  UINT32 i32;
++  UINT64 i64;
++  UINT128 i128;
++};
++
+ struct register_args
+ {
+   /* Registers for argument passing.  */
+   UINT64 gpr[MAX_GPR_REGS];
+-  __int128_t sse[MAX_SSE_REGS];
++  union big_int_union sse[MAX_SSE_REGS];
+ };
+ 
+ extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
+ 			     void *raddr, void (*fnaddr)(void), unsigned ssecount);
+ 
+ /* All reference to register classes here is identical to the code in
+    gcc/config/i386/i386.c. Do *not* change one without the other.  */
+ 
+@@ -126,33 +147,33 @@ merge_classes (enum x86_64_reg_class cla
+ /* Classify the argument of type TYPE and mode MODE.
+    CLASSES will be filled by the register class used to pass each word
+    of the operand.  The number of words is returned.  In case the parameter
+    should be passed in memory, 0 is returned. As a special case for zero
+    sized containers, classes[0] will be NO_CLASS and 1 is returned.
+ 
+    See the x86-64 PS ABI for details.
+ */
+-static int
++static size_t
+ classify_argument (ffi_type *type, enum x86_64_reg_class classes[],
+ 		   size_t byte_offset)
+ {
+   switch (type->type)
+     {
+     case FFI_TYPE_UINT8:
+     case FFI_TYPE_SINT8:
+     case FFI_TYPE_UINT16:
+     case FFI_TYPE_SINT16:
+     case FFI_TYPE_UINT32:
+     case FFI_TYPE_SINT32:
+     case FFI_TYPE_UINT64:
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_POINTER:
+       {
+-	int size = byte_offset + type->size;
++	size_t size = byte_offset + type->size;
+ 
+ 	if (size <= 4)
+ 	  {
+ 	    classes[0] = X86_64_INTEGERSI_CLASS;
+ 	    return 1;
+ 	  }
+ 	else if (size <= 8)
+ 	  {
+@@ -177,25 +198,27 @@ classify_argument (ffi_type *type, enum 
+       if (!(byte_offset % 8))
+ 	classes[0] = X86_64_SSESF_CLASS;
+       else
+ 	classes[0] = X86_64_SSE_CLASS;
+       return 1;
+     case FFI_TYPE_DOUBLE:
+       classes[0] = X86_64_SSEDF_CLASS;
+       return 1;
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+     case FFI_TYPE_LONGDOUBLE:
+       classes[0] = X86_64_X87_CLASS;
+       classes[1] = X86_64_X87UP_CLASS;
+       return 2;
++#endif
+     case FFI_TYPE_STRUCT:
+       {
+-	const int UNITS_PER_WORD = 8;
+-	int words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+-	ffi_type **ptr; 
++	const size_t UNITS_PER_WORD = 8;
++	size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
++	ffi_type **ptr;
+ 	int i;
+ 	enum x86_64_reg_class subclasses[MAX_CLASSES];
+ 
+ 	/* If the struct is larger than 32 bytes, pass it on the stack.  */
+ 	if (type->size > 32)
+ 	  return 0;
+ 
+ 	for (i = 0; i < words; i++)
+@@ -207,26 +230,26 @@ classify_argument (ffi_type *type, enum 
+ 	  {
+ 	    classes[0] = X86_64_NO_CLASS;
+ 	    return 1;
+ 	  }
+ 
+ 	/* Merge the fields of structure.  */
+ 	for (ptr = type->elements; *ptr != NULL; ptr++)
+ 	  {
+-	    int num;
++	    size_t num;
+ 
+ 	    byte_offset = ALIGN (byte_offset, (*ptr)->alignment);
+ 
+ 	    num = classify_argument (*ptr, subclasses, byte_offset % 8);
+ 	    if (num == 0)
+ 	      return 0;
+ 	    for (i = 0; i < num; i++)
+ 	      {
+-		int pos = byte_offset / 8;
++		size_t pos = byte_offset / 8;
+ 		classes[i + pos] =
+ 		  merge_classes (subclasses[i], classes[i + pos]);
+ 	      }
+ 
+ 	    byte_offset += (*ptr)->size;
+ 	  }
+ 
+ 	if (words > 2)
+@@ -280,21 +303,22 @@ classify_argument (ffi_type *type, enum 
+     }
+   return 0; /* Never reached.  */
+ }
+ 
+ /* Examine the argument and return set number of register required in each
+    class.  Return zero iff parameter should be passed in memory, otherwise
+    the number of registers.  */
+ 
+-static int
++static size_t
+ examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES],
+ 		  _Bool in_return, int *pngpr, int *pnsse)
+ {
+-  int i, n, ngpr, nsse;
++  size_t n;
++  int i, ngpr, nsse;
+ 
+   n = classify_argument (type, classes, 0);
+   if (n == 0)
+     return 0;
+ 
+   ngpr = nsse = 0;
+   for (i = 0; i < n; ++i)
+     switch (classes[i])
+@@ -325,19 +349,19 @@ examine_argument (ffi_type *type, enum x
+   return n;
+ }
+ 
+ /* Perform machine dependent cif processing.  */
+ 
+ ffi_status
+ ffi_prep_cif_machdep (ffi_cif *cif)
+ {
+-  int gprcount, ssecount, i, avn, n, ngpr, nsse, flags;
++  int gprcount, ssecount, i, avn, ngpr, nsse, flags;
+   enum x86_64_reg_class classes[MAX_CLASSES];
+-  size_t bytes;
++  size_t bytes, n;
+ 
+   gprcount = ssecount = 0;
+ 
+   flags = cif->rtype->type;
+   if (flags != FFI_TYPE_VOID)
+     {
+       n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse);
+       if (n == 0)
+@@ -385,17 +409,17 @@ ffi_prep_cif_machdep (ffi_cif *cif)
+ 	{
+ 	  gprcount += ngpr;
+ 	  ssecount += nsse;
+ 	}
+     }
+   if (ssecount)
+     flags |= 1 << 11;
+   cif->flags = flags;
+-  cif->bytes = ALIGN (bytes, 8);
++  cif->bytes = (unsigned)ALIGN (bytes, 8);
+ 
+   return FFI_OK;
+ }
+ 
+ void
+ ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
+   enum x86_64_reg_class classes[MAX_CLASSES];
+@@ -421,25 +445,24 @@ ffi_call (ffi_cif *cif, void (*fn)(void)
+   reg_args = (struct register_args *) stack;
+   argp = stack + sizeof (struct register_args);
+ 
+   gprcount = ssecount = 0;
+ 
+   /* If the return value is passed in memory, add the pointer as the
+      first integer argument.  */
+   if (ret_in_memory)
+-    reg_args->gpr[gprcount++] = (long) rvalue;
++    reg_args->gpr[gprcount++] = (unsigned long) rvalue;
+ 
+   avn = cif->nargs;
+   arg_types = cif->arg_types;
+ 
+   for (i = 0; i < avn; ++i)
+     {
+-      size_t size = arg_types[i]->size;
+-      int n;
++      size_t n, size = arg_types[i]->size;
+ 
+       n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse);
+       if (n == 0
+ 	  || gprcount + ngpr > MAX_GPR_REGS
+ 	  || ssecount + nsse > MAX_SSE_REGS)
+ 	{
+ 	  long align = arg_types[i]->alignment;
+ 
+@@ -459,26 +482,43 @@ ffi_call (ffi_cif *cif, void (*fn)(void)
+ 	  int j;
+ 
+ 	  for (j = 0; j < n; j++, a += 8, size -= 8)
+ 	    {
+ 	      switch (classes[j])
+ 		{
+ 		case X86_64_INTEGER_CLASS:
+ 		case X86_64_INTEGERSI_CLASS:
+-		  reg_args->gpr[gprcount] = 0;
+-		  memcpy (&reg_args->gpr[gprcount], a, size < 8 ? size : 8);
++		  /* Sign-extend integer arguments passed in general
++		     purpose registers, to cope with the fact that
++		     LLVM incorrectly assumes that this will be done
++		     (the x86-64 PS ABI does not specify this). */
++		  switch (arg_types[i]->type)
++		    {
++		    case FFI_TYPE_SINT8:
++		      *(SINT64 *)&reg_args->gpr[gprcount] = (SINT64) *((SINT8 *) a);
++		      break;
++		    case FFI_TYPE_SINT16:
++		      *(SINT64 *)&reg_args->gpr[gprcount] = (SINT64) *((SINT16 *) a);
++		      break;
++		    case FFI_TYPE_SINT32:
++		      *(SINT64 *)&reg_args->gpr[gprcount] = (SINT64) *((SINT32 *) a);
++		      break;
++		    default:
++		      reg_args->gpr[gprcount] = 0;
++		      memcpy (&reg_args->gpr[gprcount], a, size < 8 ? size : 8);
++		    }
+ 		  gprcount++;
+ 		  break;
+ 		case X86_64_SSE_CLASS:
+ 		case X86_64_SSEDF_CLASS:
+-		  reg_args->sse[ssecount++] = *(UINT64 *) a;
++		  reg_args->sse[ssecount++].i64 = *(UINT64 *) a;
+ 		  break;
+ 		case X86_64_SSESF_CLASS:
+-		  reg_args->sse[ssecount++] = *(UINT32 *) a;
++		  reg_args->sse[ssecount++].i32 = *(UINT32 *) a;
+ 		  break;
+ 		default:
+ 		  abort();
+ 		}
+ 	    }
+ 	}
+     }
+ 
+@@ -493,22 +533,31 @@ ffi_status
+ ffi_prep_closure_loc (ffi_closure* closure,
+ 		      ffi_cif* cif,
+ 		      void (*fun)(ffi_cif*, void*, void**, void*),
+ 		      void *user_data,
+ 		      void *codeloc)
+ {
+   volatile unsigned short *tramp;
+ 
++  /* Sanity check on the cif ABI.  */
++  {
++    int abi = cif->abi;
++    if (UNLIKELY (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)))
++      return FFI_BAD_ABI;
++  }
++
+   tramp = (volatile unsigned short *) &closure->tramp[0];
+ 
+   tramp[0] = 0xbb49;		/* mov <code>, %r11	*/
+-  *(void * volatile *) &tramp[1] = ffi_closure_unix64;
++  *((unsigned long long * volatile) &tramp[1])
++    = (unsigned long) ffi_closure_unix64;
+   tramp[5] = 0xba49;		/* mov <data>, %r10	*/
+-  *(void * volatile *) &tramp[6] = codeloc;
++  *((unsigned long long * volatile) &tramp[6])
++    = (unsigned long) codeloc;
+ 
+   /* Set the carry bit iff the function uses any sse registers.
+      This is clc or stc, together with the first byte of the jmp.  */
+   tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8;
+ 
+   tramp[11] = 0xe3ff;			/* jmp *%r11    */
+ 
+   closure->cif = cif;
+@@ -532,22 +581,22 @@ ffi_closure_unix64_inner(ffi_closure *cl
+   cif = closure->cif;
+   avalue = alloca(cif->nargs * sizeof(void *));
+   gprcount = ssecount = 0;
+ 
+   ret = cif->rtype->type;
+   if (ret != FFI_TYPE_VOID)
+     {
+       enum x86_64_reg_class classes[MAX_CLASSES];
+-      int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse);
++      size_t n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse);
+       if (n == 0)
+ 	{
+ 	  /* The return value goes in memory.  Arrange for the closure
+ 	     return value to go directly back to the original caller.  */
+-	  rvalue = (void *) reg_args->gpr[gprcount++];
++	  rvalue = (void *) (unsigned long) reg_args->gpr[gprcount++];
+ 	  /* We don't have to do anything in asm for the return.  */
+ 	  ret = FFI_TYPE_VOID;
+ 	}
+       else if (ret == FFI_TYPE_STRUCT && n == 2)
+ 	{
+ 	  /* Mark which register the second word of the structure goes in.  */
+ 	  _Bool sse0 = SSE_CLASS_P (classes[0]);
+ 	  _Bool sse1 = SSE_CLASS_P (classes[1]);
+@@ -555,21 +604,21 @@ ffi_closure_unix64_inner(ffi_closure *cl
+ 	    ret |= 1 << 8;
+ 	  else if (sse0 && !sse1)
+ 	    ret |= 1 << 9;
+ 	}
+     }
+ 
+   avn = cif->nargs;
+   arg_types = cif->arg_types;
+-  
++
+   for (i = 0; i < avn; ++i)
+     {
+       enum x86_64_reg_class classes[MAX_CLASSES];
+-      int n;
++      size_t n;
+ 
+       n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse);
+       if (n == 0
+ 	  || gprcount + ngpr > MAX_GPR_REGS
+ 	  || ssecount + nsse > MAX_SSE_REGS)
+ 	{
+ 	  long align = arg_types[i]->alignment;
+ 
+diff --git a/js/src/ctypes/libffi/src/x86/ffitarget.h b/js/src/ctypes/libffi/src/x86/ffitarget.h
+--- a/js/src/ctypes/libffi/src/x86/ffitarget.h
++++ b/js/src/ctypes/libffi/src/x86/ffitarget.h
+@@ -1,11 +1,12 @@
+ /* -----------------------------------------------------------------*-C-*-
+-   ffitarget.h - Copyright (c) 1996-2003, 2010  Red Hat, Inc.
+-   Copyright (C) 2008  Free Software Foundation, Inc.
++   ffitarget.h - Copyright (c) 2012  Anthony Green
++                 Copyright (c) 1996-2003, 2010  Red Hat, Inc.
++                 Copyright (C) 2008  Free Software Foundation, Inc.
+ 
+    Target configuration macros for x86 and x86-64.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -24,16 +25,20 @@
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+ 
+    ----------------------------------------------------------------------- */
+ 
+ #ifndef LIBFFI_TARGET_H
+ #define LIBFFI_TARGET_H
+ 
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
+ /* ---- System specific configurations ----------------------------------- */
+ 
+ /* For code common to all platforms on x86 and x86_64. */
+ #define X86_ANY
+ 
+ #if defined (X86_64) && defined (__i386__)
+ #undef X86_64
+ #define X86
+@@ -51,71 +56,80 @@
+ #ifdef _MSC_VER
+ typedef unsigned __int64       ffi_arg;
+ typedef __int64                ffi_sarg;
+ #else
+ typedef unsigned long long     ffi_arg;
+ typedef long long              ffi_sarg;
+ #endif
+ #else
++#if defined __x86_64__ && defined __ILP32__
++#define FFI_SIZEOF_ARG 8
++#define FFI_SIZEOF_JAVA_RAW  4
++typedef unsigned long long     ffi_arg;
++typedef long long              ffi_sarg;
++#else
+ typedef unsigned long          ffi_arg;
+ typedef signed long            ffi_sarg;
+ #endif
++#endif
+ 
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+ 
+   /* ---- Intel x86 Win32 ---------- */
+ #ifdef X86_WIN32
+   FFI_SYSV,
+   FFI_STDCALL,
++  FFI_THISCALL,
++  FFI_FASTCALL,
++  FFI_MS_CDECL,
+   FFI_LAST_ABI,
+-  /* TODO: Add fastcall support for the sake of completeness */
++#ifdef _MSC_VER
++  FFI_DEFAULT_ABI = FFI_MS_CDECL
++#else
+   FFI_DEFAULT_ABI = FFI_SYSV
++#endif
+ 
+ #elif defined(X86_WIN64)
+   FFI_WIN64,
+   FFI_LAST_ABI,
+   FFI_DEFAULT_ABI = FFI_WIN64
+ 
+ #else
+   /* ---- Intel x86 and AMD x86-64 - */
+   FFI_SYSV,
+   FFI_UNIX64,   /* Unix variants all use the same ABI for x86-64  */
++  FFI_THISCALL,
++  FFI_FASTCALL,
++  FFI_STDCALL,
+   FFI_LAST_ABI,
+ #if defined(__i386__) || defined(__i386)
+   FFI_DEFAULT_ABI = FFI_SYSV
+ #else
+   FFI_DEFAULT_ABI = FFI_UNIX64
+ #endif
+ #endif
+ } ffi_abi;
+ #endif
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+ #define FFI_CLOSURES 1
+ #define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1)
+ #define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2)
+ #define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3)
++#define FFI_TYPE_MS_STRUCT       (FFI_TYPE_LAST + 4)
+ 
+ #if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN))
+ #define FFI_TRAMPOLINE_SIZE 24
+ #define FFI_NATIVE_RAW_API 0
+-#else
+-#ifdef X86_WIN32
+-#define FFI_TRAMPOLINE_SIZE 13
+-#else
+-#ifdef X86_WIN64
++#elif defined(X86_WIN64)
+ #define FFI_TRAMPOLINE_SIZE 29
+ #define FFI_NATIVE_RAW_API 0
+ #define FFI_NO_RAW_API 1
+ #else
+-#define FFI_TRAMPOLINE_SIZE 10
+-#endif
+-#endif
+-#ifndef X86_WIN64
++#define FFI_TRAMPOLINE_SIZE 52
+ #define FFI_NATIVE_RAW_API 1	/* x86 has native raw api support */
+ #endif
+-#endif
+ 
+ #endif
+ 
+diff --git a/js/src/ctypes/libffi/src/x86/freebsd.S b/js/src/ctypes/libffi/src/x86/freebsd.S
+--- a/js/src/ctypes/libffi/src/x86/freebsd.S
++++ b/js/src/ctypes/libffi/src/x86/freebsd.S
+@@ -454,8 +454,10 @@ 0:
+ 	.byte	0x86	/* DW_CFA_offset, column 0x6 */
+ 	.byte	0x3	/* .uleb128 0x3 */
+ 	.align 4
+ .LEFDE3:
+ 
+ #endif
+ 
+ #endif /* ifndef __x86_64__ */
++
++	.section .note.GNU-stack,"",%progbits
+diff --git a/js/src/ctypes/libffi/src/x86/sysv.S b/js/src/ctypes/libffi/src/x86/sysv.S
+--- a/js/src/ctypes/libffi/src/x86/sysv.S
++++ b/js/src/ctypes/libffi/src/x86/sysv.S
+@@ -1,10 +1,11 @@
+ /* -----------------------------------------------------------------------
+-   sysv.S - Copyright (c) 1996, 1998, 2001-2003, 2005, 2008, 2010  Red Hat, Inc.
++   sysv.S - Copyright (c) 2013  The Written Word, Inc.
++	  - Copyright (c) 1996,1998,2001-2003,2005,2008,2010  Red Hat, Inc.
+    
+    X86 Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -176,19 +177,29 @@ ffi_closure_SYSV:
+ 	pushl	%ebp
+ .LCFI2:
+ 	movl	%esp, %ebp
+ .LCFI3:
+ 	subl	$40, %esp
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, -12(%ebp)	/* resp */
+ 	leal	8(%ebp), %edx
++#ifdef __SUNPRO_C
++	/* The SUNPRO compiler doesn't support GCC's regparm function
++  	   attribute, so we have to pass all three arguments to
++	   ffi_closure_SYSV_inner on the stack.  */
++	movl	%edx, 8(%esp)	/* args = __builtin_dwarf_cfa () */
++	leal	-12(%ebp), %edx
++	movl	%edx, 4(%esp)	/* &resp */
++	movl    %eax, (%esp)    /* closure */
++#else
+ 	movl	%edx, 4(%esp)	/* args = __builtin_dwarf_cfa () */
+ 	leal	-12(%ebp), %edx
+ 	movl	%edx, (%esp)	/* &resp */
++#endif
+ #if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__
+ 	call	ffi_closure_SYSV_inner
+ #else
+ 	movl	%ebx, 8(%esp)
+ .LCFI7:
+ 	call	1f
+ 1:	popl	%ebx
+ 	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+@@ -323,16 +334,38 @@ 0:
+ .Lrcls_retllong:
+ 	movl	-24(%ebp), %eax
+ 	movl	-20(%ebp), %edx
+ 	jmp	.Lrcls_epilogue
+ .LFE3:
+ 	.size	ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV
+ #endif
+ 
++#if defined __GNUC__
++/* Only emit dwarf unwind info when building with GNU toolchain.  */
++
++#if defined __PIC__
++# if defined __sun__ && defined __svr4__
++/* 32-bit Solaris 2/x86 uses datarel encoding for PIC.  GNU ld before 2.22
++   doesn't correctly sort .eh_frame_hdr with mixed encodings, so match this.  */
++#  define FDE_ENCODING		0x30	/* datarel */
++#  define FDE_ENCODE(X)		X@GOTOFF
++# else
++#  define FDE_ENCODING		0x1b	/* pcrel sdata4 */
++#  if defined HAVE_AS_X86_PCREL
++#   define FDE_ENCODE(X)	X-.
++#  else
++#   define FDE_ENCODE(X)	X@rel
++#  endif
++# endif
++#else
++# define FDE_ENCODING		0	/* absolute */
++# define FDE_ENCODE(X)		X
++#endif
++
+ 	.section	.eh_frame,EH_FRAME_FLAGS,@progbits
+ .Lframe1:
+ 	.long	.LECIE1-.LSCIE1	/* Length of Common Information Entry */
+ .LSCIE1:
+ 	.long	0x0	/* CIE Identifier Tag */
+ 	.byte	0x1	/* CIE Version */
+ #ifdef HAVE_AS_ASCII_PSEUDO_OP
+ #ifdef __PIC__
+@@ -349,37 +382,31 @@ 0:
+ #else
+ #error missing .ascii/.string
+ #endif
+ 	.byte	0x1	/* .uleb128 0x1; CIE Code Alignment Factor */
+ 	.byte	0x7c	/* .sleb128 -4; CIE Data Alignment Factor */
+ 	.byte	0x8	/* CIE RA Column */
+ #ifdef __PIC__
+ 	.byte	0x1	/* .uleb128 0x1; Augmentation size */
+-	.byte	0x1b	/* FDE Encoding (pcrel sdata4) */
++	.byte	FDE_ENCODING
+ #endif
+ 	.byte	0xc	/* DW_CFA_def_cfa */
+ 	.byte	0x4	/* .uleb128 0x4 */
+ 	.byte	0x4	/* .uleb128 0x4 */
+ 	.byte	0x88	/* DW_CFA_offset, column 0x8 */
+ 	.byte	0x1	/* .uleb128 0x1 */
+ 	.align 4
+ .LECIE1:
+ .LSFDE1:
+ 	.long	.LEFDE1-.LASFDE1	/* FDE Length */
+ .LASFDE1:
+ 	.long	.LASFDE1-.Lframe1	/* FDE CIE offset */
+-#if defined __PIC__ && defined HAVE_AS_X86_PCREL
+-	.long	.LFB1-.	/* FDE initial location */
+-#elif defined __PIC__
+-	.long	.LFB1@rel
+-#else
+-	.long	.LFB1
+-#endif
+-	.long	.LFE1-.LFB1	/* FDE address range */
++	.long	FDE_ENCODE(.LFB1)	/* FDE initial location */
++	.long	.LFE1-.LFB1		/* FDE address range */
+ #ifdef __PIC__
+ 	.byte	0x0	/* .uleb128 0x0; Augmentation size */
+ #endif
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI0-.LFB1
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x8	/* .uleb128 0x8 */
+ 	.byte	0x85	/* DW_CFA_offset, column 0x5 */
+@@ -389,24 +416,18 @@ 0:
+ 	.byte	0xd	/* DW_CFA_def_cfa_register */
+ 	.byte	0x5	/* .uleb128 0x5 */
+ 	.align 4
+ .LEFDE1:
+ .LSFDE2:
+ 	.long	.LEFDE2-.LASFDE2	/* FDE Length */
+ .LASFDE2:
+ 	.long	.LASFDE2-.Lframe1	/* FDE CIE offset */
+-#if defined __PIC__ && defined HAVE_AS_X86_PCREL
+-	.long	.LFB2-.	/* FDE initial location */
+-#elif defined __PIC__
+-	.long	.LFB2@rel
+-#else
+-	.long	.LFB2
+-#endif
+-	.long	.LFE2-.LFB2	/* FDE address range */
++	.long	FDE_ENCODE(.LFB2)	/* FDE initial location */
++	.long	.LFE2-.LFB2		/* FDE address range */
+ #ifdef __PIC__
+ 	.byte	0x0	/* .uleb128 0x0; Augmentation size */
+ #endif
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI2-.LFB2
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x8	/* .uleb128 0x8 */
+ 	.byte	0x85	/* DW_CFA_offset, column 0x5 */
+@@ -425,24 +446,18 @@ 0:
+ .LEFDE2:
+ 
+ #if !FFI_NO_RAW_API
+ 
+ .LSFDE3:
+ 	.long	.LEFDE3-.LASFDE3	/* FDE Length */
+ .LASFDE3:
+ 	.long	.LASFDE3-.Lframe1	/* FDE CIE offset */
+-#if defined __PIC__ && defined HAVE_AS_X86_PCREL
+-	.long	.LFB3-.	/* FDE initial location */
+-#elif defined __PIC__
+-	.long	.LFB3@rel
+-#else
+-	.long	.LFB3
+-#endif
+-	.long	.LFE3-.LFB3	/* FDE address range */
++	.long	FDE_ENCODE(.LFB3)	/* FDE initial location */
++	.long	.LFE3-.LFB3		/* FDE address range */
+ #ifdef __PIC__
+ 	.byte	0x0	/* .uleb128 0x0; Augmentation size */
+ #endif
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI4-.LFB3
+ 	.byte	0xe	/* DW_CFA_def_cfa_offset */
+ 	.byte	0x8	/* .uleb128 0x8 */
+ 	.byte	0x85	/* DW_CFA_offset, column 0x5 */
+@@ -454,14 +469,15 @@ 0:
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.long	.LCFI6-.LCFI5
+ 	.byte	0x86	/* DW_CFA_offset, column 0x6 */
+ 	.byte	0x3	/* .uleb128 0x3 */
+ 	.align 4
+ .LEFDE3:
+ 
+ #endif
++#endif
+ 
+ #endif /* ifndef __x86_64__ */
+ 
+ #if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",@progbits
+ #endif
+diff --git a/js/src/ctypes/libffi/src/x86/unix64.S b/js/src/ctypes/libffi/src/x86/unix64.S
+--- a/js/src/ctypes/libffi/src/x86/unix64.S
++++ b/js/src/ctypes/libffi/src/x86/unix64.S
+@@ -1,11 +1,12 @@
+ /* -----------------------------------------------------------------------
+-   unix64.S - Copyright (c) 2002  Bo Thorsen <bo@suse.de>
+-	      Copyright (c) 2008  Red Hat, Inc
++   unix64.S - Copyright (c) 2013  The Written Word, Inc.
++	    - Copyright (c) 2008  Red Hat, Inc
++	    - Copyright (c) 2002  Bo Thorsen <bo@suse.de>
+ 
+    x86-64 Foreign Function Interface 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+@@ -319,16 +320,19 @@ ffi_closure_unix64:
+ 	movdqa	%xmm5, 128(%rsp)
+ 	movdqa	%xmm6, 144(%rsp)
+ 	movdqa	%xmm7, 160(%rsp)
+ 	jmp	.Lret_from_save_sse
+ 
+ .LUW9:
+ 	.size	ffi_closure_unix64,.-ffi_closure_unix64
+ 
++#ifdef __GNUC__
++/* Only emit DWARF unwind info when building with the GNU toolchain.  */
++
+ #ifdef HAVE_AS_X86_64_UNWIND_SECTION_TYPE
+ 	.section	.eh_frame,"a",@unwind
+ #else
+ 	.section	.eh_frame,"a",@progbits
+ #endif
+ .Lframe1:
+ 	.long	.LECIE1-.LSCIE1		/* CIE Length */
+ .LSCIE1:
+@@ -414,13 +418,15 @@ ffi_closure_unix64:
+ 
+ 	.byte	0x4			/* DW_CFA_advance_loc4 */
+ 	.long	.LUW8-.LUW7
+ 	.byte	0xb			/* DW_CFA_restore_state */
+ 
+ 	.align 8
+ .LEFDE3:
+ 
++#endif /* __GNUC__ */
++	
+ #endif /* __x86_64__ */
+ 
+ #if defined __ELF__ && defined __linux__
+ 	.section	.note.GNU-stack,"",@progbits
+ #endif
+diff --git a/js/src/ctypes/libffi/src/x86/win32.S b/js/src/ctypes/libffi/src/x86/win32.S
+--- a/js/src/ctypes/libffi/src/x86/win32.S
++++ b/js/src/ctypes/libffi/src/x86/win32.S
+@@ -40,16 +40,17 @@
+ 
+ EXTRN ffi_closure_SYSV_inner:NEAR
+ 
+ _TEXT SEGMENT
+ 
+ ffi_call_win32 PROC NEAR,
+     ffi_prep_args : NEAR PTR DWORD,
+     ecif          : NEAR PTR DWORD,
++    cif_abi       : DWORD,
+     cif_bytes     : DWORD,
+     cif_flags     : DWORD,
+     rvalue        : NEAR PTR DWORD,
+     fn            : NEAR PTR DWORD
+ 
+         ;; Make room for all of the new args.
+         mov  ecx, cif_bytes
+         sub  esp, ecx
+@@ -59,16 +60,29 @@ ffi_call_win32 PROC NEAR,
+         ;; Place all of the ffi_prep_args in position
+         push ecif
+         push eax
+         call ffi_prep_args
+ 
+         ;; Return stack to previous state and call the function
+         add  esp, 8
+ 
++	;; Handle thiscall and fastcall
++	cmp cif_abi, 3 ;; FFI_THISCALL
++	jz do_thiscall
++	cmp cif_abi, 4 ;; FFI_FASTCALL
++	jnz do_stdcall
++	mov ecx, DWORD PTR [esp]
++	mov edx, DWORD PTR [esp+4]
++	add esp, 8
++	jmp do_stdcall
++do_thiscall:
++	mov ecx, DWORD PTR [esp]
++	add esp, 4
++do_stdcall:
+         call fn
+ 
+         ;; cdecl:   we restore esp in the epilogue, so there's no need to
+         ;;          remove the space we pushed for the args.
+         ;; stdcall: the callee has already cleaned the stack.
+ 
+         ;; Load ecx with the return type code
+         mov  ecx, cif_flags
+@@ -89,41 +103,47 @@ ca_jumptable:
+         jmp  [ca_jumpdata + 4 * ecx]
+ ca_jumpdata:
+         ;; Do not insert anything here between label and jump table.
+         dd offset ca_epilogue       ;; FFI_TYPE_VOID
+         dd offset ca_retint         ;; FFI_TYPE_INT
+         dd offset ca_retfloat       ;; FFI_TYPE_FLOAT
+         dd offset ca_retdouble      ;; FFI_TYPE_DOUBLE
+         dd offset ca_retlongdouble  ;; FFI_TYPE_LONGDOUBLE
+-        dd offset ca_retint8        ;; FFI_TYPE_UINT8
+-        dd offset ca_retint8        ;; FFI_TYPE_SINT8
+-        dd offset ca_retint16       ;; FFI_TYPE_UINT16
+-        dd offset ca_retint16       ;; FFI_TYPE_SINT16
++        dd offset ca_retuint8       ;; FFI_TYPE_UINT8
++        dd offset ca_retsint8       ;; FFI_TYPE_SINT8
++        dd offset ca_retuint16      ;; FFI_TYPE_UINT16
++        dd offset ca_retsint16      ;; FFI_TYPE_SINT16
+         dd offset ca_retint         ;; FFI_TYPE_UINT32
+         dd offset ca_retint         ;; FFI_TYPE_SINT32
+         dd offset ca_retint64       ;; FFI_TYPE_UINT64
+         dd offset ca_retint64       ;; FFI_TYPE_SINT64
+         dd offset ca_epilogue       ;; FFI_TYPE_STRUCT
+         dd offset ca_retint         ;; FFI_TYPE_POINTER
+-        dd offset ca_retint8        ;; FFI_TYPE_SMALL_STRUCT_1B
+-        dd offset ca_retint16       ;; FFI_TYPE_SMALL_STRUCT_2B
++        dd offset ca_retstruct1b    ;; FFI_TYPE_SMALL_STRUCT_1B
++        dd offset ca_retstruct2b    ;; FFI_TYPE_SMALL_STRUCT_2B
+         dd offset ca_retint         ;; FFI_TYPE_SMALL_STRUCT_4B
++        dd offset ca_epilogue       ;; FFI_TYPE_MS_STRUCT
+ 
+-ca_retint8:
+-        ;; Load %ecx with the pointer to storage for the return value
+-        mov   ecx, rvalue
+-        mov   [ecx + 0], al
+-        jmp   ca_epilogue
++        /* Sign/zero extend as appropriate.  */
++ca_retuint8:
++        movzx eax, al
++        jmp   ca_retint
+ 
+-ca_retint16:
+-        ;; Load %ecx with the pointer to storage for the return value
+-        mov   ecx, rvalue
+-        mov   [ecx + 0], ax
+-        jmp   ca_epilogue
++ca_retsint8:
++        movsx eax, al
++        jmp   ca_retint
++
++ca_retuint16:
++        movzx eax, ax
++        jmp   ca_retint
++
++ca_retsint16:
++        movsx eax, ax
++        jmp   ca_retint
+ 
+ ca_retint:
+         ;; Load %ecx with the pointer to storage for the return value
+         mov   ecx, rvalue
+         mov   [ecx + 0], eax
+         jmp   ca_epilogue
+ 
+ ca_retint64:
+@@ -146,64 +166,94 @@ ca_retdouble:
+         jmp   ca_epilogue
+ 
+ ca_retlongdouble:
+         ;; Load %ecx with the pointer to storage for the return value
+         mov   ecx, rvalue
+         fstp  TBYTE PTR [ecx]
+         jmp   ca_epilogue
+ 
++ca_retstruct1b:
++        ;; Load %ecx with the pointer to storage for the return value
++        mov   ecx, rvalue
++        mov   [ecx + 0], al
++        jmp   ca_epilogue
++
++ca_retstruct2b:
++        ;; Load %ecx with the pointer to storage for the return value
++        mov   ecx, rvalue
++        mov   [ecx + 0], ax
++        jmp   ca_epilogue
++
+ ca_epilogue:
+         ;; Epilogue code is autogenerated.
+         ret
+ ffi_call_win32 ENDP
+ 
++ffi_closure_THISCALL PROC NEAR FORCEFRAME
++	sub	esp, 40
++	lea	edx, [ebp -24]
++	mov	[ebp - 12], edx	/* resp */
++	lea	edx, [ebp + 12]  /* account for stub return address on stack */
++	jmp	stub
++ffi_closure_THISCALL ENDP
++
+ ffi_closure_SYSV PROC NEAR FORCEFRAME
+     ;; the ffi_closure ctx is passed in eax by the trampoline.
+ 
+         sub  esp, 40
+         lea  edx, [ebp - 24]
+         mov  [ebp - 12], edx         ;; resp
+         lea  edx, [ebp + 8]
++stub::
+         mov  [esp + 8], edx          ;; args
+         lea  edx, [ebp - 12]
+         mov  [esp + 4], edx          ;; &resp
+         mov  [esp], eax              ;; closure
+         call ffi_closure_SYSV_inner
+         mov  ecx, [ebp - 12]
+ 
+ cs_jumptable:
+         jmp  [cs_jumpdata + 4 * eax]
+ cs_jumpdata:
+         ;; Do not insert anything here between the label and jump table.
+         dd offset cs_epilogue       ;; FFI_TYPE_VOID
+         dd offset cs_retint         ;; FFI_TYPE_INT
+         dd offset cs_retfloat       ;; FFI_TYPE_FLOAT
+         dd offset cs_retdouble      ;; FFI_TYPE_DOUBLE
+         dd offset cs_retlongdouble  ;; FFI_TYPE_LONGDOUBLE
+-        dd offset cs_retint8        ;; FFI_TYPE_UINT8
+-        dd offset cs_retint8        ;; FFI_TYPE_SINT8
+-        dd offset cs_retint16       ;; FFI_TYPE_UINT16
+-        dd offset cs_retint16       ;; FFI_TYPE_SINT16
++        dd offset cs_retuint8       ;; FFI_TYPE_UINT8
++        dd offset cs_retsint8       ;; FFI_TYPE_SINT8
++        dd offset cs_retuint16      ;; FFI_TYPE_UINT16
++        dd offset cs_retsint16      ;; FFI_TYPE_SINT16
+         dd offset cs_retint         ;; FFI_TYPE_UINT32
+         dd offset cs_retint         ;; FFI_TYPE_SINT32
+         dd offset cs_retint64       ;; FFI_TYPE_UINT64
+         dd offset cs_retint64       ;; FFI_TYPE_SINT64
+         dd offset cs_retstruct      ;; FFI_TYPE_STRUCT
+         dd offset cs_retint         ;; FFI_TYPE_POINTER
+-        dd offset cs_retint8        ;; FFI_TYPE_SMALL_STRUCT_1B
+-        dd offset cs_retint16       ;; FFI_TYPE_SMALL_STRUCT_2B
++        dd offset cs_retsint8       ;; FFI_TYPE_SMALL_STRUCT_1B
++        dd offset cs_retsint16      ;; FFI_TYPE_SMALL_STRUCT_2B
+         dd offset cs_retint         ;; FFI_TYPE_SMALL_STRUCT_4B
++        dd offset cs_retmsstruct    ;; FFI_TYPE_MS_STRUCT
+ 
+-cs_retint8:
+-        mov   al, [ecx]
++cs_retuint8:
++        movzx eax, BYTE PTR [ecx]
+         jmp   cs_epilogue
+ 
+-cs_retint16:
+-        mov   ax, [ecx]
++cs_retsint8:
++        movsx eax, BYTE PTR [ecx]
++        jmp   cs_epilogue
++
++cs_retuint16:
++        movzx eax, WORD PTR [ecx]
++        jmp   cs_epilogue
++
++cs_retsint16:
++        movsx eax, WORD PTR [ecx]
+         jmp   cs_epilogue
+ 
+ cs_retint:
+         mov   eax, [ecx]
+         jmp   cs_epilogue
+ 
+ cs_retint64:
+         mov   eax, [ecx + 0]
+@@ -222,36 +272,52 @@ cs_retlongdouble:
+         fld   TBYTE PTR [ecx]
+         jmp   cs_epilogue
+ 
+ cs_retstruct:
+         ;; Caller expects us to pop struct return value pointer hidden arg.
+         ;; Epilogue code is autogenerated.
+         ret	4
+ 
++cs_retmsstruct:
++        ;; Caller expects us to return a pointer to the real return value.
++        mov   eax, ecx
++        ;; Caller doesn't expects us to pop struct return value pointer hidden arg.
++        jmp   cs_epilogue
++
+ cs_epilogue:
+         ;; Epilogue code is autogenerated.
+         ret
+ ffi_closure_SYSV ENDP
+ 
+ #if !FFI_NO_RAW_API
+ 
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3)
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
+ #define CIF_FLAGS_OFFSET 20
+ 
+-ffi_closure_raw_SYSV PROC NEAR USES esi
++ffi_closure_raw_THISCALL PROC NEAR USES esi FORCEFRAME
++	sub esp, 36
++	mov  esi, [eax + RAW_CLOSURE_CIF_OFFSET]        ;; closure->cif
++	mov  edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET]  ;; closure->user_data
++	mov [esp + 12], edx
++	lea edx, [ebp + 12]
++	jmp stubraw
++ffi_closure_raw_THISCALL ENDP
++
++ffi_closure_raw_SYSV PROC NEAR USES esi FORCEFRAME
+     ;; the ffi_closure ctx is passed in eax by the trampoline.
+ 
+         sub  esp, 40
+         mov  esi, [eax + RAW_CLOSURE_CIF_OFFSET]        ;; closure->cif
+         mov  edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET]  ;; closure->user_data
+         mov  [esp + 12], edx                            ;; user_data
+         lea  edx, [ebp + 8]
++stubraw::
+         mov  [esp + 8], edx                             ;; raw_args
+         lea  edx, [ebp - 24]
+         mov  [esp + 4], edx                             ;; &res
+         mov  [esp], esi                                 ;; cif
+         call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET]   ;; closure->fun
+         mov  eax, [esi + CIF_FLAGS_OFFSET]              ;; cif->flags
+         lea  ecx, [ebp - 24]
+ 
+@@ -259,36 +325,45 @@ cr_jumptable:
+         jmp  [cr_jumpdata + 4 * eax]
+ cr_jumpdata:
+         ;; Do not insert anything here between the label and jump table.
+         dd offset cr_epilogue       ;; FFI_TYPE_VOID
+         dd offset cr_retint         ;; FFI_TYPE_INT
+         dd offset cr_retfloat       ;; FFI_TYPE_FLOAT
+         dd offset cr_retdouble      ;; FFI_TYPE_DOUBLE
+         dd offset cr_retlongdouble  ;; FFI_TYPE_LONGDOUBLE
+-        dd offset cr_retint8        ;; FFI_TYPE_UINT8
+-        dd offset cr_retint8        ;; FFI_TYPE_SINT8
+-        dd offset cr_retint16       ;; FFI_TYPE_UINT16
+-        dd offset cr_retint16       ;; FFI_TYPE_SINT16
++        dd offset cr_retuint8       ;; FFI_TYPE_UINT8
++        dd offset cr_retsint8       ;; FFI_TYPE_SINT8
++        dd offset cr_retuint16      ;; FFI_TYPE_UINT16
++        dd offset cr_retsint16      ;; FFI_TYPE_SINT16
+         dd offset cr_retint         ;; FFI_TYPE_UINT32
+         dd offset cr_retint         ;; FFI_TYPE_SINT32
+         dd offset cr_retint64       ;; FFI_TYPE_UINT64
+         dd offset cr_retint64       ;; FFI_TYPE_SINT64
+         dd offset cr_epilogue       ;; FFI_TYPE_STRUCT
+         dd offset cr_retint         ;; FFI_TYPE_POINTER
+-        dd offset cr_retint8        ;; FFI_TYPE_SMALL_STRUCT_1B
+-        dd offset cr_retint16       ;; FFI_TYPE_SMALL_STRUCT_2B
++        dd offset cr_retsint8       ;; FFI_TYPE_SMALL_STRUCT_1B
++        dd offset cr_retsint16      ;; FFI_TYPE_SMALL_STRUCT_2B
+         dd offset cr_retint         ;; FFI_TYPE_SMALL_STRUCT_4B
++        dd offset cr_epilogue       ;; FFI_TYPE_MS_STRUCT
+ 
+-cr_retint8:
+-        mov   al, [ecx]
++cr_retuint8:
++        movzx eax, BYTE PTR [ecx]
+         jmp   cr_epilogue
+ 
+-cr_retint16:
+-        mov   ax, [ecx]
++cr_retsint8:
++        movsx eax, BYTE PTR [ecx]
++        jmp   cr_epilogue
++
++cr_retuint16:
++        movzx eax, WORD PTR [ecx]
++        jmp   cr_epilogue
++
++cr_retsint16:
++        movsx eax, WORD PTR [ecx]
+         jmp   cr_epilogue
+ 
+ cr_retint:
+         mov   eax, [ecx]
+         jmp   cr_epilogue
+ 
+ cr_retint64:
+         mov   eax, [ecx + 0]
+@@ -332,36 +407,44 @@ cd_jumptable:
+         jmp  [cd_jumpdata + 4 * eax]
+ cd_jumpdata:
+         ;; Do not insert anything here between the label and jump table.
+         dd offset cd_epilogue       ;; FFI_TYPE_VOID
+         dd offset cd_retint         ;; FFI_TYPE_INT
+         dd offset cd_retfloat       ;; FFI_TYPE_FLOAT
+         dd offset cd_retdouble      ;; FFI_TYPE_DOUBLE
+         dd offset cd_retlongdouble  ;; FFI_TYPE_LONGDOUBLE
+-        dd offset cd_retint8        ;; FFI_TYPE_UINT8
+-        dd offset cd_retint8        ;; FFI_TYPE_SINT8
+-        dd offset cd_retint16       ;; FFI_TYPE_UINT16
+-        dd offset cd_retint16       ;; FFI_TYPE_SINT16
++        dd offset cd_retuint8       ;; FFI_TYPE_UINT8
++        dd offset cd_retsint8       ;; FFI_TYPE_SINT8
++        dd offset cd_retuint16      ;; FFI_TYPE_UINT16
++        dd offset cd_retsint16      ;; FFI_TYPE_SINT16
+         dd offset cd_retint         ;; FFI_TYPE_UINT32
+         dd offset cd_retint         ;; FFI_TYPE_SINT32
+         dd offset cd_retint64       ;; FFI_TYPE_UINT64
+         dd offset cd_retint64       ;; FFI_TYPE_SINT64
+         dd offset cd_epilogue       ;; FFI_TYPE_STRUCT
+         dd offset cd_retint         ;; FFI_TYPE_POINTER
+-        dd offset cd_retint8        ;; FFI_TYPE_SMALL_STRUCT_1B
+-        dd offset cd_retint16       ;; FFI_TYPE_SMALL_STRUCT_2B
++        dd offset cd_retsint8       ;; FFI_TYPE_SMALL_STRUCT_1B
++        dd offset cd_retsint16      ;; FFI_TYPE_SMALL_STRUCT_2B
+         dd offset cd_retint         ;; FFI_TYPE_SMALL_STRUCT_4B
+ 
+-cd_retint8:
+-        mov   al, [ecx]
++cd_retuint8:
++        movzx eax, BYTE PTR [ecx]
+         jmp   cd_epilogue
+ 
+-cd_retint16:
+-        mov   ax, [ecx]
++cd_retsint8:
++        movsx eax, BYTE PTR [ecx]
++        jmp   cd_epilogue
++
++cd_retuint16:
++        movzx eax, WORD PTR [ecx]
++        jmp   cd_epilogue
++
++cd_retsint16:
++        movsx eax, WORD PTR [ecx]
+         jmp   cd_epilogue
+ 
+ cd_retint:
+         mov   eax, [ecx]
+         jmp   cd_epilogue
+ 
+ cd_retint64:
+         mov   eax, [ecx + 0]
+@@ -385,94 +468,117 @@ cd_epilogue:
+         ret
+ ffi_closure_STDCALL ENDP
+ 
+ _TEXT ENDS
+ END
+ 
+ #else
+ 
++#if defined(SYMBOL_UNDERSCORE)
++#define USCORE_SYMBOL(x) _##x
++#else
++#define USCORE_SYMBOL(x) x
++#endif
+ 	.text
+  
+         # This assumes we are using gas.
+         .balign 16
+-	.globl	_ffi_call_win32
+-#ifndef __OS2__
++FFI_HIDDEN(ffi_call_win32)
++	.globl	USCORE_SYMBOL(ffi_call_win32)
++#if defined(X86_WIN32) && !defined(__OS2__)
+ 	.def	_ffi_call_win32;	.scl	2;	.type	32;	.endef
+ #endif
+-_ffi_call_win32:
++USCORE_SYMBOL(ffi_call_win32):
+ .LFB1:
+         pushl %ebp
+ .LCFI0:
+         movl  %esp,%ebp
+ .LCFI1:
+         # Make room for all of the new args.
+-        movl  16(%ebp),%ecx                                                     
++        movl  20(%ebp),%ecx                                                     
+         subl  %ecx,%esp
+  
+         movl  %esp,%eax
+  
+         # Place all of the ffi_prep_args in position
+         pushl 12(%ebp)
+         pushl %eax
+         call  *8(%ebp)
+  
+         # Return stack to previous state and call the function
+         addl  $8,%esp
+- 
++
++	# Handle fastcall and thiscall
++	cmpl $3, 16(%ebp)  # FFI_THISCALL
++	jz .do_thiscall
++	cmpl $4, 16(%ebp) # FFI_FASTCALL
++	jnz .do_fncall
++	movl (%esp), %ecx
++	movl 4(%esp), %edx
++	addl $8, %esp
++	jmp .do_fncall
++.do_thiscall:
++	movl (%esp), %ecx
++	addl $4, %esp
++
++.do_fncall:
++	 
+         # FIXME: Align the stack to a 128-bit boundary to avoid
+         # potential performance hits.
+ 
+-        call  *28(%ebp)
++        call  *32(%ebp)
+  
+         # stdcall functions pop arguments off the stack themselves
+ 
+         # Load %ecx with the return type code
+-        movl  20(%ebp),%ecx
++        movl  24(%ebp),%ecx
+  
+         # If the return value pointer is NULL, assume no return value.
+-        cmpl  $0,24(%ebp)
++        cmpl  $0,28(%ebp)
+         jne   0f
+  
+         # Even if there is no space for the return value, we are
+         # obliged to handle floating-point values.
+         cmpl  $FFI_TYPE_FLOAT,%ecx
+         jne   .Lnoretval
+         fstp  %st(0)
+  
+         jmp   .Lepilogue
+ 
+ 0:
+ 	call	1f
+ 	# Do not insert anything here between the call and the jump table.
+ .Lstore_table:
+-	.long	.Lnoretval		/* FFI_TYPE_VOID */
+-	.long	.Lretint		/* FFI_TYPE_INT */
+-	.long	.Lretfloat		/* FFI_TYPE_FLOAT */
+-	.long	.Lretdouble		/* FFI_TYPE_DOUBLE */
+-	.long	.Lretlongdouble		/* FFI_TYPE_LONGDOUBLE */
+-	.long	.Lretuint8		/* FFI_TYPE_UINT8 */
+-	.long	.Lretsint8		/* FFI_TYPE_SINT8 */
+-	.long	.Lretuint16		/* FFI_TYPE_UINT16 */
+-	.long	.Lretsint16		/* FFI_TYPE_SINT16 */
+-	.long	.Lretint		/* FFI_TYPE_UINT32 */
+-	.long	.Lretint		/* FFI_TYPE_SINT32 */
+-	.long	.Lretint64		/* FFI_TYPE_UINT64 */
+-	.long	.Lretint64		/* FFI_TYPE_SINT64 */
+-	.long	.Lretstruct		/* FFI_TYPE_STRUCT */
+-	.long	.Lretint		/* FFI_TYPE_POINTER */
+-	.long	.Lretstruct1b		/* FFI_TYPE_SMALL_STRUCT_1B */
+-	.long	.Lretstruct2b		/* FFI_TYPE_SMALL_STRUCT_2B */
+-	.long	.Lretstruct4b		/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lnoretval-.Lstore_table	/* FFI_TYPE_VOID */
++	.long	.Lretint-.Lstore_table		/* FFI_TYPE_INT */
++	.long	.Lretfloat-.Lstore_table	/* FFI_TYPE_FLOAT */
++	.long	.Lretdouble-.Lstore_table	/* FFI_TYPE_DOUBLE */
++	.long	.Lretlongdouble-.Lstore_table	/* FFI_TYPE_LONGDOUBLE */
++	.long	.Lretuint8-.Lstore_table	/* FFI_TYPE_UINT8 */
++	.long	.Lretsint8-.Lstore_table	/* FFI_TYPE_SINT8 */
++	.long	.Lretuint16-.Lstore_table	/* FFI_TYPE_UINT16 */
++	.long	.Lretsint16-.Lstore_table	/* FFI_TYPE_SINT16 */
++	.long	.Lretint-.Lstore_table		/* FFI_TYPE_UINT32 */
++	.long	.Lretint-.Lstore_table		/* FFI_TYPE_SINT32 */
++	.long	.Lretint64-.Lstore_table	/* FFI_TYPE_UINT64 */
++	.long	.Lretint64-.Lstore_table	/* FFI_TYPE_SINT64 */
++	.long	.Lretstruct-.Lstore_table	/* FFI_TYPE_STRUCT */
++	.long	.Lretint-.Lstore_table		/* FFI_TYPE_POINTER */
++	.long	.Lretstruct1b-.Lstore_table	/* FFI_TYPE_SMALL_STRUCT_1B */
++	.long	.Lretstruct2b-.Lstore_table	/* FFI_TYPE_SMALL_STRUCT_2B */
++	.long	.Lretstruct4b-.Lstore_table	/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lretstruct-.Lstore_table	/* FFI_TYPE_MS_STRUCT */
+ 1:
+-	add	%ecx, %ecx
+-	add	%ecx, %ecx
++	shl	$2, %ecx
++	add	(%esp),%ecx
++	mov	(%ecx),%ecx
+ 	add	(%esp),%ecx
+ 	add	$4, %esp
+-	jmp	*(%ecx)
++	jmp	*%ecx
+ 
+ 	/* Sign/zero extend as appropriate.  */
+ .Lretsint8:
+ 	movsbl	%al, %eax
+ 	jmp	.Lretint
+ 
+ .Lretsint16:
+ 	movswl	%ax, %eax
+@@ -483,125 +589,156 @@ 1:
+ 	jmp	.Lretint
+ 
+ .Lretuint16:
+ 	movzwl	%ax, %eax
+ 	jmp	.Lretint
+ 
+ .Lretint:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         movl  %eax,0(%ecx)
+         jmp   .Lepilogue
+  
+ .Lretfloat:
+          # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         fstps (%ecx)
+         jmp   .Lepilogue
+  
+ .Lretdouble:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         fstpl (%ecx)
+         jmp   .Lepilogue
+  
+ .Lretlongdouble:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         fstpt (%ecx)
+         jmp   .Lepilogue
+  
+ .Lretint64:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         movl  %eax,0(%ecx)
+         movl  %edx,4(%ecx)
+ 	jmp   .Lepilogue
+ 
+ .Lretstruct1b:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         movb  %al,0(%ecx)
+         jmp   .Lepilogue
+  
+ .Lretstruct2b:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         movw  %ax,0(%ecx)
+         jmp   .Lepilogue
+ 
+ .Lretstruct4b:
+         # Load %ecx with the pointer to storage for the return value
+-        movl  24(%ebp),%ecx
++        movl  28(%ebp),%ecx
+         movl  %eax,0(%ecx)
+         jmp   .Lepilogue
+ 
+ .Lretstruct:
+         # Nothing to do!
+  
+ .Lnoretval:
+ .Lepilogue:
+         movl %ebp,%esp
+         popl %ebp
+         ret
+ .ffi_call_win32_end:
++        .balign 16
++FFI_HIDDEN(ffi_closure_THISCALL)
++	.globl	USCORE_SYMBOL(ffi_closure_THISCALL)
++#if defined(X86_WIN32) && !defined(__OS2__)
++	.def	_ffi_closure_THISCALL;	.scl	2;	.type	32;	.endef
++#endif
++USCORE_SYMBOL(ffi_closure_THISCALL):
++	pushl	%ebp
++	movl	%esp, %ebp
++	subl	$40, %esp
++	leal	-24(%ebp), %edx
++	movl	%edx, -12(%ebp)	/* resp */
++	leal	12(%ebp), %edx  /* account for stub return address on stack */
++	jmp	.stub
+ .LFE1:
+ 
+         # This assumes we are using gas.
+         .balign 16
+-	.globl	_ffi_closure_SYSV
+-#ifndef __OS2__
++FFI_HIDDEN(ffi_closure_SYSV)
++#if defined(X86_WIN32)
++	.globl	USCORE_SYMBOL(ffi_closure_SYSV)
++#if defined(X86_WIN32) && !defined(__OS2__)
+ 	.def	_ffi_closure_SYSV;	.scl	2;	.type	32;	.endef
+ #endif
+-_ffi_closure_SYSV:
++USCORE_SYMBOL(ffi_closure_SYSV):
++#endif
+ .LFB3:
+ 	pushl	%ebp
+ .LCFI4:
+ 	movl	%esp, %ebp
+ .LCFI5:
+ 	subl	$40, %esp
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, -12(%ebp)	/* resp */
+ 	leal	8(%ebp), %edx
++.stub:
+ 	movl	%edx, 4(%esp)	/* args = __builtin_dwarf_cfa () */
+ 	leal	-12(%ebp), %edx
+ 	movl	%edx, (%esp)	/* &resp */
+-	call	_ffi_closure_SYSV_inner
++#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__)
++	call	USCORE_SYMBOL(ffi_closure_SYSV_inner)
++#elif defined(X86_DARWIN)
++	calll	L_ffi_closure_SYSV_inner$stub
++#else
++	movl	%ebx, 8(%esp)
++	call	1f
++1:	popl	%ebx
++	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
++	call	ffi_closure_SYSV_inner@PLT
++	movl	8(%esp), %ebx
++#endif
+ 	movl	-12(%ebp), %ecx
+ 
+ 0:
+ 	call	1f
+ 	# Do not insert anything here between the call and the jump table.
+ .Lcls_store_table:
+-	.long	.Lcls_noretval		/* FFI_TYPE_VOID */
+-	.long	.Lcls_retint		/* FFI_TYPE_INT */
+-	.long	.Lcls_retfloat		/* FFI_TYPE_FLOAT */
+-	.long	.Lcls_retdouble		/* FFI_TYPE_DOUBLE */
+-	.long	.Lcls_retldouble	/* FFI_TYPE_LONGDOUBLE */
+-	.long	.Lcls_retuint8		/* FFI_TYPE_UINT8 */
+-	.long	.Lcls_retsint8		/* FFI_TYPE_SINT8 */
+-	.long	.Lcls_retuint16		/* FFI_TYPE_UINT16 */
+-	.long	.Lcls_retsint16		/* FFI_TYPE_SINT16 */
+-	.long	.Lcls_retint		/* FFI_TYPE_UINT32 */
+-	.long	.Lcls_retint		/* FFI_TYPE_SINT32 */
+-	.long	.Lcls_retllong		/* FFI_TYPE_UINT64 */
+-	.long	.Lcls_retllong		/* FFI_TYPE_SINT64 */
+-	.long	.Lcls_retstruct		/* FFI_TYPE_STRUCT */
+-	.long	.Lcls_retint		/* FFI_TYPE_POINTER */
+-	.long	.Lcls_retstruct1	/* FFI_TYPE_SMALL_STRUCT_1B */
+-	.long	.Lcls_retstruct2	/* FFI_TYPE_SMALL_STRUCT_2B */
+-	.long	.Lcls_retstruct4	/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lcls_noretval-.Lcls_store_table	/* FFI_TYPE_VOID */
++	.long	.Lcls_retint-.Lcls_store_table		/* FFI_TYPE_INT */
++	.long	.Lcls_retfloat-.Lcls_store_table	/* FFI_TYPE_FLOAT */
++	.long	.Lcls_retdouble-.Lcls_store_table	/* FFI_TYPE_DOUBLE */
++	.long	.Lcls_retldouble-.Lcls_store_table	/* FFI_TYPE_LONGDOUBLE */
++	.long	.Lcls_retuint8-.Lcls_store_table	/* FFI_TYPE_UINT8 */
++	.long	.Lcls_retsint8-.Lcls_store_table	/* FFI_TYPE_SINT8 */
++	.long	.Lcls_retuint16-.Lcls_store_table	/* FFI_TYPE_UINT16 */
++	.long	.Lcls_retsint16-.Lcls_store_table	/* FFI_TYPE_SINT16 */
++	.long	.Lcls_retint-.Lcls_store_table		/* FFI_TYPE_UINT32 */
++	.long	.Lcls_retint-.Lcls_store_table		/* FFI_TYPE_SINT32 */
++	.long	.Lcls_retllong-.Lcls_store_table	/* FFI_TYPE_UINT64 */
++	.long	.Lcls_retllong-.Lcls_store_table	/* FFI_TYPE_SINT64 */
++	.long	.Lcls_retstruct-.Lcls_store_table	/* FFI_TYPE_STRUCT */
++	.long	.Lcls_retint-.Lcls_store_table		/* FFI_TYPE_POINTER */
++	.long	.Lcls_retstruct1-.Lcls_store_table	/* FFI_TYPE_SMALL_STRUCT_1B */
++	.long	.Lcls_retstruct2-.Lcls_store_table	/* FFI_TYPE_SMALL_STRUCT_2B */
++	.long	.Lcls_retstruct4-.Lcls_store_table	/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lcls_retmsstruct-.Lcls_store_table	/* FFI_TYPE_MS_STRUCT */
+ 
+ 1:
+-	add	%eax, %eax
+-	add	%eax, %eax
++	shl	$2, %eax
++	add	(%esp),%eax
++	mov	(%eax),%eax
+ 	add	(%esp),%eax
+ 	add	$4, %esp
+-	jmp	*(%eax)
++	jmp	*%eax
+ 
+ 	/* Sign/zero extend as appropriate.  */
+ .Lcls_retsint8:
+ 	movsbl	(%ecx), %eax
+ 	jmp	.Lcls_epilogue
+ 
+ .Lcls_retsint16:
+ 	movswl	(%ecx), %eax
+@@ -649,84 +786,110 @@ 1:
+ 	jmp	.Lcls_epilogue
+ 
+ .Lcls_retstruct:
+         # Caller expects us to pop struct return value pointer hidden arg.
+ 	movl	%ebp, %esp
+ 	popl	%ebp
+ 	ret	$0x4
+ 
++.Lcls_retmsstruct:
++	# Caller expects us to return a pointer to the real return value.
++	mov	%ecx, %eax
++	# Caller doesn't expects us to pop struct return value pointer hidden arg.
++	jmp	.Lcls_epilogue
++
+ .Lcls_noretval:
+ .Lcls_epilogue:
+ 	movl	%ebp, %esp
+ 	popl	%ebp
+ 	ret
+ .ffi_closure_SYSV_end:
+ .LFE3:
+ 
+ #if !FFI_NO_RAW_API
+ 
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
+ #define CIF_FLAGS_OFFSET 20
+-
++        .balign 16
++FFI_HIDDEN(ffi_closure_raw_THISCALL)
++	.globl	USCORE_SYMBOL(ffi_closure_raw_THISCALL)
++#if defined(X86_WIN32) && !defined(__OS2__)
++	.def	_ffi_closure_raw_THISCALL;	.scl	2;	.type	32;	.endef
++#endif
++USCORE_SYMBOL(ffi_closure_raw_THISCALL):
++	pushl	%ebp
++	movl	%esp, %ebp
++	pushl	%esi
++	subl	$36, %esp
++	movl	RAW_CLOSURE_CIF_OFFSET(%eax), %esi	 /* closure->cif */
++	movl	RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
++	movl	%edx, 12(%esp)	/* user_data */
++	leal	12(%ebp), %edx	/* __builtin_dwarf_cfa () */
++	jmp	.stubraw
+         # This assumes we are using gas.
+         .balign 16
+-	.globl	_ffi_closure_raw_SYSV
+-#ifndef __OS2__
++#if defined(X86_WIN32)
++	.globl	USCORE_SYMBOL(ffi_closure_raw_SYSV)
++#if defined(X86_WIN32) && !defined(__OS2__)
+ 	.def	_ffi_closure_raw_SYSV;	.scl	2;	.type	32;	.endef
+ #endif
+-_ffi_closure_raw_SYSV:
++USCORE_SYMBOL(ffi_closure_raw_SYSV):
++#endif /* defined(X86_WIN32) */
+ .LFB4:
+ 	pushl	%ebp
+ .LCFI6:
+ 	movl	%esp, %ebp
+ .LCFI7:
+ 	pushl	%esi
+ .LCFI8:
+ 	subl	$36, %esp
+ 	movl	RAW_CLOSURE_CIF_OFFSET(%eax), %esi	 /* closure->cif */
+ 	movl	RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
+ 	movl	%edx, 12(%esp)	/* user_data */
+ 	leal	8(%ebp), %edx	/* __builtin_dwarf_cfa () */
++.stubraw:
+ 	movl	%edx, 8(%esp)	/* raw_args */
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, 4(%esp)	/* &res */
+ 	movl	%esi, (%esp)	/* cif */
+ 	call	*RAW_CLOSURE_FUN_OFFSET(%eax)		 /* closure->fun */
+ 	movl	CIF_FLAGS_OFFSET(%esi), %eax		 /* rtype */
+ 0:
+ 	call	1f
+ 	# Do not insert anything here between the call and the jump table.
+ .Lrcls_store_table:
+-	.long	.Lrcls_noretval		/* FFI_TYPE_VOID */
+-	.long	.Lrcls_retint		/* FFI_TYPE_INT */
+-	.long	.Lrcls_retfloat		/* FFI_TYPE_FLOAT */
+-	.long	.Lrcls_retdouble	/* FFI_TYPE_DOUBLE */
+-	.long	.Lrcls_retldouble	/* FFI_TYPE_LONGDOUBLE */
+-	.long	.Lrcls_retuint8		/* FFI_TYPE_UINT8 */
+-	.long	.Lrcls_retsint8		/* FFI_TYPE_SINT8 */
+-	.long	.Lrcls_retuint16	/* FFI_TYPE_UINT16 */
+-	.long	.Lrcls_retsint16	/* FFI_TYPE_SINT16 */
+-	.long	.Lrcls_retint		/* FFI_TYPE_UINT32 */
+-	.long	.Lrcls_retint		/* FFI_TYPE_SINT32 */
+-	.long	.Lrcls_retllong		/* FFI_TYPE_UINT64 */
+-	.long	.Lrcls_retllong		/* FFI_TYPE_SINT64 */
+-	.long	.Lrcls_retstruct	/* FFI_TYPE_STRUCT */
+-	.long	.Lrcls_retint		/* FFI_TYPE_POINTER */
+-	.long	.Lrcls_retstruct1	/* FFI_TYPE_SMALL_STRUCT_1B */
+-	.long	.Lrcls_retstruct2	/* FFI_TYPE_SMALL_STRUCT_2B */
+-	.long	.Lrcls_retstruct4	/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lrcls_noretval-.Lrcls_store_table	/* FFI_TYPE_VOID */
++	.long	.Lrcls_retint-.Lrcls_store_table	/* FFI_TYPE_INT */
++	.long	.Lrcls_retfloat-.Lrcls_store_table	/* FFI_TYPE_FLOAT */
++	.long	.Lrcls_retdouble-.Lrcls_store_table	/* FFI_TYPE_DOUBLE */
++	.long	.Lrcls_retldouble-.Lrcls_store_table	/* FFI_TYPE_LONGDOUBLE */
++	.long	.Lrcls_retuint8-.Lrcls_store_table	/* FFI_TYPE_UINT8 */
++	.long	.Lrcls_retsint8-.Lrcls_store_table	/* FFI_TYPE_SINT8 */
++	.long	.Lrcls_retuint16-.Lrcls_store_table	/* FFI_TYPE_UINT16 */
++	.long	.Lrcls_retsint16-.Lrcls_store_table	/* FFI_TYPE_SINT16 */
++	.long	.Lrcls_retint-.Lrcls_store_table	/* FFI_TYPE_UINT32 */
++	.long	.Lrcls_retint-.Lrcls_store_table	/* FFI_TYPE_SINT32 */
++	.long	.Lrcls_retllong-.Lrcls_store_table	/* FFI_TYPE_UINT64 */
++	.long	.Lrcls_retllong-.Lrcls_store_table	/* FFI_TYPE_SINT64 */
++	.long	.Lrcls_retstruct-.Lrcls_store_table	/* FFI_TYPE_STRUCT */
++	.long	.Lrcls_retint-.Lrcls_store_table	/* FFI_TYPE_POINTER */
++	.long	.Lrcls_retstruct1-.Lrcls_store_table	/* FFI_TYPE_SMALL_STRUCT_1B */
++	.long	.Lrcls_retstruct2-.Lrcls_store_table	/* FFI_TYPE_SMALL_STRUCT_2B */
++	.long	.Lrcls_retstruct4-.Lrcls_store_table	/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lrcls_retstruct-.Lrcls_store_table	/* FFI_TYPE_MS_STRUCT */
+ 1:
+-	add	%eax, %eax
+-	add	%eax, %eax
++	shl	$2, %eax
++	add	(%esp),%eax
++	mov	(%eax),%eax
+ 	add	(%esp),%eax
+ 	add	$4, %esp
+-	jmp	*(%eax)
++	jmp	*%eax
+ 
+ 	/* Sign/zero extend as appropriate.  */
+ .Lrcls_retsint8:
+ 	movsbl	-24(%ebp), %eax
+ 	jmp	.Lrcls_epilogue
+ 
+ .Lrcls_retsint16:
+ 	movswl	-24(%ebp), %eax
+@@ -784,63 +947,76 @@ 1:
+ 	ret
+ .ffi_closure_raw_SYSV_end:
+ .LFE4:
+ 
+ #endif /* !FFI_NO_RAW_API */
+ 
+         # This assumes we are using gas.
+ 	.balign	16
+-	.globl	_ffi_closure_STDCALL
+-#ifndef __OS2__
++FFI_HIDDEN(ffi_closure_STDCALL)
++	.globl	USCORE_SYMBOL(ffi_closure_STDCALL)
++#if defined(X86_WIN32) && !defined(__OS2__)
+ 	.def	_ffi_closure_STDCALL;	.scl	2;	.type	32;	.endef
+ #endif
+-_ffi_closure_STDCALL:
++USCORE_SYMBOL(ffi_closure_STDCALL):
+ .LFB5:
+ 	pushl	%ebp
+ .LCFI9:
+ 	movl	%esp, %ebp
+ .LCFI10:
+ 	subl	$40, %esp
+ 	leal	-24(%ebp), %edx
+ 	movl	%edx, -12(%ebp)	/* resp */
+ 	leal	12(%ebp), %edx  /* account for stub return address on stack */
+ 	movl	%edx, 4(%esp)	/* args */
+ 	leal	-12(%ebp), %edx
+ 	movl	%edx, (%esp)	/* &resp */
+-	call	_ffi_closure_SYSV_inner
++#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__)
++	call	USCORE_SYMBOL(ffi_closure_SYSV_inner)
++#elif defined(X86_DARWIN)
++	calll	L_ffi_closure_SYSV_inner$stub
++#else
++	movl	%ebx, 8(%esp)
++	call	1f
++1:	popl	%ebx
++	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
++	call	ffi_closure_SYSV_inner@PLT
++	movl	8(%esp), %ebx
++#endif
+ 	movl	-12(%ebp), %ecx
+ 0:
+ 	call	1f
+ 	# Do not insert anything here between the call and the jump table.
+ .Lscls_store_table:
+-	.long	.Lscls_noretval		/* FFI_TYPE_VOID */
+-	.long	.Lscls_retint		/* FFI_TYPE_INT */
+-	.long	.Lscls_retfloat		/* FFI_TYPE_FLOAT */
+-	.long	.Lscls_retdouble	/* FFI_TYPE_DOUBLE */
+-	.long	.Lscls_retldouble	/* FFI_TYPE_LONGDOUBLE */
+-	.long	.Lscls_retuint8		/* FFI_TYPE_UINT8 */
+-	.long	.Lscls_retsint8		/* FFI_TYPE_SINT8 */
+-	.long	.Lscls_retuint16	/* FFI_TYPE_UINT16 */
+-	.long	.Lscls_retsint16	/* FFI_TYPE_SINT16 */
+-	.long	.Lscls_retint		/* FFI_TYPE_UINT32 */
+-	.long	.Lscls_retint		/* FFI_TYPE_SINT32 */
+-	.long	.Lscls_retllong		/* FFI_TYPE_UINT64 */
+-	.long	.Lscls_retllong		/* FFI_TYPE_SINT64 */
+-	.long	.Lscls_retstruct	/* FFI_TYPE_STRUCT */
+-	.long	.Lscls_retint		/* FFI_TYPE_POINTER */
+-	.long	.Lscls_retstruct1	/* FFI_TYPE_SMALL_STRUCT_1B */
+-	.long	.Lscls_retstruct2	/* FFI_TYPE_SMALL_STRUCT_2B */
+-	.long	.Lscls_retstruct4	/* FFI_TYPE_SMALL_STRUCT_4B */
++	.long	.Lscls_noretval-.Lscls_store_table	/* FFI_TYPE_VOID */
++	.long	.Lscls_retint-.Lscls_store_table	/* FFI_TYPE_INT */
++	.long	.Lscls_retfloat-.Lscls_store_table	/* FFI_TYPE_FLOAT */
++	.long	.Lscls_retdouble-.Lscls_store_table	/* FFI_TYPE_DOUBLE */
++	.long	.Lscls_retldouble-.Lscls_store_table	/* FFI_TYPE_LONGDOUBLE */
++	.long	.Lscls_retuint8-.Lscls_store_table	/* FFI_TYPE_UINT8 */
++	.long	.Lscls_retsint8-.Lscls_store_table	/* FFI_TYPE_SINT8 */
++	.long	.Lscls_retuint16-.Lscls_store_table	/* FFI_TYPE_UINT16 */
++	.long	.Lscls_retsint16-.Lscls_store_table	/* FFI_TYPE_SINT16 */
++	.long	.Lscls_retint-.Lscls_store_table	/* FFI_TYPE_UINT32 */
++	.long	.Lscls_retint-.Lscls_store_table	/* FFI_TYPE_SINT32 */
++	.long	.Lscls_retllong-.Lscls_store_table	/* FFI_TYPE_UINT64 */
++	.long	.Lscls_retllong-.Lscls_store_table	/* FFI_TYPE_SINT64 */
++	.long	.Lscls_retstruct-.Lscls_store_table	/* FFI_TYPE_STRUCT */
++	.long	.Lscls_retint-.Lscls_store_table	/* FFI_TYPE_POINTER */
++	.long	.Lscls_retstruct1-.Lscls_store_table	/* FFI_TYPE_SMALL_STRUCT_1B */
++	.long	.Lscls_retstruct2-.Lscls_store_table	/* FFI_TYPE_SMALL_STRUCT_2B */
++	.long	.Lscls_retstruct4-.Lscls_store_table	/* FFI_TYPE_SMALL_STRUCT_4B */
+ 1:
+-	add	%eax, %eax
+-	add	%eax, %eax
++	shl	$2, %eax
++	add	(%esp),%eax
++	mov	(%eax),%eax
+ 	add	(%esp),%eax
+ 	add	$4, %esp
+-	jmp	*(%eax)
++	jmp	*%eax
+ 
+ 	/* Sign/zero extend as appropriate.  */
+ .Lscls_retsint8:
+ 	movsbl	(%ecx), %eax
+ 	jmp	.Lscls_epilogue
+ 
+ .Lscls_retsint16:
+ 	movswl	(%ecx), %eax
+@@ -893,17 +1069,24 @@ 1:
+ .Lscls_noretval:
+ .Lscls_epilogue:
+ 	movl	%ebp, %esp
+ 	popl	%ebp
+ 	ret
+ .ffi_closure_STDCALL_end:
+ .LFE5:
+ 
+-#ifndef __OS2__
++#if defined(X86_DARWIN)
++.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
++L_ffi_closure_SYSV_inner$stub:
++	.indirect_symbol _ffi_closure_SYSV_inner
++	hlt ; hlt ; hlt ; hlt ; hlt
++#endif
++
++#if defined(X86_WIN32) && !defined(__OS2__)
+ 	.section	.eh_frame,"w"
+ #endif
+ .Lframe1:
+ .LSCIE1:
+ 	.long	.LECIE1-.LASCIE1  /* Length of Common Information Entry */
+ .LASCIE1:
+ 	.long	0x0	/* CIE Identifier Tag */
+ 	.byte	0x1	/* CIE Version */
+@@ -953,17 +1136,16 @@ 1:
+ 	.long	.LCFI1-.LCFI0
+ 	.byte	0xd	/* DW_CFA_def_cfa_register CFA = r5 = %ebp */
+ 	.byte	0x5	/* .uleb128 0x5 */
+ 
+ 	/* End of DW_CFA_xxx CFI instructions.  */
+ 	.align 4
+ .LEFDE1:
+ 
+-
+ .LSFDE3:
+ 	.long	.LEFDE3-.LASFDE3	/* FDE Length */
+ .LASFDE3:
+ 	.long	.LASFDE3-.Lframe1	/* FDE CIE offset */
+ #if defined __PIC__ && defined HAVE_AS_X86_PCREL
+ 	.long	.LFB3-.	/* FDE initial location */
+ #else
+ 	.long	.LFB3
+diff --git a/js/src/ctypes/libffi/src/xtensa/ffi.c b/js/src/ctypes/libffi/src/xtensa/ffi.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/xtensa/ffi.c
+@@ -0,0 +1,298 @@
++/* -----------------------------------------------------------------------
++   ffi.c - Copyright (c) 2013 Tensilica, Inc.
++
++   XTENSA Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++/*
++                                 |----------------------------------------|
++                                 |                                        |
++    on entry to ffi_call ---->   |----------------------------------------|
++                                 | caller stack frame for registers a0-a3 |
++                                 |----------------------------------------|
++                                 |                                        |
++                                 |         additional arguments           |
++    entry of the function --->   |----------------------------------------|
++                                 |    copy of function arguments a2-a7    |
++                                 | -  -  -  -  -  -  -  -  -  -  -  -  -  |
++                                 |                                        |
++
++    The area below the entry line becomes the new stack frame for the function.
++
++*/
++
++
++#define FFI_TYPE_STRUCT_REGS FFI_TYPE_LAST
++
++
++extern void ffi_call_SYSV(void *rvalue, unsigned rsize, unsigned flags,
++			  void(*fn)(void), unsigned nbytes, extended_cif*);
++extern void ffi_closure_SYSV(void) FFI_HIDDEN;
++
++ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
++{
++  switch(cif->rtype->type) {
++    case FFI_TYPE_SINT8:
++    case FFI_TYPE_UINT8:
++    case FFI_TYPE_SINT16:
++    case FFI_TYPE_UINT16:
++      cif->flags = cif->rtype->type;
++      break;
++    case FFI_TYPE_VOID:
++    case FFI_TYPE_FLOAT:
++      cif->flags = FFI_TYPE_UINT32;
++      break;
++    case FFI_TYPE_DOUBLE:
++    case FFI_TYPE_UINT64:
++    case FFI_TYPE_SINT64:
++      cif->flags = FFI_TYPE_UINT64; // cif->rtype->type;
++      break;
++    case FFI_TYPE_STRUCT:
++      cif->flags = FFI_TYPE_STRUCT; //_REGS;
++      /* Up to 16 bytes are returned in registers */
++      if (cif->rtype->size > 4 * 4) {
++        /* returned structure is referenced by a register; use 8 bytes
++           (including 4 bytes for potential additional alignment) */
++        cif->flags = FFI_TYPE_STRUCT;	
++        cif->bytes += 8;
++      }
++      break;
++
++    default:
++      cif->flags = FFI_TYPE_UINT32;
++      break;
++  }
++
++  /* Round the stack up to a full 4 register frame, just in case
++     (we use this size in movsp). This way, it's also a  multiple of
++     8 bytes for 64-bit arguments.  */
++  cif->bytes = ALIGN(cif->bytes, 16);
++
++  return FFI_OK;
++}
++
++void ffi_prep_args(extended_cif *ecif, unsigned char* stack)
++{
++  unsigned int i;
++  unsigned long *addr;
++  ffi_type **ptr;
++
++  union {
++    void **v;
++    char **c;
++    signed char **sc;
++    unsigned char **uc;
++    signed short **ss;
++    unsigned short **us;
++    unsigned int **i;
++    long long **ll;
++    float **f;
++    double **d;
++  } p_argv;
++
++  /* Verify that everything is aligned up properly */
++  FFI_ASSERT (((unsigned long) stack & 0x7) == 0);
++
++  p_argv.v = ecif->avalue;
++  addr = (unsigned long*)stack;
++
++  /* structures with a size greater than 16 bytes are passed in memory */
++  if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && ecif->cif->rtype->size > 16)
++  {
++    *addr++ = (unsigned long)ecif->rvalue;
++  }
++
++  for (i = ecif->cif->nargs, ptr = ecif->cif->arg_types;
++       i > 0;
++       i--, ptr++, p_argv.v++)
++  {
++    switch ((*ptr)->type)
++    {
++      case FFI_TYPE_SINT8:
++        *addr++ = **p_argv.sc;
++        break;
++      case FFI_TYPE_UINT8:
++        *addr++ = **p_argv.uc;
++        break;
++      case FFI_TYPE_SINT16:
++        *addr++ = **p_argv.ss;
++        break;
++      case FFI_TYPE_UINT16:
++        *addr++ = **p_argv.us;
++        break;
++      case FFI_TYPE_FLOAT:
++      case FFI_TYPE_INT:
++      case FFI_TYPE_UINT32:
++      case FFI_TYPE_SINT32:
++      case FFI_TYPE_POINTER:
++        *addr++ = **p_argv.i;
++        break;
++      case FFI_TYPE_DOUBLE:
++      case FFI_TYPE_UINT64:
++      case FFI_TYPE_SINT64:
++        if (((unsigned long)addr & 4) != 0)
++          addr++;
++        *(unsigned long long*)addr = **p_argv.ll;
++	addr += sizeof(unsigned long long) / sizeof (addr);
++        break;
++
++      case FFI_TYPE_STRUCT:
++      {
++        unsigned long offs;
++        unsigned long size;
++
++        if (((unsigned long)addr & 4) != 0 && (*ptr)->alignment > 4)
++          addr++;
++
++        offs = (unsigned long) addr - (unsigned long) stack;
++        size = (*ptr)->size;
++
++        /* Entire structure must fit the argument registers or referenced */
++        if (offs < FFI_REGISTER_NARGS * 4
++            && offs + size > FFI_REGISTER_NARGS * 4)
++          addr = (unsigned long*) (stack + FFI_REGISTER_NARGS * 4);
++
++        memcpy((char*) addr, *p_argv.c, size);
++        addr += (size + 3) / 4;
++        break;
++      }
++
++      default:
++        FFI_ASSERT(0);
++    }
++  }
++}
++
++
++void ffi_call(ffi_cif* cif, void(*fn)(void), void *rvalue, void **avalue)
++{
++  extended_cif ecif;
++  unsigned long rsize = cif->rtype->size;
++  int flags = cif->flags;
++  void *alloc = NULL;
++
++  ecif.cif = cif;
++  ecif.avalue = avalue;
++
++  /* Note that for structures that are returned in registers (size <= 16 bytes)
++     we allocate a temporary buffer and use memcpy to copy it to the final 
++     destination. The reason is that the target address might be misaligned or
++     the length not a multiple of 4 bytes. Handling all those cases would be
++     very complex.  */
++
++  if (flags == FFI_TYPE_STRUCT && (rsize <= 16 || rvalue == NULL))
++  {
++    alloc = alloca(ALIGN(rsize, 4));
++    ecif.rvalue = alloc;
++  }
++  else
++  {
++    ecif.rvalue = rvalue;
++  }
++
++  if (cif->abi != FFI_SYSV)
++    FFI_ASSERT(0);
++
++  ffi_call_SYSV (ecif.rvalue, rsize, cif->flags, fn, cif->bytes, &ecif);
++
++  if (alloc != NULL && rvalue != NULL)
++    memcpy(rvalue, alloc, rsize);
++}
++
++extern void ffi_trampoline();
++extern void ffi_cacheflush(void* start, void* end);
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure* closure,
++                      ffi_cif* cif,
++                      void (*fun)(ffi_cif*, void*, void**, void*),
++                      void *user_data,
++                      void *codeloc)
++{
++  /* copye trampoline to stack and patch 'ffi_closure_SYSV' pointer */
++  memcpy(closure->tramp, ffi_trampoline, FFI_TRAMPOLINE_SIZE);
++  *(unsigned int*)(&closure->tramp[8]) = (unsigned int)ffi_closure_SYSV;
++
++  // Do we have this function?
++  // __builtin___clear_cache(closer->tramp, closer->tramp + FFI_TRAMPOLINE_SIZE)
++  ffi_cacheflush(closure->tramp, closure->tramp + FFI_TRAMPOLINE_SIZE);
++
++  closure->cif = cif;
++  closure->fun = fun;
++  closure->user_data = user_data;
++  return FFI_OK; 
++}
++
++
++long FFI_HIDDEN
++ffi_closure_SYSV_inner(ffi_closure *closure, void **values, void *rvalue)
++{
++  ffi_cif *cif;
++  ffi_type **arg_types;
++  void **avalue;
++  int i, areg;
++
++  cif = closure->cif;
++  if (cif->abi != FFI_SYSV)
++    return FFI_BAD_ABI;
++
++  areg = 0;
++
++  int rtype = cif->rtype->type;
++  if (rtype == FFI_TYPE_STRUCT && cif->rtype->size > 4 * 4)
++  {
++    rvalue = *values;
++    areg++;
++  }
++
++  cif = closure->cif; 
++  arg_types = cif->arg_types;
++  avalue = alloca(cif->nargs * sizeof(void *));
++
++  for (i = 0; i < cif->nargs; i++)
++  {
++    if (arg_types[i]->alignment == 8 && (areg & 1) != 0)
++      areg++;
++
++    // skip the entry 16,a1 framework, add 16 bytes (4 registers)
++    if (areg == FFI_REGISTER_NARGS)
++      areg += 4;
++
++    if (arg_types[i]->type == FFI_TYPE_STRUCT)
++    {
++      int numregs = ((arg_types[i]->size + 3) & ~3) / 4;
++      if (areg < FFI_REGISTER_NARGS && areg + numregs > FFI_REGISTER_NARGS)
++        areg = FFI_REGISTER_NARGS + 4;
++    }
++
++    avalue[i] = &values[areg];
++    areg += (arg_types[i]->size + 3) / 4;
++  }
++
++  (closure->fun)(cif, rvalue, avalue, closure->user_data);
++
++  return rtype;
++}
+diff --git a/js/src/ctypes/libffi/src/xtensa/ffitarget.h b/js/src/ctypes/libffi/src/xtensa/ffitarget.h
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/xtensa/ffitarget.h
+@@ -0,0 +1,53 @@
++/* -----------------------------------------------------------------*-C-*-
++   ffitarget.h - Copyright (c) 2013 Tensilica, Inc.
++   Target configuration macros for XTENSA.
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_H
++#error "Please do not include ffitarget.h directly into your source.  Use ffi.h instead."
++#endif
++
++#ifndef LIBFFI_ASM
++typedef unsigned long	ffi_arg;
++typedef signed long	ffi_sarg;
++
++typedef enum ffi_abi {
++  FFI_FIRST_ABI = 0,
++  FFI_SYSV,
++  FFI_LAST_ABI,
++  FFI_DEFAULT_ABI = FFI_SYSV
++} ffi_abi;
++#endif
++
++#define FFI_REGISTER_NARGS	6
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_NATIVE_RAW_API 0
++#define FFI_TRAMPOLINE_SIZE 24
++
++#endif
+diff --git a/js/src/ctypes/libffi/src/xtensa/sysv.S b/js/src/ctypes/libffi/src/xtensa/sysv.S
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/src/xtensa/sysv.S
+@@ -0,0 +1,253 @@
++/* -----------------------------------------------------------------------
++   sysv.S - Copyright (c) 2013 Tensilica, Inc.
++   
++   XTENSA Foreign Function Interface 
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++   DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++#define ENTRY(name) .text; .globl name; .type  name,@function; .align 4; name:
++#define END(name) .size name , . - name
++
++/* Assert that the table below is in sync with ffi.h.  */
++
++#if	   FFI_TYPE_UINT8 != 5          \
++        || FFI_TYPE_SINT8 != 6          \
++        || FFI_TYPE_UINT16 != 7         \
++        || FFI_TYPE_SINT16 != 8         \
++        || FFI_TYPE_UINT32 != 9         \
++        || FFI_TYPE_SINT32 != 10        \
++        || FFI_TYPE_UINT64 != 11
++#error "xtensa/sysv.S out of sync with ffi.h"
++#endif
++
++
++/* ffi_call_SYSV (rvalue, rbytes, flags, (*fnaddr)(), bytes, ecif)
++      void *rvalue;            a2
++      unsigned long rbytes;    a3
++      unsigned flags;          a4
++      void (*fnaddr)();        a5
++      unsigned long bytes;     a6
++      extended_cif* ecif)      a7
++*/
++
++ENTRY(ffi_call_SYSV)
++
++	entry	a1, 32              # 32 byte frame for using call8 below
++
++	mov	a10, a7             # a10(->arg0): ecif
++	sub	a11, a1, a6         # a11(->arg1): stack pointer
++	mov	a7, a1              # fp
++	movsp	a1, a11             # set new sp = old_sp - bytes
++
++	movi	a8, ffi_prep_args
++	callx8	a8                  # ffi_prep_args(ecif, stack)
++
++	# prepare to move stack pointer back up to 6 arguments
++	# note that 'bytes' is already aligned
++
++	movi	a10, 6*4 
++	sub	a11, a6, a10
++	movgez	a6, a10, a11
++	add	a6, a1, a6
++
++	
++	# we can pass up to 6 arguments in registers
++	# for simplicity, just load 6 arguments
++	# (the stack size is at least 32 bytes, so no risk to cross boundaries)
++
++	l32i	a10, a1, 0
++	l32i	a11, a1, 4
++	l32i	a12, a1, 8
++	l32i	a13, a1, 12
++	l32i	a14, a1, 16
++	l32i	a15, a1, 20
++
++	# move stack pointer
++
++	movsp	a1, a6
++
++	callx8	a5                  # (*fn)(args...)
++
++	# Handle return value(s)
++
++	beqz	a2, .Lexit
++
++	movi	a5, FFI_TYPE_STRUCT
++	bne	a4, a5, .Lstore
++	movi	a5, 16
++	blt	a5, a3, .Lexit
++
++	s32i	a10, a2, 0
++	blti	a3, 5, .Lexit
++	addi	a3, a3, -1
++	s32i	a11, a2, 4
++	blti	a3, 8, .Lexit
++	s32i	a12, a2, 8
++	blti	a3, 12, .Lexit
++	s32i	a13, a2, 12
++
++.Lexit:	retw
++
++.Lstore:
++	addi	a4, a4, -FFI_TYPE_UINT8
++	bgei	a4, 7, .Lexit	# should never happen
++	movi	a6, store_calls
++	add	a4, a4, a4
++	addx4	a6, a4, a6	# store_table + idx * 8
++	jx	a6
++
++	.align	8
++store_calls:
++	# UINT8
++	s8i	a10, a2, 0
++	retw
++
++	# SINT8
++	.align	8
++	s8i	a10, a2, 0
++	retw
++
++	# UINT16
++	.align	8
++	s16i	a10, a2, 0
++	retw
++
++	# SINT16
++	.align	8
++	s16i	a10, a2, 0
++	retw
++
++	# UINT32
++	.align	8
++	s32i	a10, a2, 0
++	retw
++
++	# SINT32
++	.align	8
++	s32i	a10, a2, 0
++	retw
++
++	# UINT64
++	.align	8
++	s32i	a10, a2, 0
++	s32i	a11, a2, 4
++	retw
++
++END(ffi_call_SYSV)
++
++
++/*
++ * void ffi_cacheflush (unsigned long start, unsigned long end)
++ */
++
++#define EXTRA_ARGS_SIZE	24
++
++ENTRY(ffi_cacheflush)
++
++	entry	a1, 16
++
++1:	dhwbi	a2, 0
++	ihi	a2, 0
++	addi	a2, a2, 4
++	blt	a2, a3, 1b
++
++	retw
++
++END(ffi_cacheflush)
++
++/* ffi_trampoline is copied to the stack */
++
++ENTRY(ffi_trampoline)
++
++	entry	a1, 16 + (FFI_REGISTER_NARGS * 4) + (4 * 4)   # [ 0]
++	j	2f                                # [ 3]
++	.align	4                                 # [ 6]
++1:	.long	0                                 # [ 8]
++2:	l32r	a15, 1b                           # [12]
++	_mov 	a14, a0                           # [15]
++	callx0	a15                               # [18]
++                                                  # [21]
++END(ffi_trampoline)
++
++/*
++ * ffi_closure()
++ *
++ * a0:  closure + 21
++ * a14: return address (a0)
++ */
++
++ENTRY(ffi_closure_SYSV)
++
++	/* intentionally omitting entry here */
++
++	# restore return address (a0) and move pointer to closure to a10
++	addi	a10, a0, -21
++	mov	a0, a14
++
++	# allow up to 4 arguments as return values
++	addi	a11, a1, 4 * 4
++
++	# save up to 6 arguments to stack (allocated by entry below)
++	s32i	a2, a11,  0
++	s32i	a3, a11,  4
++	s32i	a4, a11,  8
++	s32i	a5, a11, 12
++	s32i	a6, a11, 16
++	s32i	a7, a11, 20
++
++	movi	a8, ffi_closure_SYSV_inner
++	mov	a12, a1
++	callx8	a8			# .._inner(*closure, **avalue, *rvalue)
++
++	# load up to four return arguments
++	l32i	a2, a1,  0
++	l32i	a3, a1,  4
++	l32i	a4, a1,  8
++	l32i	a5, a1, 12
++
++	# (sign-)extend return value
++	movi	a11, FFI_TYPE_UINT8
++	bne	a10, a11, 1f
++	extui	a2, a2, 0, 8
++	retw
++
++1:	movi	a11, FFI_TYPE_SINT8
++	bne	a10, a11, 1f
++	sext	a2, a2, 7
++	retw
++
++1:	movi	a11, FFI_TYPE_UINT16
++	bne	a10, a11, 1f
++	extui	a2, a2, 0, 16
++	retw
++
++1:	movi	a11, FFI_TYPE_SINT16
++	bne	a10, a11, 1f
++	sext	a2, a2, 15
++
++1:	retw
++
++END(ffi_closure_SYSV)
+diff --git a/js/src/ctypes/libffi/stamp-h.in b/js/src/ctypes/libffi/stamp-h.in
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/stamp-h.in
++++ /dev/null
+@@ -1,1 +0,0 @@
+-timestamp
+diff --git a/js/src/ctypes/libffi/testsuite/Makefile.am b/js/src/ctypes/libffi/testsuite/Makefile.am
+--- a/js/src/ctypes/libffi/testsuite/Makefile.am
++++ b/js/src/ctypes/libffi/testsuite/Makefile.am
+@@ -8,73 +8,89 @@ EXPECT = `if [ -f $(top_builddir)/../exp
+           else echo expect ; fi`
+ 
+ RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
+ 	       echo $(top_srcdir)/../dejagnu/runtest ; \
+ 	    else echo runtest; fi`
+ 
+ AM_RUNTESTFLAGS =
+ 
++EXTRA_DEJAGNU_SITE_CONFIG=../local.exp
++
+ CLEANFILES = *.exe core* *.log *.sum
+ 
+-EXTRA_DIST = libffi.special/special.exp	\
+-libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \
+-libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \
+-lib/libffi-dg.exp lib/wrapper.exp libffi.call/float.c \
+-libffi.call/cls_multi_schar.c libffi.call/float3.c \
+-libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \
+-libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \
+-libffi.call/promotion.c libffi.call/cls_dbls_struct.c \
+-libffi.call/nested_struct.c libffi.call/closure_fn1.c \
+-libffi.call/cls_4_1byte.c libffi.call/cls_float.c \
+-libffi.call/cls_2byte.c libffi.call/closure_fn4.c \
+-libffi.call/return_fl2.c libffi.call/nested_struct7.c \
+-libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \
+-libffi.call/float1.c libffi.call/cls_19byte.c \
+-libffi.call/nested_struct1.c libffi.call/cls_4byte.c \
+-libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \
+-libffi.call/nested_struct4.c libffi.call/nested_struct3.c \
+-libffi.call/struct7.c libffi.call/nested_struct9.c \
+-libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \
+-libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \
+-libffi.call/testclosure.c libffi.call/cls_3byte1.c \
+-libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \
+-libffi.call/cls_ushort.c libffi.call/stret_medium2.c \
+-libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \
+-libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \
+-libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c	\
+-libffi.call/return_ll.c libffi.call/cls_pointer.c \
+-libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \
+-libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c	\
+-libffi.call/return_sl.c libffi.call/cls_1_1byte.c \
+-libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \
+-libffi.call/cls_double.c libffi.call/many_win32.c \
+-libffi.call/cls_16byte.c libffi.call/cls_align_double.c	\
+-libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c	\
+-libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \
+-libffi.call/closure_stdcall.c libffi.call/return_fl.c \
+-libffi.call/strlen_win32.c libffi.call/return_ldl.c \
+-libffi.call/cls_align_float.c libffi.call/struct3.c \
+-libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \
+-libffi.call/cls_align_longdouble_split.c \
+-libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \
+-libffi.call/stret_large.c libffi.call/cls_align_sint16.c \
+-libffi.call/nested_struct6.c libffi.call/cls_5byte.c \
+-libffi.call/return_dbl.c libffi.call/cls_20byte.c \
+-libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c	\
+-libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \
+-libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \
+-libffi.call/cls_18byte.c libffi.call/closure_fn3.c \
+-libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c	\
+-libffi.call/struct2.c libffi.call/cls_3byte2.c \
+-libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \
+-libffi.call/return_fl3.c libffi.call/cls_align_uint32.c	\
+-libffi.call/problem1.c libffi.call/float4.c \
+-libffi.call/cls_align_uint64.c libffi.call/struct9.c \
+-libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \
+-libffi.call/closure_fn0.c libffi.call/closure_fn6.c \
+-libffi.call/struct4.c libffi.call/nested_struct2.c \
+-libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \
+-libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \
+-libffi.call/cls_12byte.c libffi.call/cls_double_va.c \
+-libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \
+-libffi.call/nested_struct10.c libffi.call/nested_struct5.c \
+-libffi.call/huge_struct.c
++EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c		\
++libffi.call/cls_align_longdouble_split.c				\
++libffi.call/closure_loc_fn0.c libffi.call/cls_schar.c			\
++libffi.call/closure_fn1.c \
++libffi.call/return_ul.c libffi.call/cls_align_double.c			\
++libffi.call/return_fl2.c libffi.call/cls_1_1byte.c			\
++libffi.call/cls_64byte.c libffi.call/nested_struct7.c			\
++libffi.call/cls_align_sint32.c libffi.call/nested_struct2.c		\
++libffi.call/ffitest.h libffi.call/nested_struct4.c			\
++libffi.call/cls_multi_ushort.c libffi.call/struct3.c			\
++libffi.call/cls_3byte1.c libffi.call/cls_16byte.c			\
++libffi.call/struct8.c libffi.call/nested_struct8.c			\
++libffi.call/cls_multi_sshort.c libffi.call/cls_3byte2.c			\
++libffi.call/cls_pointer.c			\
++libffi.call/err_bad_typedef.c libffi.call/cls_4_1byte.c			\
++libffi.call/cls_9byte2.c libffi.call/cls_multi_schar.c			\
++libffi.call/stret_medium2.c libffi.call/cls_5_1_byte.c			\
++libffi.call/call.exp libffi.call/cls_double.c				\
++libffi.call/cls_align_sint16.c libffi.call/cls_uint.c			\
++libffi.call/return_ll1.c libffi.call/nested_struct3.c			\
++libffi.call/cls_20byte1.c libffi.call/closure_fn4.c			\
++libffi.call/cls_uchar.c libffi.call/struct2.c libffi.call/cls_7byte.c	\
++libffi.call/strlen.c libffi.call/many.c libffi.call/testclosure.c	\
++libffi.call/return_fl.c libffi.call/struct5.c				\
++libffi.call/cls_12byte.c libffi.call/cls_multi_sshortchar.c		\
++libffi.call/cls_align_longdouble_split2.c libffi.call/return_dbl2.c	\
++libffi.call/return_fl3.c libffi.call/stret_medium.c			\
++libffi.call/nested_struct6.c libffi.call/closure_fn3.c			\
++libffi.call/float3.c libffi.call/many2.c				\
++libffi.call/closure_stdcall.c libffi.call/cls_align_uint16.c		\
++libffi.call/cls_9byte1.c libffi.call/closure_fn6.c			\
++libffi.call/cls_double_va.c libffi.call/cls_align_pointer.c		\
++libffi.call/cls_align_longdouble.c libffi.call/closure_fn2.c		\
++libffi.call/cls_sshort.c \
++libffi.call/nested_struct.c libffi.call/cls_20byte.c			\
++libffi.call/cls_longdouble.c libffi.call/cls_multi_uchar.c		\
++libffi.call/return_uc.c libffi.call/closure_thiscall.c			\
++libffi.call/cls_18byte.c libffi.call/cls_8byte.c			\
++libffi.call/promotion.c \
++libffi.call/return_dbl.c libffi.call/cls_24byte.c			\
++libffi.call/struct4.c libffi.call/cls_6byte.c				\
++libffi.call/cls_align_uint32.c libffi.call/float.c			\
++libffi.call/float1.c libffi.call/float_va.c libffi.call/negint.c	\
++libffi.call/return_dbl1.c libffi.call/cls_3_1byte.c			\
++libffi.call/cls_align_float.c libffi.call/return_fl1.c			\
++libffi.call/nested_struct10.c libffi.call/nested_struct5.c		\
++libffi.call/cls_align_sint64.c		\
++libffi.call/stret_large2.c libffi.call/return_sl.c			\
++libffi.call/closure_fn0.c libffi.call/cls_5byte.c			\
++libffi.call/cls_2byte.c libffi.call/float2.c				\
++libffi.call/cls_dbls_struct.c libffi.call/cls_sint.c			\
++libffi.call/stret_large.c libffi.call/cls_ulonglong.c			\
++libffi.call/cls_ushort.c libffi.call/nested_struct1.c			\
++libffi.call/err_bad_abi.c libffi.call/cls_longdouble_va.c		\
++libffi.call/cls_float.c libffi.call/cls_pointer_stack.c		\
++libffi.call/pyobjc-tc.c libffi.call/cls_multi_ushortchar.c		\
++libffi.call/struct1.c libffi.call/nested_struct9.c			\
++libffi.call/huge_struct.c libffi.call/problem1.c			\
++libffi.call/float4.c \
++libffi.call/return_ldl.c \
++libffi.call/closure_fn5.c \
++libffi.call/struct6.c libffi.call/return_ll.c libffi.call/struct9.c	\
++libffi.call/return_sc.c libffi.call/struct7.c				\
++libffi.call/cls_align_uint64.c libffi.call/cls_4byte.c			\
++libffi.call/cls_6_1_byte.c			\
++libffi.call/cls_7_1_byte.c libffi.call/unwindtest.cc			\
++libffi.call/unwindtest_ffi_call.cc	\
++lib/wrapper.exp lib/target-libpath.exp	\
++lib/libffi.exp libffi.call/cls_struct_va1.c				\
++libffi.call/cls_uchar_va.c libffi.call/cls_uint_va.c			\
++libffi.call/cls_ulong_va.c libffi.call/cls_ushort_va.c			\
++libffi.call/nested_struct11.c libffi.call/uninitialized.c		\
++libffi.call/va_1.c libffi.call/va_struct1.c libffi.call/va_struct2.c	\
++libffi.call/va_struct3.c \
++libffi.call/strlen2.c \
++libffi.call/strlen3.c \
++libffi.call/strlen4.c
+diff --git a/js/src/ctypes/libffi/testsuite/Makefile.in b/js/src/ctypes/libffi/testsuite/Makefile.in
+--- a/js/src/ctypes/libffi/testsuite/Makefile.in
++++ b/js/src/ctypes/libffi/testsuite/Makefile.in
+@@ -1,25 +1,69 @@
+-# Makefile.in generated by automake 1.11.1 from Makefile.am.
++# Makefile.in generated by automake 1.13.4 from Makefile.am.
+ # @configure_input@
+ 
+-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+-# Inc.
++# Copyright (C) 1994-2013 Free Software Foundation, Inc.
++
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ @SET_MAKE@
+ VPATH = @srcdir@
++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
++am__make_running_with_option = \
++  case $${target_option-} in \
++      ?) ;; \
++      *) echo "am__make_running_with_option: internal error: invalid" \
++              "target option '$${target_option-}' specified" >&2; \
++         exit 1;; \
++  esac; \
++  has_opt=no; \
++  sane_makeflags=$$MAKEFLAGS; \
++  if $(am__is_gnu_make); then \
++    sane_makeflags=$$MFLAGS; \
++  else \
++    case $$MAKEFLAGS in \
++      *\\[\ \	]*) \
++        bs=\\; \
++        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
++          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
++    esac; \
++  fi; \
++  skip_next=no; \
++  strip_trailopt () \
++  { \
++    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
++  }; \
++  for flg in $$sane_makeflags; do \
++    test $$skip_next = yes && { skip_next=no; continue; }; \
++    case $$flg in \
++      *=*|--*) continue;; \
++        -*I) strip_trailopt 'I'; skip_next=yes;; \
++      -*I?*) strip_trailopt 'I';; \
++        -*O) strip_trailopt 'O'; skip_next=yes;; \
++      -*O?*) strip_trailopt 'O';; \
++        -*l) strip_trailopt 'l'; skip_next=yes;; \
++      -*l?*) strip_trailopt 'l';; \
++      -[dEDm]) skip_next=yes;; \
++      -[JT]) skip_next=yes;; \
++    esac; \
++    case $$flg in \
++      *$$target_option*) has_opt=yes; break;; \
++    esac; \
++  done; \
++  test $$has_opt = yes
++am__make_dryrun = (target_option=n; $(am__make_running_with_option))
++am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+ install_sh_SCRIPT = $(install_sh) -c
+@@ -30,34 +74,65 @@ PRE_INSTALL = :
+ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+ subdir = testsuite
+-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
++am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \
++	$(top_srcdir)/m4/ax_append_flag.m4 \
++	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
++	$(top_srcdir)/m4/ax_cflags_warn_all.m4 \
++	$(top_srcdir)/m4/ax_check_compile_flag.m4 \
++	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
++	$(top_srcdir)/m4/ax_configure_args.m4 \
++	$(top_srcdir)/m4/ax_enable_builddir.m4 \
++	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
++	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
++	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
++	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
++	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+ 	$(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/fficonfig.h
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
++AM_V_P = $(am__v_P_@AM_V@)
++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
++am__v_P_0 = false
++am__v_P_1 = :
++AM_V_GEN = $(am__v_GEN_@AM_V@)
++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
++am__v_GEN_0 = @echo "  GEN     " $@;
++am__v_GEN_1 = 
++AM_V_at = $(am__v_at_@AM_V@)
++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
++am__v_at_0 = @
++am__v_at_1 = 
+ SOURCES =
+ DIST_SOURCES =
++am__can_run_installinfo = \
++  case $$AM_UPDATE_INFO_DIR in \
++    n|no|NO) false;; \
++    *) (install-info --version) >/dev/null 2>&1;; \
++  esac
++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+ DEJATOOL = $(PACKAGE)
+ RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ALLOCA = @ALLOCA@
+ AMTAR = @AMTAR@
++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+ AM_LTLDFLAGS = @AM_LTLDFLAGS@
+ AM_RUNTESTFLAGS = 
+ AR = @AR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ CC = @CC@
+@@ -66,75 +141,82 @@ CCASDEPMODE = @CCASDEPMODE@
+ CCASFLAGS = @CCASFLAGS@
+ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
++DLLTOOL = @DLLTOOL@
+ DSYMUTIL = @DSYMUTIL@
+ DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXEEXT = @EXEEXT@
++FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@
+ FGREP = @FGREP@
+ GREP = @GREP@
+ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
++HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LD = @LD@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+ LIPO = @LIPO@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
+ NM = @NM@
+ NMEDIT = @NMEDIT@
+ OBJDUMP = @OBJDUMP@
+ OBJEXT = @OBJEXT@
+ OTOOL = @OTOOL@
+ OTOOL64 = @OTOOL64@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
++PRTDIAG = @PRTDIAG@
+ RANLIB = @RANLIB@
+ SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+ STRIP = @STRIP@
+ TARGET = @TARGET@
+ TARGETDIR = @TARGETDIR@
+ VERSION = @VERSION@
+ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+ am__tar = @am__tar@
+ am__untar = @am__untar@
++ax_enable_builddir_sed = @ax_enable_builddir_sed@
+ bindir = @bindir@
+ build = @build@
+ build_alias = @build_alias@
+ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ builddir = @builddir@
+ datadir = @datadir@
+@@ -150,27 +232,27 @@ host_vendor = @host_vendor@
+ htmldir = @htmldir@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ localedir = @localedir@
+ localstatedir = @localstatedir@
+-lt_ECHO = @lt_ECHO@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+ oldincludedir = @oldincludedir@
+ pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ psdir = @psdir@
+ sbindir = @sbindir@
+ sharedstatedir = @sharedstatedir@
+ srcdir = @srcdir@
++sys_symbol_underscore = @sys_symbol_underscore@
+ sysconfdir = @sysconfdir@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
+@@ -183,80 +265,95 @@ AUTOMAKE_OPTIONS = foreign dejagnu
+ EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \
+             echo $(top_builddir)/../expect/expect ; \
+           else echo expect ; fi`
+ 
+ RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
+ 	       echo $(top_srcdir)/../dejagnu/runtest ; \
+ 	    else echo runtest; fi`
+ 
++EXTRA_DEJAGNU_SITE_CONFIG = ../local.exp
+ CLEANFILES = *.exe core* *.log *.sum
+-EXTRA_DIST = libffi.special/special.exp	\
+-libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \
+-libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \
+-lib/libffi-dg.exp lib/wrapper.exp libffi.call/float.c \
+-libffi.call/cls_multi_schar.c libffi.call/float3.c \
+-libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \
+-libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \
+-libffi.call/promotion.c libffi.call/cls_dbls_struct.c \
+-libffi.call/nested_struct.c libffi.call/closure_fn1.c \
+-libffi.call/cls_4_1byte.c libffi.call/cls_float.c \
+-libffi.call/cls_2byte.c libffi.call/closure_fn4.c \
+-libffi.call/return_fl2.c libffi.call/nested_struct7.c \
+-libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \
+-libffi.call/float1.c libffi.call/cls_19byte.c \
+-libffi.call/nested_struct1.c libffi.call/cls_4byte.c \
+-libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \
+-libffi.call/nested_struct4.c libffi.call/nested_struct3.c \
+-libffi.call/struct7.c libffi.call/nested_struct9.c \
+-libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \
+-libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \
+-libffi.call/testclosure.c libffi.call/cls_3byte1.c \
+-libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \
+-libffi.call/cls_ushort.c libffi.call/stret_medium2.c \
+-libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \
+-libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \
+-libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c	\
+-libffi.call/return_ll.c libffi.call/cls_pointer.c \
+-libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \
+-libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c	\
+-libffi.call/return_sl.c libffi.call/cls_1_1byte.c \
+-libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \
+-libffi.call/cls_double.c libffi.call/many_win32.c \
+-libffi.call/cls_16byte.c libffi.call/cls_align_double.c	\
+-libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c	\
+-libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \
+-libffi.call/closure_stdcall.c libffi.call/return_fl.c \
+-libffi.call/strlen_win32.c libffi.call/return_ldl.c \
+-libffi.call/cls_align_float.c libffi.call/struct3.c \
+-libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \
+-libffi.call/cls_align_longdouble_split.c \
+-libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \
+-libffi.call/stret_large.c libffi.call/cls_align_sint16.c \
+-libffi.call/nested_struct6.c libffi.call/cls_5byte.c \
+-libffi.call/return_dbl.c libffi.call/cls_20byte.c \
+-libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c	\
+-libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \
+-libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \
+-libffi.call/cls_18byte.c libffi.call/closure_fn3.c \
+-libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c	\
+-libffi.call/struct2.c libffi.call/cls_3byte2.c \
+-libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \
+-libffi.call/return_fl3.c libffi.call/cls_align_uint32.c	\
+-libffi.call/problem1.c libffi.call/float4.c \
+-libffi.call/cls_align_uint64.c libffi.call/struct9.c \
+-libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \
+-libffi.call/closure_fn0.c libffi.call/closure_fn6.c \
+-libffi.call/struct4.c libffi.call/nested_struct2.c \
+-libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \
+-libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \
+-libffi.call/cls_12byte.c libffi.call/cls_double_va.c \
+-libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \
+-libffi.call/nested_struct10.c libffi.call/nested_struct5.c \
+-libffi.call/huge_struct.c
++EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c		\
++libffi.call/cls_align_longdouble_split.c				\
++libffi.call/closure_loc_fn0.c libffi.call/cls_schar.c			\
++libffi.call/closure_fn1.c \
++libffi.call/return_ul.c libffi.call/cls_align_double.c			\
++libffi.call/return_fl2.c libffi.call/cls_1_1byte.c			\
++libffi.call/cls_64byte.c libffi.call/nested_struct7.c			\
++libffi.call/cls_align_sint32.c libffi.call/nested_struct2.c		\
++libffi.call/ffitest.h libffi.call/nested_struct4.c			\
++libffi.call/cls_multi_ushort.c libffi.call/struct3.c			\
++libffi.call/cls_3byte1.c libffi.call/cls_16byte.c			\
++libffi.call/struct8.c libffi.call/nested_struct8.c			\
++libffi.call/cls_multi_sshort.c libffi.call/cls_3byte2.c			\
++libffi.call/cls_pointer.c			\
++libffi.call/err_bad_typedef.c libffi.call/cls_4_1byte.c			\
++libffi.call/cls_9byte2.c libffi.call/cls_multi_schar.c			\
++libffi.call/stret_medium2.c libffi.call/cls_5_1_byte.c			\
++libffi.call/call.exp libffi.call/cls_double.c				\
++libffi.call/cls_align_sint16.c libffi.call/cls_uint.c			\
++libffi.call/return_ll1.c libffi.call/nested_struct3.c			\
++libffi.call/cls_20byte1.c libffi.call/closure_fn4.c			\
++libffi.call/cls_uchar.c libffi.call/struct2.c libffi.call/cls_7byte.c	\
++libffi.call/strlen.c libffi.call/many.c libffi.call/testclosure.c	\
++libffi.call/return_fl.c libffi.call/struct5.c				\
++libffi.call/cls_12byte.c libffi.call/cls_multi_sshortchar.c		\
++libffi.call/cls_align_longdouble_split2.c libffi.call/return_dbl2.c	\
++libffi.call/return_fl3.c libffi.call/stret_medium.c			\
++libffi.call/nested_struct6.c libffi.call/closure_fn3.c			\
++libffi.call/float3.c libffi.call/many2.c				\
++libffi.call/closure_stdcall.c libffi.call/cls_align_uint16.c		\
++libffi.call/cls_9byte1.c libffi.call/closure_fn6.c			\
++libffi.call/cls_double_va.c libffi.call/cls_align_pointer.c		\
++libffi.call/cls_align_longdouble.c libffi.call/closure_fn2.c		\
++libffi.call/cls_sshort.c \
++libffi.call/nested_struct.c libffi.call/cls_20byte.c			\
++libffi.call/cls_longdouble.c libffi.call/cls_multi_uchar.c		\
++libffi.call/return_uc.c libffi.call/closure_thiscall.c			\
++libffi.call/cls_18byte.c libffi.call/cls_8byte.c			\
++libffi.call/promotion.c \
++libffi.call/return_dbl.c libffi.call/cls_24byte.c			\
++libffi.call/struct4.c libffi.call/cls_6byte.c				\
++libffi.call/cls_align_uint32.c libffi.call/float.c			\
++libffi.call/float1.c libffi.call/float_va.c libffi.call/negint.c	\
++libffi.call/return_dbl1.c libffi.call/cls_3_1byte.c			\
++libffi.call/cls_align_float.c libffi.call/return_fl1.c			\
++libffi.call/nested_struct10.c libffi.call/nested_struct5.c		\
++libffi.call/cls_align_sint64.c		\
++libffi.call/stret_large2.c libffi.call/return_sl.c			\
++libffi.call/closure_fn0.c libffi.call/cls_5byte.c			\
++libffi.call/cls_2byte.c libffi.call/float2.c				\
++libffi.call/cls_dbls_struct.c libffi.call/cls_sint.c			\
++libffi.call/stret_large.c libffi.call/cls_ulonglong.c			\
++libffi.call/cls_ushort.c libffi.call/nested_struct1.c			\
++libffi.call/err_bad_abi.c libffi.call/cls_longdouble_va.c		\
++libffi.call/cls_float.c libffi.call/cls_pointer_stack.c		\
++libffi.call/pyobjc-tc.c libffi.call/cls_multi_ushortchar.c		\
++libffi.call/struct1.c libffi.call/nested_struct9.c			\
++libffi.call/huge_struct.c libffi.call/problem1.c			\
++libffi.call/float4.c \
++libffi.call/return_ldl.c \
++libffi.call/closure_fn5.c \
++libffi.call/struct6.c libffi.call/return_ll.c libffi.call/struct9.c	\
++libffi.call/return_sc.c libffi.call/struct7.c				\
++libffi.call/cls_align_uint64.c libffi.call/cls_4byte.c			\
++libffi.call/cls_6_1_byte.c			\
++libffi.call/cls_7_1_byte.c libffi.call/unwindtest.cc			\
++libffi.call/unwindtest_ffi_call.cc	\
++lib/wrapper.exp lib/target-libpath.exp	\
++lib/libffi.exp libffi.call/cls_struct_va1.c				\
++libffi.call/cls_uchar_va.c libffi.call/cls_uint_va.c			\
++libffi.call/cls_ulong_va.c libffi.call/cls_ushort_va.c			\
++libffi.call/nested_struct11.c libffi.call/uninitialized.c		\
++libffi.call/va_1.c libffi.call/va_struct1.c libffi.call/va_struct2.c	\
++libffi.call/va_struct3.c \
++libffi.call/strlen2.c \
++libffi.call/strlen3.c \
++libffi.call/strlen4.c
+ 
+ all: all-am
+ 
+ .SUFFIXES:
+ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+@@ -287,51 +384,57 @@ Makefile: $(srcdir)/Makefile.in $(top_bu
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(am__aclocal_m4_deps):
+ 
+ mostlyclean-libtool:
+ 	-rm -f *.lo
+ 
+ clean-libtool:
+ 	-rm -rf .libs _libs
+-tags: TAGS
+-TAGS:
++tags TAGS:
+ 
+-ctags: CTAGS
+-CTAGS:
++ctags CTAGS:
++
++cscope cscopelist:
+ 
+ 
+ check-DEJAGNU: site.exp
+-	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
++	srcdir='$(srcdir)'; export srcdir; \
+ 	EXPECT=$(EXPECT); export EXPECT; \
+-	runtest=$(RUNTEST); \
+-	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
++	if $(SHELL) -c "$(RUNTEST) --version" > /dev/null 2>&1; then \
+ 	  exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \
+-	    if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
++	    if $(RUNTEST) $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
+ 	    then :; else exit_status=1; fi; \
+ 	  done; \
+-	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
++	else echo "WARNING: could not find '$(RUNTEST)'" 1>&2; :;\
+ 	fi; \
+ 	exit $$exit_status
+-site.exp: Makefile
+-	@echo 'Making a new site.exp file...'
++site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG)
++	@echo 'Making a new site.exp file ...'
+ 	@echo '## these variables are automatically generated by make ##' >site.tmp
+ 	@echo '# Do not edit here.  If you wish to override these values' >>site.tmp
+ 	@echo '# edit the last section' >>site.tmp
+-	@echo 'set srcdir $(srcdir)' >>site.tmp
++	@echo 'set srcdir "$(srcdir)"' >>site.tmp
+ 	@echo "set objdir `pwd`" >>site.tmp
+ 	@echo 'set build_alias "$(build_alias)"' >>site.tmp
+ 	@echo 'set build_triplet $(build_triplet)' >>site.tmp
+ 	@echo 'set host_alias "$(host_alias)"' >>site.tmp
+ 	@echo 'set host_triplet $(host_triplet)' >>site.tmp
+ 	@echo 'set target_alias "$(target_alias)"' >>site.tmp
+ 	@echo 'set target_triplet $(target_triplet)' >>site.tmp
+-	@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
+-	@test ! -f site.exp || \
+-	  sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
++	@list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \
++	  echo "## Begin content included from file $$f.  Do not modify. ##" \
++	   && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \
++	   && echo "## End content included from file $$f. ##" \
++	   || exit 1; \
++	 done >> site.tmp
++	@echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp
++	@if test -f site.exp; then \
++	   sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \
++	 fi
+ 	@-rm -f site.bak
+ 	@test ! -f site.exp || mv site.exp site.bak
+ 	@mv site.tmp site.exp
+ 
+ distclean-DEJAGNU:
+ 	-rm -f site.exp site.bak
+ 	-l='$(DEJATOOL)'; for tool in $$l; do \
+ 	  rm -f $$tool.sum $$tool.log; \
+@@ -377,20 +480,25 @@ install-exec: install-exec-am
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+@@ -462,23 +570,24 @@ ps: ps-am
+ 
+ ps-am:
+ 
+ uninstall-am:
+ 
+ .MAKE: check-am install-am install-strip
+ 
+ .PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \
+-	clean-libtool distclean distclean-DEJAGNU distclean-generic \
+-	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+-	install install-am install-data install-data-am install-dvi \
+-	install-dvi-am install-exec install-exec-am install-html \
+-	install-html-am install-info install-info-am install-man \
+-	install-pdf install-pdf-am install-ps install-ps-am \
+-	install-strip installcheck installcheck-am installdirs \
+-	maintainer-clean maintainer-clean-generic mostlyclean \
+-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+-	uninstall uninstall-am
++	clean-libtool cscopelist-am ctags-am distclean \
++	distclean-DEJAGNU distclean-generic distclean-libtool distdir \
++	dvi dvi-am html html-am info info-am install install-am \
++	install-data install-data-am install-dvi install-dvi-am \
++	install-exec install-exec-am install-html install-html-am \
++	install-info install-info-am install-man install-pdf \
++	install-pdf-am install-ps install-ps-am install-strip \
++	installcheck installcheck-am installdirs maintainer-clean \
++	maintainer-clean-generic mostlyclean mostlyclean-generic \
++	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
++	uninstall-am
+ 
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff --git a/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp b/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp
++++ /dev/null
+@@ -1,350 +0,0 @@
+-#   Copyright (C) 2003, 2005, 2008, 2009, 2010 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 3 of the License, or
+-# (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+-
+-proc load_gcc_lib { filename } {
+-    global srcdir
+-    load_file $srcdir/lib/$filename
+-}
+-
+-load_lib dg.exp
+-load_lib libgloss.exp
+-load_gcc_lib target-libpath.exp
+-load_gcc_lib wrapper.exp
+-
+-
+-# Define libffi callbacks for dg.exp.
+-
+-proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } {
+-
+-    # To get all \n in dg-output test strings to match printf output
+-    # in a system that outputs it as \015\012 (i.e. not just \012), we
+-    # need to change all \n into \r?\n.  As there is no dejagnu flag
+-    # or hook to do that, we simply change the text being tested.
+-    # Unfortunately, we have to know that the variable is called
+-    # dg-output-text and lives in the caller of libffi-dg-test, which
+-    # is two calls up.  Overriding proc dg-output would be longer and
+-    # would necessarily have the same assumption.
+-    upvar 2 dg-output-text output_match
+-
+-    if { [llength $output_match] > 1 } {
+-	regsub -all "\n" [lindex $output_match 1] "\r?\n" x
+-	set output_match [lreplace $output_match 1 1 $x]
+-    }
+-
+-    # Set up the compiler flags, based on what we're going to do.
+-
+-    set options [list]
+-    switch $do_what {
+-	"compile" {
+-	    set compile_type "assembly"
+-	    set output_file "[file rootname [file tail $prog]].s"
+-	}
+-	"link" {
+-	    set compile_type "executable"
+-	    set output_file "[file rootname [file tail $prog]].exe"
+-	    # The following line is needed for targets like the i960 where
+-	    # the default output file is b.out.  Sigh.
+-	}
+-	"run" {
+-	    set compile_type "executable"
+-	    # FIXME: "./" is to cope with "." not being in $PATH.
+-	    # Should this be handled elsewhere?
+-	    # YES.
+-	    set output_file "./[file rootname [file tail $prog]].exe"
+-	    # This is the only place where we care if an executable was
+-	    # created or not.  If it was, dg.exp will try to run it.
+-	    remote_file build delete $output_file;
+-	}
+-	default {
+-	    perror "$do_what: not a valid dg-do keyword"
+-	    return ""
+-	}
+-    }
+-
+-    if { $extra_tool_flags != "" } {
+-	lappend options "additional_flags=$extra_tool_flags"
+-    }
+-
+-    set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options];
+-
+-
+-    return [list $comp_output $output_file]
+-}
+-
+-
+-proc libffi-dg-test { prog do_what extra_tool_flags } {
+-    return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags]
+-}
+-
+-proc libffi-init { args } {
+-    global gluefile wrap_flags;
+-    global srcdir
+-    global blddirffi
+-    global objdir
+-    global TOOL_OPTIONS
+-    global tool
+-    global libffi_include
+-    global libffi_link_flags
+-    global tool_root_dir
+-    global ld_library_path
+-
+-    set blddirffi [pwd]/..
+-    verbose "libffi $blddirffi"
+-
+-    set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
+-    if {$gccdir != ""} {
+-	set gccdir [file dirname $gccdir]
+-    }
+-    verbose "gccdir $gccdir"
+-
+-    set ld_library_path "."
+-    append ld_library_path ":${gccdir}"
+-
+-    set compiler "${gccdir}/xgcc"
+-    if { [is_remote host] == 0 && [which $compiler] != 0 } {
+-	foreach i "[exec $compiler --print-multi-lib]" {
+-	    set mldir ""
+-	    regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
+-	    set mldir [string trimright $mldir "\;@"]
+-	    if { "$mldir" == "." } {
+-		continue
+-	    }
+-	    if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
+-		append ld_library_path ":${gccdir}/${mldir}"
+-	    }
+-	}
+-    }
+-    # add the library path for libffi.
+-    append ld_library_path ":${blddirffi}/.libs"
+-
+-    verbose "ld_library_path: $ld_library_path"
+-
+-    # Point to the Libffi headers in libffi.
+-    set libffi_include "${blddirffi}/include"
+-    verbose "libffi_include $libffi_include"
+-
+-    set libffi_dir  "${blddirffi}/.libs"
+-    verbose "libffi_dir $libffi_dir"
+-    if { $libffi_dir != "" } {
+-	set libffi_dir [file dirname ${libffi_dir}]
+-	set libffi_link_flags "-L${libffi_dir}/.libs"
+-    }
+-
+-    set_ld_library_path_env_vars
+-    libffi_maybe_build_wrapper "${objdir}/testglue.o"
+-}
+-
+-proc libffi_exit { } {
+-    global gluefile;
+-
+-    if [info exists gluefile] {
+-	file_on_build delete $gluefile;
+-	unset gluefile;
+-    }
+-}
+-
+-proc libffi_target_compile { source dest type options } {
+-    global gluefile wrap_flags;
+-    global srcdir
+-    global blddirffi
+-    global TOOL_OPTIONS
+-    global libffi_link_flags
+-    global libffi_include
+-    global target_triplet
+-
+-
+-    if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
+-	lappend options "libs=${gluefile}"
+-	lappend options "ldflags=$wrap_flags"
+-    }
+-
+-    # TOOL_OPTIONS must come first, so that it doesn't override testcase
+-    # specific options.
+-    if [info exists TOOL_OPTIONS] {
+-	lappend  options [concat "additional_flags=$TOOL_OPTIONS" $options];
+-    }
+-
+-    # search for ffi_mips.h in srcdir, too
+-    lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include  -I${libffi_include}/.."
+-    lappend options "additional_flags=${libffi_link_flags}"
+-
+-    # Darwin needs a stack execution allowed flag.
+-
+-    if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"]
+-	 || [istarget "*-*-darwin2*"] } {
+-	lappend options "additional_flags=-Wl,-allow_stack_execute"
+-    }
+-
+-    # If you're building the compiler with --prefix set to a place
+-    # where it's not yet installed, then the linker won't be able to
+-    # find the libgcc used by libffi.dylib.  We could pass the
+-    # -dylib_file option, but that's complicated, and it's much easier
+-    # to just make the linker find libgcc using -L options.
+-    if { [string match "*-*-darwin*" $target_triplet] } {
+-	lappend options "libs= -shared-libgcc"
+-    }
+-
+-    if { [string match "*-*-openbsd*" $target_triplet] } {
+-	lappend options "libs= -lpthread"
+-    }
+-
+-    lappend options "libs= -lffi"
+-
+-    verbose "options: $options"
+-    return [target_compile $source $dest $type $options]
+-}
+-
+-# Utility routines.
+-
+-#
+-# search_for -- looks for a string match in a file
+-#
+-proc search_for { file pattern } {
+-    set fd [open $file r]
+-    while { [gets $fd cur_line]>=0 } {
+-	if [string match "*$pattern*" $cur_line] then {
+-	    close $fd
+-	    return 1
+-	}
+-    }
+-    close $fd
+-    return 0
+-}
+-
+-# Modified dg-runtest that can cycle through a list of optimization options
+-# as c-torture does.
+-proc libffi-dg-runtest { testcases default-extra-flags } {
+-    global runtests
+-
+-    foreach test $testcases {
+-	# If we're only testing specific files and this isn't one of
+-	# them, skip it.
+-	if ![runtest_file_p $runtests $test] {
+-	    continue
+-	}
+-
+-	# Look for a loop within the source code - if we don't find one,
+-	# don't pass -funroll[-all]-loops.
+-	global torture_with_loops torture_without_loops
+-	if [expr [search_for $test "for*("]+[search_for $test "while*("]] {
+-	    set option_list $torture_with_loops
+-	} else {
+-	    set option_list $torture_without_loops
+-	}
+-
+-	set nshort [file tail [file dirname $test]]/[file tail $test]
+-
+-	foreach flags $option_list {
+-	    verbose "Testing $nshort, $flags" 1
+-	    dg-test $test $flags ${default-extra-flags}
+-	}
+-    }
+-}
+-
+-
+-# Like check_conditional_xfail, but callable from a dg test.
+-
+-proc dg-xfail-if { args } {
+-    set args [lreplace $args 0 0]
+-    set selector "target [join [lindex $args 1]]"
+-    if { [dg-process-target $selector] == "S" } {
+-	global compiler_conditional_xfail_data
+-	set compiler_conditional_xfail_data $args
+-    }
+-}
+-
+-proc check-flags { args } {
+-
+-    # The args are within another list; pull them out.
+-    set args [lindex $args 0]
+-
+-    # The next two arguments are optional.  If they were not specified,
+-    # use the defaults.
+-    if { [llength $args] == 2 } {
+-	lappend $args [list "*"]
+-    }
+-    if { [llength $args] == 3 } {
+-	lappend $args [list ""]
+-    }
+-
+-    # If the option strings are the defaults, or the same as the
+-    # defaults, there is no need to call check_conditional_xfail to
+-    # compare them to the actual options.
+-    if { [string compare [lindex $args 2] "*"] == 0
+-	 && [string compare [lindex $args 3] "" ] == 0 } {
+-	set result 1    
+-    } else {
+-	# The target list might be an effective-target keyword, so replace
+-	# the original list with "*-*-*", since we already know it matches.
+-	set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]]
+-    }
+-
+-    return $result
+-}
+-
+-proc dg-skip-if { args } {
+-    # Verify the number of arguments.  The last two are optional.
+-    set args [lreplace $args 0 0]
+-    if { [llength $args] < 2 || [llength $args] > 4 } {
+-        error "dg-skip-if 2: need 2, 3, or 4 arguments"
+-    }
+-
+-    # Don't bother if we're already skipping the test.
+-    upvar dg-do-what dg-do-what
+-    if { [lindex ${dg-do-what} 1] == "N" } {
+-      return
+-    }
+-
+-    set selector [list target [lindex $args 1]]
+-    if { [dg-process-target $selector] == "S" } {
+-        if [check-flags $args] {
+-            upvar dg-do-what dg-do-what
+-            set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+-        }
+-    }
+-}
+-
+-# We need to make sure that additional_files and additional_sources
+-# are both cleared out after every test.  It is not enough to clear
+-# them out *before* the next test run because gcc-target-compile gets
+-# run directly from some .exp files (outside of any test).  (Those
+-# uses should eventually be eliminated.)
+-
+-# Because the DG framework doesn't provide a hook that is run at the
+-# end of a test, we must replace dg-test with a wrapper.
+-
+-if { [info procs saved-dg-test] == [list] } {
+-    rename dg-test saved-dg-test
+-
+-    proc dg-test { args } {
+-	global additional_files
+-	global additional_sources
+-	global errorInfo
+-
+-	if { [ catch { eval saved-dg-test $args } errmsg ] } {
+-	    set saved_info $errorInfo
+-	    set additional_files ""
+-	    set additional_sources ""
+-	    error $errmsg $saved_info
+-	}
+-	set additional_files ""
+-	set additional_sources ""
+-    }
+-}
+-
+-# Local Variables:
+-# tcl-indent-level:4
+-# End:
+diff --git a/js/src/ctypes/libffi/testsuite/lib/libffi.exp b/js/src/ctypes/libffi/testsuite/lib/libffi.exp
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/lib/libffi.exp
+@@ -0,0 +1,409 @@
++#   Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++proc load_gcc_lib { filename } {
++    global srcdir
++    load_file $srcdir/lib/$filename
++}
++
++load_lib dg.exp
++load_lib libgloss.exp
++load_gcc_lib target-libpath.exp
++load_gcc_lib wrapper.exp
++
++
++# Define libffi callbacks for dg.exp.
++
++proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } {
++
++    # To get all \n in dg-output test strings to match printf output
++    # in a system that outputs it as \015\012 (i.e. not just \012), we
++    # need to change all \n into \r?\n.  As there is no dejagnu flag
++    # or hook to do that, we simply change the text being tested.
++    # Unfortunately, we have to know that the variable is called
++    # dg-output-text and lives in the caller of libffi-dg-test, which
++    # is two calls up.  Overriding proc dg-output would be longer and
++    # would necessarily have the same assumption.
++    upvar 2 dg-output-text output_match
++
++    if { [llength $output_match] > 1 } {
++	regsub -all "\n" [lindex $output_match 1] "\r?\n" x
++	set output_match [lreplace $output_match 1 1 $x]
++    }
++
++    # Set up the compiler flags, based on what we're going to do.
++
++    set options [list]
++    switch $do_what {
++	"compile" {
++	    set compile_type "assembly"
++	    set output_file "[file rootname [file tail $prog]].s"
++	}
++	"link" {
++	    set compile_type "executable"
++	    set output_file "[file rootname [file tail $prog]].exe"
++	    # The following line is needed for targets like the i960 where
++	    # the default output file is b.out.  Sigh.
++	}
++	"run" {
++	    set compile_type "executable"
++	    # FIXME: "./" is to cope with "." not being in $PATH.
++	    # Should this be handled elsewhere?
++	    # YES.
++	    set output_file "./[file rootname [file tail $prog]].exe"
++	    # This is the only place where we care if an executable was
++	    # created or not.  If it was, dg.exp will try to run it.
++	    remote_file build delete $output_file;
++	}
++	default {
++	    perror "$do_what: not a valid dg-do keyword"
++	    return ""
++	}
++    }
++
++    if { $extra_tool_flags != "" } {
++	lappend options "additional_flags=$extra_tool_flags"
++    }
++
++    set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options];
++
++
++    return [list $comp_output $output_file]
++}
++
++
++proc libffi-dg-test { prog do_what extra_tool_flags } {
++    return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags]
++}
++
++proc libffi-init { args } {
++    global gluefile wrap_flags;
++    global srcdir
++    global blddirffi
++    global objdir
++    global TOOL_OPTIONS
++    global tool
++    global libffi_include
++    global libffi_link_flags
++    global tool_root_dir
++    global ld_library_path
++
++    global using_gcc
++
++    set blddirffi [pwd]/.. 
++    verbose "libffi $blddirffi"
++
++    # Are we building with GCC?
++    set tmp [grep ../config.status "GCC='yes'"]
++    if { [string match $tmp "GCC='yes'"] } {
++
++      set using_gcc "yes"
++
++    set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
++    if {$gccdir != ""} {
++	set gccdir [file dirname $gccdir]
++    }
++    verbose "gccdir $gccdir"
++
++    set ld_library_path "."
++    append ld_library_path ":${gccdir}"
++
++    set compiler "${gccdir}/xgcc"
++    if { [is_remote host] == 0 && [which $compiler] != 0 } {
++	foreach i "[exec $compiler --print-multi-lib]" {
++	    set mldir ""
++	    regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
++	    set mldir [string trimright $mldir "\;@"]
++	    if { "$mldir" == "." } {
++		continue
++	    }
++	    if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
++		append ld_library_path ":${gccdir}/${mldir}"
++	    }
++	}
++    }
++ 
++    } else {
++
++      set using_gcc "no"
++
++    }
++
++    # add the library path for libffi.
++    append ld_library_path ":${blddirffi}/.libs"
++
++    verbose "ld_library_path: $ld_library_path"
++
++    # Point to the Libffi headers in libffi.
++    set libffi_include "${blddirffi}/include"
++    verbose "libffi_include $libffi_include"
++
++    set libffi_dir  "${blddirffi}/.libs"
++    verbose "libffi_dir $libffi_dir"
++    if { $libffi_dir != "" } {
++	set libffi_dir [file dirname ${libffi_dir}]
++	set libffi_link_flags "-L${libffi_dir}/.libs"
++    }
++
++    set_ld_library_path_env_vars
++    libffi_maybe_build_wrapper "${objdir}/testglue.o"
++}
++
++proc libffi_exit { } {
++    global gluefile;
++
++    if [info exists gluefile] {
++	file_on_build delete $gluefile;
++	unset gluefile;
++    }
++}
++
++proc libffi_target_compile { source dest type options } {
++    global gluefile wrap_flags;
++    global srcdir
++    global blddirffi
++    global TOOL_OPTIONS
++    global libffi_link_flags
++    global libffi_include
++    global target_triplet
++
++
++    if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
++	lappend options "libs=${gluefile}"
++	lappend options "ldflags=$wrap_flags"
++    }
++
++    # TOOL_OPTIONS must come first, so that it doesn't override testcase
++    # specific options.
++    if [info exists TOOL_OPTIONS] {
++	lappend  options [concat "additional_flags=$TOOL_OPTIONS" $options];
++    }
++
++    # search for ffi_mips.h in srcdir, too
++    lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include  -I${libffi_include}/.."
++    lappend options "additional_flags=${libffi_link_flags}"
++
++    # Darwin needs a stack execution allowed flag.
++
++    if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"]
++	 || [istarget "*-*-darwin2*"] } {
++	lappend options "additional_flags=-Wl,-allow_stack_execute"
++    }
++
++    # If you're building the compiler with --prefix set to a place
++    # where it's not yet installed, then the linker won't be able to
++    # find the libgcc used by libffi.dylib.  We could pass the
++    # -dylib_file option, but that's complicated, and it's much easier
++    # to just make the linker find libgcc using -L options.
++    if { [string match "*-*-darwin*" $target_triplet] } {
++	lappend options "libs= -shared-libgcc"
++    }
++
++    if { [string match "*-*-openbsd*" $target_triplet] } {
++	lappend options "libs= -lpthread"
++    }
++
++    lappend options "libs= -lffi"
++
++    if { [string match "aarch64*-*-linux*" $target_triplet] } {
++	lappend options "libs= -lpthread"
++    }
++
++    verbose "options: $options"
++    return [target_compile $source $dest $type $options]
++}
++
++# Utility routines.
++
++#
++# search_for -- looks for a string match in a file
++#
++proc search_for { file pattern } {
++    set fd [open $file r]
++    while { [gets $fd cur_line]>=0 } {
++	if [string match "*$pattern*" $cur_line] then {
++	    close $fd
++	    return 1
++	}
++    }
++    close $fd
++    return 0
++}
++
++# Modified dg-runtest that can cycle through a list of optimization options
++# as c-torture does.
++proc libffi-dg-runtest { testcases default-extra-flags } {
++    global runtests
++
++    foreach test $testcases {
++	# If we're only testing specific files and this isn't one of
++	# them, skip it.
++	if ![runtest_file_p $runtests $test] {
++	    continue
++	}
++
++	# Look for a loop within the source code - if we don't find one,
++	# don't pass -funroll[-all]-loops.
++	global torture_with_loops torture_without_loops
++	if [expr [search_for $test "for*("]+[search_for $test "while*("]] {
++	    set option_list $torture_with_loops
++	} else {
++	    set option_list $torture_without_loops
++	}
++
++	set nshort [file tail [file dirname $test]]/[file tail $test]
++
++	foreach flags $option_list {
++	    verbose "Testing $nshort, $flags" 1
++	    dg-test $test $flags ${default-extra-flags}
++	}
++    }
++}
++
++proc run-many-tests { testcases extra_flags } {
++    global using_gcc
++    if { [string match $using_gcc "yes"] } {
++        set common "-W -Wall"
++        set optimizations { "-O0" "-O2" "-O3" "-Os" "-O2 -fomit-frame-pointer" }
++    } else {
++        # Assume we are using the vendor compiler.
++        set common ""
++        set optimizations { "" }
++    }
++
++    set targetabis { "" }
++    if [string match $using_gcc "yes"] {
++        if [istarget "i?86-*-*"] {
++            set targetabis {
++                ""
++                "-DABI_NUM=FFI_STDCALL -DABI_ATTR=__STDCALL__"
++                "-DABI_NUM=FFI_THISCALL -DABI_ATTR=__THISCALL__"
++                "-DABI_NUM=FFI_FASTCALL -DABI_ATTR=__FASTCALL__"
++            }
++        }
++    }
++
++    set common [ concat $common $extra_flags ]
++    foreach test $testcases {
++        set testname [file tail $test]
++        if [search_for $test "ABI_NUM"] {
++            set abis $targetabis
++        } else {
++            set abis { "" }
++        }
++        foreach opt $optimizations {
++            foreach abi $abis {
++                set options [concat $common $opt $abi]
++                verbose "Testing $testname, $options" 1
++                dg-test $test $options ""
++            }
++        }
++    }
++}
++
++# Like check_conditional_xfail, but callable from a dg test.
++
++proc dg-xfail-if { args } {
++    set args [lreplace $args 0 0]
++    set selector "target [join [lindex $args 1]]"
++    if { [dg-process-target $selector] == "S" } {
++	global compiler_conditional_xfail_data
++	set compiler_conditional_xfail_data $args
++    }
++}
++
++proc check-flags { args } {
++
++    # The args are within another list; pull them out.
++    set args [lindex $args 0]
++
++    # The next two arguments are optional.  If they were not specified,
++    # use the defaults.
++    if { [llength $args] == 2 } {
++	lappend $args [list "*"]
++    }
++    if { [llength $args] == 3 } {
++	lappend $args [list ""]
++    }
++
++    # If the option strings are the defaults, or the same as the
++    # defaults, there is no need to call check_conditional_xfail to
++    # compare them to the actual options.
++    if { [string compare [lindex $args 2] "*"] == 0
++	 && [string compare [lindex $args 3] "" ] == 0 } {
++	set result 1    
++    } else {
++	# The target list might be an effective-target keyword, so replace
++	# the original list with "*-*-*", since we already know it matches.
++	set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]]
++    }
++
++    return $result
++}
++
++proc dg-skip-if { args } {
++    # Verify the number of arguments.  The last two are optional.
++    set args [lreplace $args 0 0]
++    if { [llength $args] < 2 || [llength $args] > 4 } {
++        error "dg-skip-if 2: need 2, 3, or 4 arguments"
++    }
++
++    # Don't bother if we're already skipping the test.
++    upvar dg-do-what dg-do-what
++    if { [lindex ${dg-do-what} 1] == "N" } {
++      return
++    }
++
++    set selector [list target [lindex $args 1]]
++    if { [dg-process-target $selector] == "S" } {
++        if [check-flags $args] {
++            upvar dg-do-what dg-do-what
++            set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
++        }
++    }
++}
++
++# We need to make sure that additional_files and additional_sources
++# are both cleared out after every test.  It is not enough to clear
++# them out *before* the next test run because gcc-target-compile gets
++# run directly from some .exp files (outside of any test).  (Those
++# uses should eventually be eliminated.)
++
++# Because the DG framework doesn't provide a hook that is run at the
++# end of a test, we must replace dg-test with a wrapper.
++
++if { [info procs saved-dg-test] == [list] } {
++    rename dg-test saved-dg-test
++
++    proc dg-test { args } {
++	global additional_files
++	global additional_sources
++	global errorInfo
++
++	if { [ catch { eval saved-dg-test $args } errmsg ] } {
++	    set saved_info $errorInfo
++	    set additional_files ""
++	    set additional_sources ""
++	    error $errmsg $saved_info
++	}
++	set additional_files ""
++	set additional_sources ""
++    }
++}
++
++# Local Variables:
++# tcl-indent-level:4
++# End:
+diff --git a/js/src/ctypes/libffi/testsuite/lib/target-libpath.exp b/js/src/ctypes/libffi/testsuite/lib/target-libpath.exp
+--- a/js/src/ctypes/libffi/testsuite/lib/target-libpath.exp
++++ b/js/src/ctypes/libffi/testsuite/lib/target-libpath.exp
+@@ -20,41 +20,43 @@ set orig_environment_saved 0
+ set orig_ld_library_path_saved 0
+ set orig_ld_run_path_saved 0
+ set orig_shlib_path_saved 0
+ set orig_ld_libraryn32_path_saved 0
+ set orig_ld_library64_path_saved 0
+ set orig_ld_library_path_32_saved 0
+ set orig_ld_library_path_64_saved 0
+ set orig_dyld_library_path_saved 0
+-
++set orig_path_saved 0
+ 
+ #######################################
+ # proc set_ld_library_path_env_vars { }
+ #######################################
+ 
+ proc set_ld_library_path_env_vars { } {
+   global ld_library_path
+   global orig_environment_saved
+   global orig_ld_library_path_saved
+   global orig_ld_run_path_saved
+   global orig_shlib_path_saved
+   global orig_ld_libraryn32_path_saved
+   global orig_ld_library64_path_saved
+   global orig_ld_library_path_32_saved
+   global orig_ld_library_path_64_saved
+   global orig_dyld_library_path_saved
++  global orig_path_saved
+   global orig_ld_library_path
+   global orig_ld_run_path
+   global orig_shlib_path
+   global orig_ld_libraryn32_path
+   global orig_ld_library64_path
+   global orig_ld_library_path_32
+   global orig_ld_library_path_64
+   global orig_dyld_library_path
++  global orig_path
+   global GCC_EXEC_PREFIX
+ 
+   # Set the relocated compiler prefix, but only if the user hasn't specified one.
+   if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } {
+     setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX"
+   }
+ 
+   # Setting the ld library path causes trouble when testing cross-compilers.
+@@ -95,16 +97,20 @@ proc set_ld_library_path_env_vars { } {
+     if [info exists env(LD_LIBRARY_PATH_64)] {
+       set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)"
+       set orig_ld_library_path_64_saved 1
+     }
+     if [info exists env(DYLD_LIBRARY_PATH)] {
+       set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)"
+       set orig_dyld_library_path_saved 1
+     }
++    if [info exists env(PATH)] {
++      set orig_path "$env(PATH)"
++      set orig_path_saved 1
++    }
+   }
+ 
+   # We need to set ld library path in the environment.  Currently,
+   # unix.exp doesn't set the environment correctly for all systems.
+   # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a
+   # program.  We also need the environment set for compilations, etc.
+   #
+   # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
+@@ -164,16 +170,23 @@ proc set_ld_library_path_env_vars { } {
+   } else {
+     setenv LD_LIBRARY_PATH_64 "$ld_library_path"
+   }
+   if { $orig_dyld_library_path_saved } {
+     setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path"
+   } else {
+     setenv DYLD_LIBRARY_PATH "$ld_library_path"
+   }
++  if { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } {
++    if { $orig_path_saved } {
++      setenv PATH "$ld_library_path:$orig_path"
++    } else {
++      setenv PATH "$ld_library_path"
++    }
++  }
+ 
+   verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path"
+ }
+ 
+ #######################################
+ # proc restore_ld_library_path_env_vars { }
+ #######################################
+ 
+@@ -182,24 +195,26 @@ proc restore_ld_library_path_env_vars { 
+   global orig_ld_library_path_saved
+   global orig_ld_run_path_saved
+   global orig_shlib_path_saved
+   global orig_ld_libraryn32_path_saved
+   global orig_ld_library64_path_saved
+   global orig_ld_library_path_32_saved
+   global orig_ld_library_path_64_saved
+   global orig_dyld_library_path_saved
++  global orig_path_saved
+   global orig_ld_library_path
+   global orig_ld_run_path
+   global orig_shlib_path
+   global orig_ld_libraryn32_path
+   global orig_ld_library64_path
+   global orig_ld_library_path_32
+   global orig_ld_library_path_64
+   global orig_dyld_library_path
++  global orig_path
+ 
+   if { $orig_environment_saved == 0 } {
+     return
+   }
+ 
+   if { $orig_ld_library_path_saved } {
+     setenv LD_LIBRARY_PATH "$orig_ld_library_path"
+   } elseif [info exists env(LD_LIBRARY_PATH)] {
+@@ -235,16 +250,21 @@ proc restore_ld_library_path_env_vars { 
+   } elseif [info exists env(LD_LIBRARY_PATH_64)] {
+     unsetenv LD_LIBRARY_PATH_64
+   }
+   if { $orig_dyld_library_path_saved } {
+     setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path"
+   } elseif [info exists env(DYLD_LIBRARY_PATH)] {
+     unsetenv DYLD_LIBRARY_PATH
+   }
++  if { $orig_path_saved } {
++    setenv PATH "$orig_path"
++  } elseif [info exists env(PATH)] {
++    unsetenv PATH
++  }
+ }
+ 
+ #######################################
+ # proc get_shlib_extension { }
+ #######################################
+ 
+ proc get_shlib_extension { } {
+     global shlib_ext
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/call.exp b/js/src/ctypes/libffi/testsuite/libffi.call/call.exp
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/call.exp
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/call.exp
+@@ -1,36 +1,31 @@
+-# Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc.
++# Copyright (C) 2003, 2006, 2009, 2010 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+-# libffi testsuite that uses the 'dg.exp' driver.
+-
+-load_lib libffi-dg.exp
+-
+ dg-init
+ libffi-init
+ 
+ global srcdir subdir
+ 
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O0 -W -Wall" ""
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2" ""
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O3" ""
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-Os" ""
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2 -fomit-frame-pointer" ""
++run-many-tests [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] ""
++if { [string match $using_gcc "yes"] } {
++  run-many-tests [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] "-shared-libgcc -lstdc++"
++}
+ 
+ dg-finish
+ 
+ # Local Variables:
+ # tcl-indent-level:4
+ # End:
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/closure_stdcall.c b/js/src/ctypes/libffi/testsuite/libffi.call/closure_stdcall.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/closure_stdcall.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/closure_stdcall.c
+@@ -1,15 +1,15 @@
+ /* Area:	closure_call (stdcall convention)
+    Purpose:	Check handling when caller expects stdcall callee
+    Limitations:	none.
+    PR:		none.
+    Originator:	<twalljava@dev.java.net> */
+ 
+-/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */
++/* { dg-do run { target i?86-*-* } } */
+ #include "ffitest.h"
+ 
+ static void
+ closure_test_stdcall(ffi_cif* cif __UNUSED__, void* resp, void** args,
+ 		 void* userdata)
+ {
+   *(ffi_arg*)resp =
+     (int)*(int *)args[0] + (int)(*(int *)args[1])
+@@ -18,47 +18,39 @@ closure_test_stdcall(ffi_cif* cif __UNUS
+ 
+   printf("%d %d %d %d: %d\n",
+ 	 (int)*(int *)args[0], (int)(*(int *)args[1]),
+ 	 (int)(*(int *)args[2]), (int)(*(int *)args[3]),
+          (int)*(ffi_arg *)resp);
+ 
+ }
+ 
+-typedef int (__stdcall *closure_test_type0)(int, int, int, int);
++typedef int (__STDCALL__ *closure_test_type0)(int, int, int, int);
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   ffi_type * cl_arg_types[17];
+   int res;
+-  void* sp_pre;
+-  void* sp_post;
+-  char buf[1024];
+ 
+   cl_arg_types[0] = &ffi_type_uint;
+   cl_arg_types[1] = &ffi_type_uint;
+   cl_arg_types[2] = &ffi_type_uint;
+   cl_arg_types[3] = &ffi_type_uint;
+   cl_arg_types[4] = NULL;
+ 
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 4,
+ 		     &ffi_type_sint, cl_arg_types) == FFI_OK);
+ 
+   CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_stdcall,
+                              (void *) 3 /* userdata */, code) == FFI_OK);
+ 
+-  asm volatile (" movl %%esp,%0" : "=g" (sp_pre));
+   res = (*(closure_test_type0)code)(0, 1, 2, 3);
+-  asm volatile (" movl %%esp,%0" : "=g" (sp_post));
+   /* { dg-output "0 1 2 3: 9" } */
+ 
+   printf("res: %d\n",res);
+   /* { dg-output "\nres: 9" } */
+ 
+-  sprintf(buf, "mismatch: pre=%p vs post=%p", sp_pre, sp_post);
+-  printf("stack pointer %s\n", (sp_pre == sp_post ? "match" : buf));
+-  /* { dg-output "\nstack pointer match" } */
+   exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/closure_thiscall.c b/js/src/ctypes/libffi/testsuite/libffi.call/closure_thiscall.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/closure_thiscall.c
+@@ -0,0 +1,56 @@
++/* Area:	closure_call (thiscall convention)
++   Purpose:	Check handling when caller expects thiscall callee
++   Limitations:	none.
++   PR:		none.
++   Originator:	<ktietz@redhat.com> */
++
++/* { dg-do run { target i?86-*-* } } */
++#include "ffitest.h"
++
++static void
++closure_test_thiscall(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		      void* userdata)
++{
++  *(ffi_arg*)resp =
++    (int)*(int *)args[0] + (int)(*(int *)args[1])
++    + (int)(*(int *)args[2])  + (int)(*(int *)args[3])
++    + (int)(intptr_t)userdata;
++
++  printf("%d %d %d %d: %d\n",
++	 (int)*(int *)args[0], (int)(*(int *)args[1]),
++	 (int)(*(int *)args[2]), (int)(*(int *)args[3]),
++         (int)*(ffi_arg *)resp);
++
++}
++
++typedef int (__THISCALL__ *closure_test_type0)(int, int, int, int);
++
++int main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
++  ffi_type * cl_arg_types[17];
++  int res;
++
++  cl_arg_types[0] = &ffi_type_uint;
++  cl_arg_types[1] = &ffi_type_uint;
++  cl_arg_types[2] = &ffi_type_uint;
++  cl_arg_types[3] = &ffi_type_uint;
++  cl_arg_types[4] = NULL;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_THISCALL, 4,
++		     &ffi_type_sint, cl_arg_types) == FFI_OK);
++
++  CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_thiscall,
++                             (void *) 3 /* userdata */, code) == FFI_OK);
++
++  res = (*(closure_test_type0)code)(0, 1, 2, 3);
++  /* { dg-output "0 1 2 3: 9" } */
++
++  printf("res: %d\n",res);
++  /* { dg-output "\nres: 9" } */
++
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_12byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_12byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_12byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_12byte.c
+@@ -44,25 +44,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_12byte h_dbl = { 7, 4, 9 };
++  struct cls_struct_12byte j_dbl = { 1, 5, 3 };
++  struct cls_struct_12byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_12byte h_dbl = { 7, 4, 9 };
+-  struct cls_struct_12byte j_dbl = { 1, 5, 3 };
+-  struct cls_struct_12byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_sint;
+   cls_struct_fields[1] = &ffi_type_sint;
+   cls_struct_fields[2] = &ffi_type_sint;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_16byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_16byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_16byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_16byte.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_16byte h_dbl = { 7, 8.0, 9 };
++  struct cls_struct_16byte j_dbl = { 1, 9.0, 3 };
++  struct cls_struct_16byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_16byte h_dbl = { 7, 8.0, 9 };
+-  struct cls_struct_16byte j_dbl = { 1, 9.0, 3 };
+-  struct cls_struct_16byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_sint;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = &ffi_type_sint;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_18byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_18byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_18byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_18byte.c
+@@ -49,25 +49,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[5];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 };
++  struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 };
++  struct cls_struct_18byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 };
+-  struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 };
+-  struct cls_struct_18byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_double;
+   cls_struct_fields[4] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_19byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_19byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_19byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_19byte.c
+@@ -52,25 +52,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[6];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct cls_struct_19byte g_dbl = { 1.0, 127, 126, 3.0, 120 };
++  struct cls_struct_19byte f_dbl = { 4.0, 125, 124, 5.0, 119 };
++  struct cls_struct_19byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_19byte g_dbl = { 1.0, 127, 126, 3.0, 120 };
+-  struct cls_struct_19byte f_dbl = { 4.0, 125, 124, 5.0, 119 };
+-  struct cls_struct_19byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_double;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[2];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_1_1byte g_dbl = { 12 };
++  struct cls_struct_1_1byte f_dbl = { 178 };
++  struct cls_struct_1_1byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_1_1byte g_dbl = { 12 };
+-  struct cls_struct_1_1byte f_dbl = { 178 };
+-  struct cls_struct_1_1byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_20byte g_dbl = { 1.0, 2.0, 3 };
++  struct cls_struct_20byte f_dbl = { 4.0, 5.0, 7 };
++  struct cls_struct_20byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_20byte g_dbl = { 1.0, 2.0, 3 };
+-  struct cls_struct_20byte f_dbl = { 4.0, 5.0, 7 };
+-  struct cls_struct_20byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = &ffi_type_sint;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte1.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte1.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte1.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_20byte1.c
+@@ -47,25 +47,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct cls_struct_20byte g_dbl = { 1, 2.0, 3.0 };
++  struct cls_struct_20byte f_dbl = { 4, 5.0, 7.0 };
++  struct cls_struct_20byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_20byte g_dbl = { 1, 2.0, 3.0 };
+-  struct cls_struct_20byte f_dbl = { 4, 5.0, 7.0 };
+-  struct cls_struct_20byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_sint;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = &ffi_type_double;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_24byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_24byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_24byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_24byte.c
+@@ -56,27 +56,27 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[5];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
+-  cls_struct_type.size = 0;
+-  cls_struct_type.alignment = 0;
+-  cls_struct_type.type = FFI_TYPE_STRUCT;
+-  cls_struct_type.elements = cls_struct_fields;
+-
+   struct cls_struct_24byte e_dbl = { 9.0, 2.0, 6, 5.0 };
+   struct cls_struct_24byte f_dbl = { 1.0, 2.0, 3, 7.0 };
+   struct cls_struct_24byte g_dbl = { 4.0, 5.0, 7, 9.0 };
+   struct cls_struct_24byte h_dbl = { 8.0, 6.0, 1, 4.0 };
+   struct cls_struct_24byte res_dbl;
+ 
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = &ffi_type_sint;
+   cls_struct_fields[3] = &ffi_type_float;
+   cls_struct_fields[4] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_2byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_2byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_2byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_2byte.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_2byte g_dbl = { 12, 127 };
++  struct cls_struct_2byte f_dbl = { 1, 13 };
++  struct cls_struct_2byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_2byte g_dbl = { 12, 127 };
+-  struct cls_struct_2byte f_dbl = { 1, 13 };
+-  struct cls_struct_2byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c
+@@ -49,25 +49,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_3_1byte g_dbl = { 12, 13, 14 };
++  struct cls_struct_3_1byte f_dbl = { 178, 179, 180 };
++  struct cls_struct_3_1byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_3_1byte g_dbl = { 12, 13, 14 };
+-  struct cls_struct_3_1byte f_dbl = { 178, 179, 180 };
+-  struct cls_struct_3_1byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte1.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte1.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte1.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte1.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_3byte g_dbl = { 12, 119 };
++  struct cls_struct_3byte f_dbl = { 1, 15 };
++  struct cls_struct_3byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_3byte g_dbl = { 12, 119 };
+-  struct cls_struct_3byte f_dbl = { 1, 15 };
+-  struct cls_struct_3byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_ushort;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte2.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_3byte2.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_3byte_1 g_dbl = { 15, 125 };
++  struct cls_struct_3byte_1 f_dbl = { 9, 19 };
++  struct cls_struct_3byte_1 res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_3byte_1 g_dbl = { 15, 125 };
+-  struct cls_struct_3byte_1 f_dbl = { 9, 19 };
+-  struct cls_struct_3byte_1 res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_ushort;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c
+@@ -51,25 +51,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[5];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_4_1byte g_dbl = { 12, 13, 14, 15 };
++  struct cls_struct_4_1byte f_dbl = { 178, 179, 180, 181 };
++  struct cls_struct_4_1byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_4_1byte g_dbl = { 12, 13, 14, 15 };
+-  struct cls_struct_4_1byte f_dbl = { 178, 179, 180, 181 };
+-  struct cls_struct_4_1byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_4byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_4byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_4byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_4byte.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_4byte g_dbl = { 127, 120 };
++  struct cls_struct_4byte f_dbl = { 12, 128 };
++  struct cls_struct_4byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_4byte g_dbl = { 127, 120 };
+-  struct cls_struct_4byte f_dbl = { 12, 128 };
+-  struct cls_struct_4byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_ushort;
+   cls_struct_fields[1] = &ffi_type_ushort;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c
+@@ -53,25 +53,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[6];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 };
++  struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 };
++  struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 };
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 };
+-  struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 };
+-  struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 };
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_5byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_5byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_5byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_5byte.c
+@@ -48,25 +48,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_5byte g_dbl = { 127, 120, 1 };
++  struct cls_struct_5byte f_dbl = { 12, 128, 9 };
++  struct cls_struct_5byte res_dbl = { 0, 0, 0 };
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_5byte g_dbl = { 127, 120, 1 };
+-  struct cls_struct_5byte f_dbl = { 12, 128, 9 };
+-  struct cls_struct_5byte res_dbl = { 0, 0, 0 };
+-
+   cls_struct_fields[0] = &ffi_type_ushort;
+   cls_struct_fields[1] = &ffi_type_ushort;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_64byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_64byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_64byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_64byte.c
+@@ -61,27 +61,27 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[9];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
+-  cls_struct_type.size = 0;
+-  cls_struct_type.alignment = 0;
+-  cls_struct_type.type = FFI_TYPE_STRUCT;
+-  cls_struct_type.elements = cls_struct_fields;
+-
+   struct cls_struct_64byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0 };
+   struct cls_struct_64byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0 };
+   struct cls_struct_64byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0 };
+   struct cls_struct_64byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0 };
+   struct cls_struct_64byte res_dbl;
+ 
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = &ffi_type_double;
+   cls_struct_fields[3] = &ffi_type_double;
+   cls_struct_fields[4] = &ffi_type_double;
+   cls_struct_fields[5] = &ffi_type_double;
+   cls_struct_fields[6] = &ffi_type_double;
+   cls_struct_fields[7] = &ffi_type_double;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c
+@@ -55,25 +55,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[7];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_6byte g_dbl = { 127, 120, 1, 3, 4, 5 };
++  struct cls_struct_6byte f_dbl = { 12, 128, 9, 3, 4, 5 };
++  struct cls_struct_6byte res_dbl = { 0, 0, 0, 0, 0, 0 };
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_6byte g_dbl = { 127, 120, 1, 3, 4, 5 };
+-  struct cls_struct_6byte f_dbl = { 12, 128, 9, 3, 4, 5 };
+-  struct cls_struct_6byte res_dbl = { 0, 0, 0, 0, 0, 0 };
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = &ffi_type_uchar;
+   cls_struct_fields[6] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_6byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_6byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_6byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_6byte.c
+@@ -51,25 +51,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[5];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_6byte g_dbl = { 127, 120, 1, 128 };
++  struct cls_struct_6byte f_dbl = { 12, 128, 9, 127 };
++  struct cls_struct_6byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_6byte g_dbl = { 127, 120, 1, 128 };
+-  struct cls_struct_6byte f_dbl = { 12, 128, 9, 127 };
+-  struct cls_struct_6byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_ushort;
+   cls_struct_fields[1] = &ffi_type_ushort;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c
+@@ -57,25 +57,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[8];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_7byte g_dbl = { 127, 120, 1, 3, 4, 5, 6 };
++  struct cls_struct_7byte f_dbl = { 12, 128, 9, 3, 4, 5, 6 };
++  struct cls_struct_7byte res_dbl = { 0, 0, 0, 0, 0, 0, 0 };
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_7byte g_dbl = { 127, 120, 1, 3, 4, 5, 6 };
+-  struct cls_struct_7byte f_dbl = { 12, 128, 9, 3, 4, 5, 6 };
+-  struct cls_struct_7byte res_dbl = { 0, 0, 0, 0, 0, 0, 0 };
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_uchar;
+   cls_struct_fields[4] = &ffi_type_uchar;
+   cls_struct_fields[5] = &ffi_type_uchar;
+   cls_struct_fields[6] = &ffi_type_uchar;
+   cls_struct_fields[7] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_7byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_7byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_7byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_7byte.c
+@@ -50,25 +50,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[5];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_7byte g_dbl = { 127, 120, 1, 254 };
++  struct cls_struct_7byte f_dbl = { 12, 128, 9, 255 };
++  struct cls_struct_7byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_7byte g_dbl = { 127, 120, 1, 254 };
+-  struct cls_struct_7byte f_dbl = { 12, 128, 9, 255 };
+-  struct cls_struct_7byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_ushort;
+   cls_struct_fields[1] = &ffi_type_ushort;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = &ffi_type_ushort;
+   cls_struct_fields[4] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_8byte.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_8byte.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_8byte.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_8byte.c
+@@ -44,25 +44,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_8byte g_dbl = { 1, 2.0 };
++  struct cls_struct_8byte f_dbl = { 4, 5.0 };
++  struct cls_struct_8byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_8byte g_dbl = { 1, 2.0 };
+-  struct cls_struct_8byte f_dbl = { 4, 5.0 };
+-  struct cls_struct_8byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_sint;
+   cls_struct_fields[1] = &ffi_type_float;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte1.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte1.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte1.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte1.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct cls_struct_9byte h_dbl = { 7, 8.0};
++  struct cls_struct_9byte j_dbl = { 1, 9.0};
++  struct cls_struct_9byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_9byte h_dbl = { 7, 8.0};
+-  struct cls_struct_9byte j_dbl = { 1, 9.0};
+-  struct cls_struct_9byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_sint;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte2.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_9byte2.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct cls_struct_9byte h_dbl = { 7.0, 8};
++  struct cls_struct_9byte j_dbl = { 1.0, 9};
++  struct cls_struct_9byte res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_9byte h_dbl = { 7.0, 8};
+-  struct cls_struct_9byte j_dbl = { 1.0, 9};
+-  struct cls_struct_9byte res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_sint;
+   cls_struct_fields[2] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_double.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_double.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_double.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_double.c
+@@ -47,25 +47,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_double;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_float.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_float.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_float.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_float.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_float;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c
+@@ -46,25 +46,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_longdouble;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c
+@@ -1,17 +1,17 @@
+ /* Area:	ffi_call, closure_call
+    Purpose:	Check structure alignment of long double.
+    Limitations:	none.
+    PR:		none.
+    Originator:	<hos@tamanegi.org> 20031203	 */
+ 
+ /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
+-/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
++/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
+ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+ 
+ #include "ffitest.h"
+ 
+ typedef struct cls_struct_align {
+   long double a;
+   long double b;
+   long double c;
+@@ -82,25 +82,25 @@ int main (void)
+ 	ffi_cif cif;
+         void *code;
+ 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void* args_dbl[3];
+ 	ffi_type* cls_struct_fields[8];
+ 	ffi_type cls_struct_type;
+ 	ffi_type* dbl_arg_types[3];
+ 
++	struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
++	struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
++	struct cls_struct_align res_dbl;
++
+ 	cls_struct_type.size = 0;
+ 	cls_struct_type.alignment = 0;
+ 	cls_struct_type.type = FFI_TYPE_STRUCT;
+ 	cls_struct_type.elements = cls_struct_fields;
+ 
+-	struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
+-	struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
+-	struct cls_struct_align res_dbl;
+-
+ 	cls_struct_fields[0] = &ffi_type_longdouble;
+ 	cls_struct_fields[1] = &ffi_type_longdouble;
+ 	cls_struct_fields[2] = &ffi_type_longdouble;
+ 	cls_struct_fields[3] = &ffi_type_longdouble;
+ 	cls_struct_fields[4] = &ffi_type_longdouble;
+ 	cls_struct_fields[5] = &ffi_type_longdouble;
+ 	cls_struct_fields[6] = &ffi_type_longdouble;
+ 	cls_struct_fields[7] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c
+@@ -2,17 +2,17 @@
+ 	Purpose:		Check structure alignment of long double.
+ 	Limitations:	none.
+ 	PR:				none.
+ 	Originator:		Blake Chaffin	6/18/2007
+ */
+ 
+ /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+ /* { dg-do run { xfail strongarm*-*-* } } */
+-/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
++/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
+ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+ 
+ #include "ffitest.h"
+ 
+ typedef struct cls_struct_align {
+   long double a;
+   long double b;
+   long double c;
+@@ -62,25 +62,25 @@ int main (void)
+ 	ffi_cif cif;
+         void *code;
+ 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void* args_dbl[3];
+ 	ffi_type* cls_struct_fields[8];
+ 	ffi_type cls_struct_type;
+ 	ffi_type* dbl_arg_types[3];
+ 
++	struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
++	struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
++	struct cls_struct_align res_dbl;
++
+ 	cls_struct_type.size = 0;
+ 	cls_struct_type.alignment = 0;
+ 	cls_struct_type.type = FFI_TYPE_STRUCT;
+ 	cls_struct_type.elements = cls_struct_fields;
+ 
+-	struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
+-	struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
+-	struct cls_struct_align res_dbl;
+-
+ 	cls_struct_fields[0] = &ffi_type_longdouble;
+ 	cls_struct_fields[1] = &ffi_type_longdouble;
+ 	cls_struct_fields[2] = &ffi_type_longdouble;
+ 	cls_struct_fields[3] = &ffi_type_longdouble;
+ 	cls_struct_fields[4] = &ffi_type_longdouble;
+ 	cls_struct_fields[5] = &ffi_type_double;
+ 	cls_struct_fields[6] = &ffi_type_longdouble;
+ 	cls_struct_fields[7] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c
+@@ -49,25 +49,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
++  struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_pointer;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_sshort;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_sint;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c
+@@ -46,25 +46,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_sint64;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_ushort;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c
+@@ -45,25 +45,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uint;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c
+@@ -47,25 +47,25 @@ int main (void)
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[4];
+   ffi_type cls_struct_type;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_align g_dbl = { 12, 4951, 127 };
++  struct cls_struct_align f_dbl = { 1, 9320, 13 };
++  struct cls_struct_align res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+-  struct cls_struct_align g_dbl = { 12, 4951, 127 };
+-  struct cls_struct_align f_dbl = { 1, 9320, 13 };
+-  struct cls_struct_align res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uint64;
+   cls_struct_fields[2] = &ffi_type_uchar;
+   cls_struct_fields[3] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type;
+   dbl_arg_types[1] = &cls_struct_type;
+   dbl_arg_types[2] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c
+@@ -32,29 +32,29 @@ int main(int argc __UNUSED__, char** arg
+ 
+         void *code;
+ 	ffi_closure*	pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	ffi_type*		cl_arg_types[1];
+ 
+ 	ffi_type	ts1_type;
+ 	ffi_type*	ts1_type_elements[4];
+ 
++	Dbls arg = { 1.0, 2.0 };
++
+ 	ts1_type.size = 0;
+ 	ts1_type.alignment = 0;
+ 	ts1_type.type = FFI_TYPE_STRUCT;
+ 	ts1_type.elements = ts1_type_elements;
+ 
+ 	ts1_type_elements[0] = &ffi_type_double;
+ 	ts1_type_elements[1] = &ffi_type_double;
+ 	ts1_type_elements[2] = NULL;
+ 
+ 	cl_arg_types[0] = &ts1_type;
+ 
+-	Dbls arg = { 1.0, 2.0 };
+-
+ 	/* Initialize the cif */
+ 	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+ 				 &ffi_type_void, cl_arg_types) == FFI_OK);
+ 
+ 	CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK);
+ 
+ 	((void*(*)(Dbls))(code))(arg);
+ 	/* { dg-output "1.0 2.0\n" } */
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c
+@@ -1,17 +1,17 @@
+ /* Area:		ffi_call, closure_call
+    Purpose:		Test doubles passed in variable argument lists.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin 6/6/2007	 */
+ 
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
+ /* { dg-output "" { xfail avr32*-*-* } } */
+-/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */
++/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
+ 
+ #include "ffitest.h"
+ 
+ static void
+ cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp, 
+ 		 void** args, void* userdata __UNUSED__)
+ {
+ 	char*	format		= *(char**)args[0];
+@@ -31,29 +31,31 @@ int main (void)
+ 	char*	format		= "%.1f\n";
+ 	double	doubleArg	= 7;
+ 	ffi_arg	res			= 0;
+ 
+ 	arg_types[0] = &ffi_type_pointer;
+ 	arg_types[1] = &ffi_type_double;
+ 	arg_types[2] = NULL;
+ 
+-	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
+-		arg_types) == FFI_OK);
++	/* This printf call is variadic */
++	CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
++			       arg_types) == FFI_OK);
+ 
+ 	args[0] = &format;
+ 	args[1] = &doubleArg;
+ 	args[2] = NULL;
+ 
+ 	ffi_call(&cif, FFI_FN(printf), &res, args);
+-	// { dg-output "7.0" }
++	/* { dg-output "7.0" } */
+ 	printf("res: %d\n", (int) res);
+-	// { dg-output "\nres: 4" }
++	/* { dg-output "\nres: 4" } */
+ 
+-	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK);
++	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL,
++				   code) == FFI_OK);
+ 
+-	res	= ((int(*)(char*, double))(code))(format, doubleArg);
+-	// { dg-output "\n7.0" }
++	res = ((int(*)(char*, ...))(code))(format, doubleArg);
++	/* { dg-output "\n7.0" } */
+ 	printf("res: %d\n", (int) res);
+-	// { dg-output "\nres: 4" }
++	/* { dg-output "\nres: 4" } */
+ 
+ 	exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble.c
+@@ -1,17 +1,19 @@
+ /* Area:		ffi_call, closure_call
+    Purpose:		Check long double arguments.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin	*/
+ 
+ /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+-/* { dg-do run { xfail arm*-*-* strongarm*-*-* xscale*-*-* } } */
+-/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
++/* This test is known to PASS on armv7l-unknown-linux-gnueabihf, so I have
++   remove the xfail for arm*-*-* below, until we know more.  */
++/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
++/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
+ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+ 
+ #include "ffitest.h"
+ 
+ long double cls_ldouble_fn(
+ 	long double	a1,
+ 	long double	a2,
+ 	long double	a3,
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c
+@@ -1,17 +1,17 @@
+ /* Area:		ffi_call, closure_call
+    Purpose:		Test long doubles passed in variable argument lists.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin 6/6/2007	 */
+ 
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
+ /* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */
+-/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */
++/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
+ 
+ #include "ffitest.h"
+ 
+ static void
+ cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, 
+ 		     void** args, void* userdata __UNUSED__)
+ {
+ 	char*		format	= *(char**)args[0];
+@@ -31,29 +31,31 @@ int main (void)
+ 	char*		format	= "%.1Lf\n";
+ 	long double	ldArg	= 7;
+ 	ffi_arg		res		= 0;
+ 
+ 	arg_types[0] = &ffi_type_pointer;
+ 	arg_types[1] = &ffi_type_longdouble;
+ 	arg_types[2] = NULL;
+ 
+-	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
+-		arg_types) == FFI_OK);
++	/* This printf call is variadic */
++	CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
++			       arg_types) == FFI_OK);
+ 
+ 	args[0] = &format;
+ 	args[1] = &ldArg;
+ 	args[2] = NULL;
+ 
+ 	ffi_call(&cif, FFI_FN(printf), &res, args);
+-	// { dg-output "7.0" }
++	/* { dg-output "7.0" } */
+ 	printf("res: %d\n", (int) res);
+-	// { dg-output "\nres: 4" }
++	/* { dg-output "\nres: 4" } */
+ 
+-	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK);
++	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL,
++				   code) == FFI_OK);
+ 
+-	res	= ((int(*)(char*, long double))(code))(format, ldArg);
+-	// { dg-output "\n7.0" }
++	res = ((int(*)(char*, ...))(code))(format, ldArg);
++	/* { dg-output "\n7.0" } */
+ 	printf("res: %d\n", (int) res);
+-	// { dg-output "\nres: 4" }
++	/* { dg-output "\nres: 4" } */
+ 
+ 	exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer.c
+@@ -30,17 +30,17 @@ cls_pointer_gn(ffi_cif* cif __UNUSED__, 
+ }
+ 
+ int main (void)
+ {
+ 	ffi_cif	cif;
+         void *code;
+ 	ffi_closure*	pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void*			args[3];
+-//	ffi_type		cls_pointer_type;
++	/*	ffi_type		cls_pointer_type; */
+ 	ffi_type*		arg_types[3];
+ 
+ /*	cls_pointer_type.size = sizeof(void*);
+ 	cls_pointer_type.alignment = 0;
+ 	cls_pointer_type.type = FFI_TYPE_POINTER;
+ 	cls_pointer_type.elements = NULL;*/
+ 
+ 	void*	arg1	= (void*)0x12345678;
+@@ -60,15 +60,15 @@ int main (void)
+ 
+ 	ffi_call(&cif, FFI_FN(cls_pointer_fn), &res, args);
+ 	/* { dg-output "0x12345678 0x89abcdef: 0x9be02467" } */
+ 	printf("res: 0x%08x\n", (unsigned int) res);
+ 	/* { dg-output "\nres: 0x9be02467" } */
+ 
+ 	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK);
+ 
+-	res = (ffi_arg)((void*(*)(void*, void*))(code))(arg1, arg2);
++	res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2);
+ 	/* { dg-output "\n0x12345678 0x89abcdef: 0x9be02467" } */
+ 	printf("res: 0x%08x\n", (unsigned int) res);
+ 	/* { dg-output "\nres: 0x9be02467" } */
+ 
+ 	exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c
+@@ -23,21 +23,22 @@ void* cls_pointer_fn2(void* a1, void* a2
+ 	long double	trample1	= (intptr_t)a1 + (intptr_t)a2;
+ 	char		trample2	= ((char*)&a1)[0] + ((char*)&a2)[0];
+ 	long double	trample3	= (intptr_t)trample1 + (intptr_t)a1;
+ 	char		trample4	= trample2 + ((char*)&a1)[1];
+ 	long double	trample5	= (intptr_t)trample3 + (intptr_t)a2;
+ 	char		trample6	= trample4 + ((char*)&a2)[1];
+ 	long double	trample7	= (intptr_t)trample5 + (intptr_t)trample1;
+ 	char		trample8	= trample6 + trample2;
++	void*		result;
+ 
+ 	dummyVar	= dummy_func(trample1, trample2, trample3, trample4,
+ 		trample5, trample6, trample7, trample8);
+ 
+-	void*	result	= (void*)((intptr_t)a1 + (intptr_t)a2);
++	result	= (void*)((intptr_t)a1 + (intptr_t)a2);
+ 
+ 	printf("0x%08x 0x%08x: 0x%08x\n", 
+ 	       (unsigned int)(uintptr_t) a1,
+                (unsigned int)(uintptr_t) a2,
+                (unsigned int)(uintptr_t) result);
+ 
+ 	return result;
+ }
+@@ -47,21 +48,22 @@ void* cls_pointer_fn1(void* a1, void* a2
+ 	long double	trample1	= (intptr_t)a1 + (intptr_t)a2;
+ 	char		trample2	= ((char*)&a1)[0] + ((char*)&a2)[0];
+ 	long double	trample3	= (intptr_t)trample1 + (intptr_t)a1;
+ 	char		trample4	= trample2 + ((char*)&a1)[1];
+ 	long double	trample5	= (intptr_t)trample3 + (intptr_t)a2;
+ 	char		trample6	= trample4 + ((char*)&a2)[1];
+ 	long double	trample7	= (intptr_t)trample5 + (intptr_t)trample1;
+ 	char		trample8	= trample6 + trample2;
++	void*		result;
+ 
+ 	dummyVar	= dummy_func(trample1, trample2, trample3, trample4,
+ 		trample5, trample6, trample7, trample8);
+ 
+-	void*	result	= (void*)((intptr_t)a1 + (intptr_t)a2);
++	result	= (void*)((intptr_t)a1 + (intptr_t)a2);
+ 
+ 	printf("0x%08x 0x%08x: 0x%08x\n",
+                (unsigned int)(intptr_t) a1,
+                (unsigned int)(intptr_t) a2,
+                (unsigned int)(intptr_t) result);
+ 
+ 	result	= cls_pointer_fn2(result, a1);
+ 
+@@ -91,17 +93,17 @@ cls_pointer_gn(ffi_cif* cif __UNUSED__, 
+ }
+ 
+ int main (void)
+ {
+ 	ffi_cif	cif;
+         void *code;
+ 	ffi_closure*	pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void*			args[3];
+-//	ffi_type		cls_pointer_type;
++	/*	ffi_type		cls_pointer_type; */
+ 	ffi_type*		arg_types[3];
+ 
+ /*	cls_pointer_type.size = sizeof(void*);
+ 	cls_pointer_type.alignment = 0;
+ 	cls_pointer_type.type = FFI_TYPE_POINTER;
+ 	cls_pointer_type.elements = NULL;*/
+ 
+ 	void*	arg1	= (void*)0x01234567;
+@@ -118,23 +120,23 @@ int main (void)
+ 	args[0] = &arg1;
+ 	args[1] = &arg2;
+ 	args[2] = NULL;
+ 
+ 	printf("\n");
+ 	ffi_call(&cif, FFI_FN(cls_pointer_fn1), &res, args);
+ 
+ 	printf("res: 0x%08x\n", (unsigned int) res);
+-	// { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" }
+-	// { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" }
+-	// { dg-output "\nres: 0x8bf258bd" }
++	/* { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } */
++	/* { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } */
++	/* { dg-output "\nres: 0x8bf258bd" } */
+ 
+ 	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK);
+ 
+-	res = (ffi_arg)((void*(*)(void*, void*))(code))(arg1, arg2);
++	res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2);
+ 
+ 	printf("res: 0x%08x\n", (unsigned int) res);
+-	// { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" }
+-	// { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" }
+-	// { dg-output "\nres: 0x8bf258bd" }
++	/* { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } */
++	/* { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } */
++	/* { dg-output "\nres: 0x8bf258bd" } */
+ 
+ 	exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_struct_va1.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_struct_va1.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_struct_va1.c
+@@ -0,0 +1,114 @@
++/* Area:		ffi_call, closure_call
++   Purpose:		Test doubles passed in variable argument lists.
++   Limitations:	none.
++   PR:			none.
++   Originator:	Blake Chaffin 6/6/2007	 */
++
++/* { dg-do run } */
++/* { dg-output "" { xfail avr32*-*-* } } */
++#include "ffitest.h"
++
++struct small_tag
++{
++  unsigned char a;
++  unsigned char b;
++};
++
++struct large_tag
++{
++  unsigned a;
++  unsigned b;
++  unsigned c;
++  unsigned d;
++  unsigned e;
++};
++
++static void
++test_fn (ffi_cif* cif __UNUSED__, void* resp,
++	 void** args, void* userdata __UNUSED__)
++{
++  int n = *(int*)args[0];
++  struct small_tag s1 = * (struct small_tag *) args[1];
++  struct large_tag l1 = * (struct large_tag *) args[2];
++  struct small_tag s2 = * (struct small_tag *) args[3];
++
++  printf ("%d %d %d %d %d %d %d %d %d %d\n", n, s1.a, s1.b,
++	  l1.a, l1.b, l1.c, l1.d, l1.e,
++	  s2.a, s2.b);
++  * (ffi_arg*) resp = 42;
++}
++
++int
++main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = ffi_closure_alloc (sizeof (ffi_closure), &code);
++  ffi_type* arg_types[5];
++
++  ffi_arg res = 0;
++
++  ffi_type s_type;
++  ffi_type *s_type_elements[3];
++
++  ffi_type l_type;
++  ffi_type *l_type_elements[6];
++
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l1;
++
++  int si;
++
++  s_type.size = 0;
++  s_type.alignment = 0;
++  s_type.type = FFI_TYPE_STRUCT;
++  s_type.elements = s_type_elements;
++
++  s_type_elements[0] = &ffi_type_uchar;
++  s_type_elements[1] = &ffi_type_uchar;
++  s_type_elements[2] = NULL;
++
++  l_type.size = 0;
++  l_type.alignment = 0;
++  l_type.type = FFI_TYPE_STRUCT;
++  l_type.elements = l_type_elements;
++
++  l_type_elements[0] = &ffi_type_uint;
++  l_type_elements[1] = &ffi_type_uint;
++  l_type_elements[2] = &ffi_type_uint;
++  l_type_elements[3] = &ffi_type_uint;
++  l_type_elements[4] = &ffi_type_uint;
++  l_type_elements[5] = NULL;
++
++  arg_types[0] = &ffi_type_sint;
++  arg_types[1] = &s_type;
++  arg_types[2] = &l_type;
++  arg_types[3] = &s_type;
++  arg_types[4] = NULL;
++
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint,
++			 arg_types) == FFI_OK);
++
++  si = 4;
++  s1.a = 5;
++  s1.b = 6;
++
++  s2.a = 20;
++  s2.b = 21;
++
++  l1.a = 10;
++  l1.b = 11;
++  l1.c = 12;
++  l1.d = 13;
++  l1.e = 14;
++
++  CHECK(ffi_prep_closure_loc(pcl, &cif, test_fn, NULL, code) == FFI_OK);
++
++  res = ((int (*)(int, ...))(code))(si, s1, l1, s2);
++  /* { dg-output "4 5 6 10 11 12 13 14 20 21" } */
++  printf("res: %d\n", (int) res);
++  /* { dg-output "\nres: 42" } */
++
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_uchar_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_uchar_va.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_uchar_va.c
+@@ -0,0 +1,44 @@
++/* Area:	closure_call
++   Purpose:	Test anonymous unsigned char argument.
++   Limitations:	none.
++   PR:		none.
++   Originator:	ARM Ltd. */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++typedef unsigned char T;
++
++static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			 void* userdata __UNUSED__)
++ {
++   *(ffi_arg *)resp = *(T *)args[0];
++
++   printf("%d: %d %d\n", (int)(*(ffi_arg *)resp), *(T *)args[0], *(T *)args[1]);
++ }
++
++typedef T (*cls_ret_T)(T, ...);
++
++int main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
++  ffi_type * cl_arg_types[3];
++  T res;
++
++  cl_arg_types[0] = &ffi_type_uchar;
++  cl_arg_types[1] = &ffi_type_uchar;
++  cl_arg_types[2] = NULL;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2,
++			 &ffi_type_uchar, cl_arg_types) == FFI_OK);
++
++  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code)  == FFI_OK);
++  res = ((((cls_ret_T)code)(67, 4)));
++  /* { dg-output "67: 67 4" } */
++  printf("res: %d\n", res);
++  /* { dg-output "\nres: 67" } */
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_uint_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_uint_va.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_uint_va.c
+@@ -0,0 +1,45 @@
++/* Area:	closure_call
++   Purpose:	Test anonymous unsigned int argument.
++   Limitations:	none.
++   PR:		none.
++   Originator:	ARM Ltd. */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++typedef unsigned int T;
++
++static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			 void* userdata __UNUSED__)
++ {
++   *(ffi_arg *)resp = *(T *)args[0];
++
++   printf("%d: %d %d\n", (int)*(ffi_arg *)resp, *(T *)args[0], *(T *)args[1]);
++ }
++
++typedef T (*cls_ret_T)(T, ...);
++
++int main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
++  ffi_type * cl_arg_types[3];
++  T res;
++
++  cl_arg_types[0] = &ffi_type_uint;
++  cl_arg_types[1] = &ffi_type_uint;
++  cl_arg_types[2] = NULL;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2,
++			 &ffi_type_uint, cl_arg_types) == FFI_OK);
++
++  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code)  == FFI_OK);
++  res = ((((cls_ret_T)code)(67, 4)));
++  /* { dg-output "67: 67 4" } */
++  printf("res: %d\n", res);
++  /* { dg-output "\nres: 67" } */
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulong_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulong_va.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulong_va.c
+@@ -0,0 +1,45 @@
++/* Area:	closure_call
++   Purpose:	Test anonymous unsigned long argument.
++   Limitations:	none.
++   PR:		none.
++   Originator:	ARM Ltd. */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++typedef unsigned long T;
++
++static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			 void* userdata __UNUSED__)
++ {
++   *(T *)resp = *(T *)args[0];
++
++   printf("%ld: %ld %ld\n", *(T *)resp, *(T *)args[0], *(T *)args[1]);
++ }
++
++typedef T (*cls_ret_T)(T, ...);
++
++int main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
++  ffi_type * cl_arg_types[3];
++  T res;
++
++  cl_arg_types[0] = &ffi_type_ulong;
++  cl_arg_types[1] = &ffi_type_ulong;
++  cl_arg_types[2] = NULL;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2,
++			 &ffi_type_ulong, cl_arg_types) == FFI_OK);
++
++  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code)  == FFI_OK);
++  res = ((((cls_ret_T)code)(67, 4)));
++  /* { dg-output "67: 67 4" } */
++  printf("res: %ld\n", res);
++  /* { dg-output "\nres: 67" } */
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c
+@@ -6,17 +6,17 @@
+ 
+ /* { dg-do run } */
+ /* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */
+ #include "ffitest.h"
+ 
+ static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp,
+ 				 void** args, void* userdata __UNUSED__)
+ {
+-  *(unsigned long long *)resp=  *(unsigned long long *)args[0];
++  *(unsigned long long *)resp= 0xfffffffffffffffLL ^ *(unsigned long long *)args[0];
+ 
+   printf("%" PRIuLL ": %" PRIuLL "\n",*(unsigned long long *)args[0],
+ 	 *(unsigned long long *)(resp));
+ }
+ typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long);
+ 
+ int main (void)
+ {
+@@ -29,19 +29,19 @@ int main (void)
+   cl_arg_types[0] = &ffi_type_uint64;
+   cl_arg_types[1] = NULL;
+ 
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+ 		     &ffi_type_uint64, cl_arg_types) == FFI_OK);
+   CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ulonglong_fn, NULL, code)  == FFI_OK);
+   res = (*((cls_ret_ulonglong)code))(214LL);
+-  /* { dg-output "214: 214" } */
++  /* { dg-output "214: 1152921504606846761" } */
+   printf("res: %" PRIdLL "\n", res);
+-  /* { dg-output "\nres: 214" } */
++  /* { dg-output "\nres: 1152921504606846761" } */
+ 
+   res = (*((cls_ret_ulonglong)code))(9223372035854775808LL);
+-  /* { dg-output "\n9223372035854775808: 9223372035854775808" } */
++  /* { dg-output "\n9223372035854775808: 8070450533247928831" } */
+   printf("res: %" PRIdLL "\n", res);
+-  /* { dg-output "\nres: 9223372035854775808" } */
++  /* { dg-output "\nres: 8070450533247928831" } */
+ 
+   exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_ushort_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_ushort_va.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_ushort_va.c
+@@ -0,0 +1,44 @@
++/* Area:	closure_call
++   Purpose:	Test anonymous unsigned short argument.
++   Limitations:	none.
++   PR:		none.
++   Originator:	ARM Ltd. */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++typedef unsigned short T;
++
++static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			 void* userdata __UNUSED__)
++ {
++   *(ffi_arg *)resp = *(T *)args[0];
++
++   printf("%d: %d %d\n", (int)(*(ffi_arg *)resp), *(T *)args[0], *(T *)args[1]);
++ }
++
++typedef T (*cls_ret_T)(T, ...);
++
++int main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
++  ffi_type * cl_arg_types[3];
++  T res;
++
++  cl_arg_types[0] = &ffi_type_ushort;
++  cl_arg_types[1] = &ffi_type_ushort;
++  cl_arg_types[2] = NULL;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2,
++			 &ffi_type_ushort, cl_arg_types) == FFI_OK);
++
++  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code)  == FFI_OK);
++  res = ((((cls_ret_T)code)(67, 4)));
++  /* { dg-output "67: 67 4" } */
++  printf("res: %d\n", res);
++  /* { dg-output "\nres: 67" } */
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_abi.c b/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_abi.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_abi.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_abi.c
+@@ -1,15 +1,16 @@
+ /* Area:		ffi_prep_cif, ffi_prep_closure
+    Purpose:		Test error return for bad ABIs.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin 6/6/2007	 */
+ 
+-/* { dg-do run { xfail *-*-* } } */
++/* { dg-do run } */
++
+ #include "ffitest.h"
+ 
+ static void
+ dummy_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, 
+ 	 void** args __UNUSED__, void* userdata __UNUSED__)
+ {}
+ 
+ int main (void)
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c b/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c
+@@ -1,25 +1,26 @@
+ /* Area:		ffi_prep_cif
+    Purpose:		Test error return for bad typedefs.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin 6/6/2007	 */
+ 
+-/* { dg-do run { xfail *-*-* } } */
++/* { dg-do run } */
++
+ #include "ffitest.h"
+ 
+ int main (void)
+ {
+ 	ffi_cif cif;
+ 	ffi_type* arg_types[1];
+ 
++	ffi_type	badType	= ffi_type_void;
++
+ 	arg_types[0] = NULL;
+ 
+-	ffi_type	badType	= ffi_type_void;
+-
+ 	badType.size = 0;
+ 
+ 	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &badType,
+ 		arg_types) == FFI_BAD_TYPEDEF);
+ 
+ 	exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/ffitest.h b/js/src/ctypes/libffi/testsuite/libffi.call/ffitest.h
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/ffitest.h
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/ffitest.h
+@@ -10,24 +10,35 @@
+ #endif
+ 
+ #if defined HAVE_INTTYPES_H
+ #include <inttypes.h>
+ #endif
+ 
+ #define MAX_ARGS 256
+ 
+-#define CHECK(x) !(x) ? abort() : 0
++#define CHECK(x) (!(x) ? (abort(), 1) : 0)
+ 
+-/* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
++/* Define macros so that compilers other than gcc can run the tests.  */
+ #undef __UNUSED__
+ #if defined(__GNUC__)
+ #define __UNUSED__ __attribute__((__unused__))
++#define __STDCALL__ __attribute__((stdcall))
++#define __THISCALL__ __attribute__((thiscall))
++#define __FASTCALL__ __attribute__((fastcall))
+ #else
+ #define __UNUSED__
++#define __STDCALL__ __stdcall
++#define __THISCALL__ __thiscall
++#define __FASTCALL__ __fastcall
++#endif
++
++#ifndef ABI_NUM
++#define ABI_NUM FFI_DEFAULT_ABI
++#define ABI_ATTR
+ #endif
+ 
+ /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
+    file open.  */
+ #ifdef HAVE_MMAP_ANON
+ # undef HAVE_MMAP_DEV_ZERO
+ 
+ # include <sys/mman.h>
+@@ -62,68 +73,63 @@
+ 
+ /* Tru64 UNIX kludge.  */
+ #if defined(__alpha__) && defined(__osf__)
+ /* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit.  */
+ #undef PRIdLL
+ #define PRIdLL "ld"
+ #undef PRIuLL
+ #define PRIuLL "lu"
++#define PRId8 "hd"
++#define PRIu8 "hu"
+ #define PRId64 "ld"
+ #define PRIu64 "lu"
+ #define PRIuPTR "lu"
+ #endif
+ 
+ /* PA HP-UX kludge.  */
+ #if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR)
+ #define PRIuPTR "lu"
+ #endif
+ 
++/* IRIX kludge.  */
++#if defined(__sgi)
++/* IRIX 6.5 <inttypes.h> provides all definitions, but only for C99
++   compilations.  */
++#define PRId8 "hhd"
++#define PRIu8 "hhu"
++#if (_MIPS_SZLONG == 32)
++#define PRId64 "lld"
++#define PRIu64 "llu"
++#endif
++/* This doesn't match <inttypes.h>, which always has "lld" here, but the
++   arguments are uint64_t, int64_t, which are unsigned long, long for
++   64-bit in <sgidefs.h>.  */
++#if (_MIPS_SZLONG == 64)
++#define PRId64 "ld"
++#define PRIu64 "lu"
++#endif
++/* This doesn't match <inttypes.h>, which has "u" here, but the arguments
++   are uintptr_t, which is always unsigned long.  */
++#define PRIuPTR "lu"
++#endif
++
+ /* Solaris < 10 kludge.  */
+ #if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR)
+ #if defined(__arch64__) || defined (__x86_64__)
+ #define PRIuPTR "lu"
+ #else
+ #define PRIuPTR "u"
+ #endif
+ #endif
+ 
+-#ifdef USING_MMAP
+-static inline void *
+-allocate_mmap (size_t size)
+-{
+-  void *page;
+-#if defined (HAVE_MMAP_DEV_ZERO)
+-  static int dev_zero_fd = -1;
++/* MSVC kludge.  */
++#if defined _MSC_VER
++#define PRIuPTR "lu"
++#define PRIu8 "u"
++#define PRId8 "d"
++#define PRIu64 "I64u"
++#define PRId64 "I64d"
+ #endif
+ 
+-#ifdef HAVE_MMAP_DEV_ZERO
+-  if (dev_zero_fd == -1)
+-    {
+-      dev_zero_fd = open ("/dev/zero", O_RDONLY);
+-      if (dev_zero_fd == -1)
+-	{
+-	  perror ("open /dev/zero: %m");
+-	  exit (1);
+-	}
+-    }
++#ifndef PRIuPTR
++#define PRIuPTR "u"
+ #endif
+-
+-
+-#ifdef HAVE_MMAP_ANON
+-  page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
+-	       MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+-#endif
+-#ifdef HAVE_MMAP_DEV_ZERO
+-  page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
+-	       MAP_PRIVATE, dev_zero_fd, 0);
+-#endif
+-
+-  if (page == (void *) MAP_FAILED)
+-    {
+-      perror ("virtual memory exhausted");
+-      exit (1);
+-    }
+-
+-  return page;
+-}
+-
+-#endif
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/float_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/float_va.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/float_va.c
+@@ -0,0 +1,107 @@
++/* Area:        fp and variadics
++   Purpose:     check fp inputs and returns work on variadics, even the fixed params
++   Limitations: None
++   PR:          none
++   Originator:  <david.gilbert@linaro.org> 2011-01-25
++
++   Intended to stress the difference in ABI on ARM vfp
++*/
++
++/* { dg-do run } */
++
++#include <stdarg.h>
++
++#include "ffitest.h"
++
++/* prints out all the parameters, and returns the sum of them all.
++ * 'x' is the number of variadic parameters all of which are double in this test
++ */
++double float_va_fn(unsigned int x, double y,...)
++{
++  double total=0.0;
++  va_list ap;
++  unsigned int i;
++
++  total+=(double)x;
++  total+=y;
++
++  printf("%u: %.1f :", x, y);
++
++  va_start(ap, y);
++  for(i=0;i<x;i++)
++  {
++    double arg=va_arg(ap, double);
++    total+=arg;
++    printf(" %d:%.1f ", i, arg);
++  }
++  va_end(ap);
++
++  printf(" total: %.1f\n", total);
++
++  return total;
++}
++
++int main (void)
++{
++  ffi_cif    cif;
++
++  ffi_type    *arg_types[5];
++  void        *values[5];
++  double        doubles[5];
++  unsigned int firstarg;
++  double        resfp;
++
++  /* First test, pass float_va_fn(0,2.0) - note there are no actual
++   * variadic parameters, but it's declared variadic so the ABI may be
++   * different. */
++  /* Call it statically and then via ffi */
++  resfp=float_va_fn(0,2.0);
++  /* { dg-output "0: 2.0 : total: 2.0" } */
++  printf("compiled: %.1f\n", resfp);
++  /* { dg-output "\ncompiled: 2.0" } */
++
++  arg_types[0] = &ffi_type_uint;
++  arg_types[1] = &ffi_type_double;
++  arg_types[2] = NULL;
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 2,
++        &ffi_type_double, arg_types) == FFI_OK);
++
++  firstarg = 0;
++  doubles[0] = 2.0;
++  values[0] = &firstarg;
++  values[1] = &doubles[0];
++  ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values);
++  /* { dg-output "\n0: 2.0 : total: 2.0" } */
++  printf("ffi: %.1f\n", resfp);
++  /* { dg-output "\nffi: 2.0" } */
++
++  /* Second test, float_va_fn(2,2.0,3.0,4.0), now with variadic params */
++  /* Call it statically and then via ffi */
++  resfp=float_va_fn(2,2.0,3.0,4.0);
++  /* { dg-output "\n2: 2.0 : 0:3.0  1:4.0  total: 11.0" } */
++  printf("compiled: %.1f\n", resfp);
++  /* { dg-output "\ncompiled: 11.0" } */
++
++  arg_types[0] = &ffi_type_uint;
++  arg_types[1] = &ffi_type_double;
++  arg_types[2] = &ffi_type_double;
++  arg_types[3] = &ffi_type_double;
++  arg_types[4] = NULL;
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 4,
++        &ffi_type_double, arg_types) == FFI_OK);
++
++  firstarg = 2;
++  doubles[0] = 2.0;
++  doubles[1] = 3.0;
++  doubles[2] = 4.0;
++  values[0] = &firstarg;
++  values[1] = &doubles[0];
++  values[2] = &doubles[1];
++  values[3] = &doubles[2];
++  ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values);
++  /* { dg-output "\n2: 2.0 : 0:3.0  1:4.0  total: 11.0" } */
++  printf("ffi: %.1f\n", resfp);
++  /* { dg-output "\nffi: 11.0" } */
++
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/huge_struct.c b/js/src/ctypes/libffi/testsuite/libffi.call/huge_struct.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/huge_struct.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/huge_struct.c
+@@ -2,17 +2,18 @@
+ 	Purpose:		Check large structure returns.
+ 	Limitations:	none.
+ 	PR:				none.
+ 	Originator:		Blake Chaffin	6/18/2007
+ */
+ 
+ /* { dg-excess-errors "" { target x86_64-*-mingw* x86_64-*-cygwin* } } */
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
+-/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
++/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
++/* { dg-options -Wformat=0 { target moxie*-*-elf } } */
+ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
+ 
+ #include "ffitest.h"
+ 
+ typedef	struct BigStruct{
+ 	uint8_t		a;
+ 	int8_t		b;
+ 	uint16_t	c;
+@@ -124,24 +125,24 @@ test_large_fn(
+ 		ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2, ui32_2 + 2, si32_2 + 2,
+ 			ui64_2 + 2, si64_2 + 2, f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2), 
+ 		ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3, ui32_3 + 3, si32_3 + 3,
+ 			ui64_3 + 3, si64_3 + 3, f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3), 
+ 		ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4, ui32_4 + 4, si32_4 + 4,
+ 			ui64_4 + 4, si64_4 + 4, f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4), 
+ 		ui8_5 + 5, si8_5 + 5};
+ 
+-	printf("%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd: "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd\n",
++	printf("%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 ": "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
+ 	       ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, (unsigned long)p_1,
+ 		ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2,
+ 		ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, (unsigned long)p_3,
+ 		ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5, si8_5,
+ 		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
+ 	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
+ 		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
+ 	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
+@@ -224,16 +225,29 @@ main(int argc __UNUSED__, const char** a
+ 	ffi_cif		cif;
+ 	ffi_type*	argTypes[51];
+ 	void*		argValues[51];
+ 
+ 	ffi_type	ret_struct_type;
+ 	ffi_type*	st_fields[51];
+ 	BigStruct	retVal;
+ 
++	uint8_t		ui8		= 1;
++	int8_t		si8		= 2;
++	uint16_t	ui16	= 3;
++	int16_t		si16	= 4;
++	uint32_t	ui32	= 5;
++	int32_t		si32	= 6;
++	uint64_t	ui64	= 7;
++	int64_t		si64	= 8;
++	float		f		= 9;
++	double		d		= 10;
++	long double	ld		= 11;
++	char*		p		= (char*)0x12345678;
++
+ 	memset (&retVal, 0, sizeof(retVal));
+ 
+ 	ret_struct_type.size = 0;
+ 	ret_struct_type.alignment = 0;
+ 	ret_struct_type.type = FFI_TYPE_STRUCT;
+ 	ret_struct_type.elements = st_fields;
+ 
+ 	st_fields[0]	= st_fields[12]	= st_fields[24]	= st_fields[36]	= st_fields[48]	= &ffi_type_uint8;
+@@ -246,29 +260,16 @@ main(int argc __UNUSED__, const char** a
+ 	st_fields[7]	= st_fields[19]	= st_fields[31]	= st_fields[43]	= &ffi_type_sint64;
+ 	st_fields[8]	= st_fields[20]	= st_fields[32]	= st_fields[44]	= &ffi_type_float;
+ 	st_fields[9]	= st_fields[21]	= st_fields[33]	= st_fields[45]	= &ffi_type_double;
+ 	st_fields[10]	= st_fields[22]	= st_fields[34]	= st_fields[46]	= &ffi_type_longdouble;
+ 	st_fields[11]	= st_fields[23]	= st_fields[35]	= st_fields[47]	= &ffi_type_pointer;
+ 
+ 	st_fields[50] = NULL;
+ 
+-	uint8_t		ui8		= 1;
+-	int8_t		si8		= 2;
+-	uint16_t	ui16	= 3;
+-	int16_t		si16	= 4;
+-	uint32_t	ui32	= 5;
+-	int32_t		si32	= 6;
+-	uint64_t	ui64	= 7;
+-	int64_t		si64	= 8;
+-	float		f		= 9;
+-	double		d		= 10;
+-	long double	ld		= 11;
+-	char*		p		= (char*)0x12345678;
+-
+ 	argTypes[0]		= argTypes[12]	= argTypes[24]	= argTypes[36]	= argTypes[48]	= &ffi_type_uint8;
+ 	argValues[0]	= argValues[12]	= argValues[24]	= argValues[36]	= argValues[48]	= &ui8;
+ 	argTypes[1]		= argTypes[13]	= argTypes[25]	= argTypes[37]	= argTypes[49]	= &ffi_type_sint8;
+ 	argValues[1]	= argValues[13]	= argValues[25]	= argValues[37]	= argValues[49]	= &si8;
+ 	argTypes[2]		= argTypes[14]	= argTypes[26]	= argTypes[38]	= &ffi_type_uint16;
+ 	argValues[2]	= argValues[14]	= argValues[26]	= argValues[38]	= &ui16;
+ 	argTypes[3]		= argTypes[15]	= argTypes[27]	= argTypes[39]	= &ffi_type_sint16;
+ 	argValues[3]	= argValues[15]	= argValues[27]	= argValues[39]	= &si16;
+@@ -290,53 +291,53 @@ main(int argc __UNUSED__, const char** a
+ 	argValues[11]	= argValues[23]	= argValues[35]	= argValues[47]	= &p;
+ 
+ 	argTypes[50]	= NULL;
+ 	argValues[50]	= NULL;
+ 
+ 	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK);
+ 
+ 	ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues);
+-	// { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
+-	printf("res: %hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd\n",
++	/* { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
++	printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
+ 		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
+ 	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
+ 		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
+ 	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
+ 		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
+ 	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
+ 		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
+ 	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
+-	// { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
++	/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
+ 
+ 	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK);
+ 
+ 	retVal	= ((BigStruct(*)(
+ 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
+ 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
+ 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
+ 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
+ 		uint8_t, int8_t))(code))(
+ 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
+ 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
+ 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
+ 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
+ 		ui8, si8);
+-	// { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
+-	printf("res: %hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
+-		"%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd\n",
++	/* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
++	printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
++		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
+ 		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
+ 	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
+ 		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
+ 	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
+ 		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
+ 	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
+ 		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
+ 	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
+-	// { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
++	/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
+ 
+     return 0;
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/many.c b/js/src/ctypes/libffi/testsuite/libffi.call/many.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/many.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/many.c
+@@ -2,40 +2,30 @@
+    Purpose:	Check return value float, with many arguments
+    Limitations:	none.
+    PR:		none.
+    Originator:	From the original ffitest.c  */
+ 
+ /* { dg-do run } */
+ #include "ffitest.h"
+ 
++#include <stdlib.h>
+ #include <float.h>
++#include <math.h>
+ 
+-static float many(float f1,
+-		  float f2,
+-		  float f3,
+-		  float f4,
+-		  float f5,
+-		  float f6,
+-		  float f7,
+-		  float f8,
+-		  float f9,
+-		  float f10,
+-		  float f11,
+-		  float f12,
+-		  float f13)
++static float ABI_ATTR many(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13)
+ {
+ #if 0
+   printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
+ 	 (double) f1, (double) f2, (double) f3, (double) f4, (double) f5, 
+ 	 (double) f6, (double) f7, (double) f8, (double) f9, (double) f10,
+ 	 (double) f11, (double) f12, (double) f13);
+ #endif
+ 
+-  return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
++  return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[13];
+   void *values[13];
+   float fa[13];
+@@ -45,25 +35,25 @@ int main (void)
+   for (i = 0; i < 13; i++)
+     {
+       args[i] = &ffi_type_float;
+       values[i] = &fa[i];
+       fa[i] = (float) i;
+     }
+ 
+     /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13, 
++    CHECK(ffi_prep_cif(&cif, ABI_NUM, 13,
+ 		       &ffi_type_float, args) == FFI_OK);
+ 
+     ffi_call(&cif, FFI_FN(many), &f, values);
+ 
+     ff =  many(fa[0], fa[1],
+ 	       fa[2], fa[3],
+ 	       fa[4], fa[5],
+ 	       fa[6], fa[7],
+ 	       fa[8], fa[9],
+ 	       fa[10],fa[11],fa[12]);
+ 
+-    if (f - ff < FLT_EPSILON)
++    if (fabs(f - ff) < FLT_EPSILON)
+       exit(0);
+     else
+       abort();
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/many2.c b/js/src/ctypes/libffi/testsuite/libffi.call/many2.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/many2.c
+@@ -0,0 +1,57 @@
++/* Area:        ffi_call
++   Purpose:     Check uint8_t arguments.
++   Limitations: none.
++   PR:          PR45677.
++   Originator:  Dan Witte <dwitte@gmail.com> 20100916  */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++#define NARGS 7
++
++typedef unsigned char u8;
++
++#ifdef __GNUC__
++__attribute__((noinline))
++#endif
++uint8_t
++foo (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
++     uint8_t e, uint8_t f, uint8_t g)
++{
++  return a + b + c + d + e + f + g;
++}
++
++uint8_t ABI_ATTR
++bar (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
++     uint8_t e, uint8_t f, uint8_t g)
++{
++  return foo (a, b, c, d, e, f, g);
++}
++
++int
++main (void)
++{
++  ffi_type *ffitypes[NARGS];
++  int i;
++  ffi_cif cif;
++  ffi_arg result = 0;
++  uint8_t args[NARGS];
++  void *argptrs[NARGS];
++
++  for (i = 0; i < NARGS; ++i)
++    ffitypes[i] = &ffi_type_uint8;
++
++  CHECK (ffi_prep_cif (&cif, ABI_NUM, NARGS,
++		       &ffi_type_uint8, ffitypes) == FFI_OK);
++
++  for (i = 0; i < NARGS; ++i)
++    {
++      args[i] = i;
++      argptrs[i] = &args[i];
++    }
++  ffi_call (&cif, FFI_FN (bar), &result, argptrs);
++
++  CHECK (result == 21);
++  return 0;
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/many_win32.c b/js/src/ctypes/libffi/testsuite/libffi.call/many_win32.c
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/many_win32.c
++++ /dev/null
+@@ -1,63 +0,0 @@
+-/* Area:	ffi_call
+-   Purpose:	Check stdcall many call on X86_WIN32 systems.
+-   Limitations:	none.
+-   PR:		none.
+-   Originator:	From the original ffitest.c  */
+-
+-/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */
+-
+-#include "ffitest.h"
+-#include <float.h>
+-
+-static float __attribute__((stdcall)) stdcall_many(float f1,
+-						   float f2,
+-						   float f3,
+-						   float f4,
+-						   float f5,
+-						   float f6,
+-						   float f7,
+-						   float f8,
+-						   float f9,
+-						   float f10,
+-						   float f11,
+-						   float f12,
+-						   float f13)
+-{
+-  return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
+-}
+-
+-int main (void)
+-{
+-  ffi_cif cif;
+-  ffi_type *args[13];
+-  void *values[13];
+-  float fa[13];
+-  float f, ff;
+-  unsigned long ul;
+-
+-  for (ul = 0; ul < 13; ul++)
+-    {
+-      args[ul] = &ffi_type_float;
+-      values[ul] = &fa[ul];
+-	fa[ul] = (float) ul;
+-    }
+-
+-  /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 13,
+-		     &ffi_type_float, args) == FFI_OK);
+-
+-  ff =  stdcall_many(fa[0], fa[1],
+-		     fa[2], fa[3],
+-		     fa[4], fa[5],
+-		     fa[6], fa[7],
+-		     fa[8], fa[9],
+-		     fa[10], fa[11], fa[12]);
+-
+-  ffi_call(&cif, FFI_FN(stdcall_many), &f, values);
+-
+-  if (f - ff < FLT_EPSILON)
+-    printf("stdcall many arg tests ok!\n");
+-  else
+-    CHECK(0);
+-  exit(0);
+-}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/negint.c b/js/src/ctypes/libffi/testsuite/libffi.call/negint.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/negint.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/negint.c
+@@ -1,16 +1,15 @@
+ /* Area:	ffi_call
+    Purpose:	Check that negative integers are passed correctly.
+    Limitations:	none.
+    PR:		none.
+    Originator:	From the original ffitest.c  */
+ 
+ /* { dg-do run } */
+-/* { dg-options -O2 } */
+ 
+ #include "ffitest.h"
+ 
+ static int checking(int a, short b, signed char c)
+ {
+ 
+   return (a < 0 && b < 0 && c < 0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct.c
+@@ -72,37 +72,37 @@ int main (void)
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[5];
+   ffi_type* cls_struct_fields1[5];
+   ffi_type* cls_struct_fields2[5];
+   ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
++  struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
++  struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
++				      {3, 1.0, 8.0}};
++  struct cls_struct_combined res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+   cls_struct_type2.size = 0;
+   cls_struct_type2.alignment = 0;
+   cls_struct_type2.type = FFI_TYPE_STRUCT;
+   cls_struct_type2.elements = cls_struct_fields2;
+ 
+-  struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
+-  struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
+-  struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
+-				      {3, 1.0, 8.0}};
+-  struct cls_struct_combined res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_float;
+   cls_struct_fields[2] = &ffi_type_sint;
+   cls_struct_fields[3] = NULL;
+ 
+   cls_struct_fields1[0] = &ffi_type_sint;
+   cls_struct_fields1[1] = &ffi_type_double;
+   cls_struct_fields1[2] = &ffi_type_float;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct1.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct1.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct1.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct1.c
+@@ -76,38 +76,38 @@ int main (void)
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[5];
+   ffi_type* cls_struct_fields[5];
+   ffi_type* cls_struct_fields1[5];
+   ffi_type* cls_struct_fields2[5];
+   ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
++  struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
++  struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
++				      {3, 1.0, 8.0}};
++  struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4};
++  struct cls_struct_combined res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+   cls_struct_type2.size = 0;
+   cls_struct_type2.alignment = 0;
+   cls_struct_type2.type = FFI_TYPE_STRUCT;
+   cls_struct_type2.elements = cls_struct_fields2;
+ 
+-  struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
+-  struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
+-  struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
+-				      {3, 1.0, 8.0}};
+-  struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4};
+-  struct cls_struct_combined res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_float;
+   cls_struct_fields[2] = &ffi_type_sint;
+   cls_struct_fields[3] = NULL;
+ 
+   cls_struct_fields1[0] = &ffi_type_sint;
+   cls_struct_fields1[1] = &ffi_type_double;
+   cls_struct_fields1[2] = &ffi_type_float;
+@@ -151,11 +151,11 @@ int main (void)
+ 	     (code))(e_dbl, f_dbl, g_dbl, h_dbl);
+   /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */
+   CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a));
+   CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b));
+   CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c));
+   CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii));
+   CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd));
+   CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff));
+-  //  CHECK( 1 == 0);
++  /*  CHECK( 1 == 0); */
+   exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct10.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct10.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct10.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct10.c
+@@ -62,37 +62,37 @@ int main (void)
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[4];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[4];
+   ffi_type* cls_struct_fields2[3];
+   ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
+   ffi_type* dbl_arg_types[4];
+ 
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = { 99, {12LL , 127}, 255};
++  struct C g_dbl = { 2LL, 9};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+   cls_struct_type2.size = 0;
+   cls_struct_type2.alignment = 0;
+   cls_struct_type2.type = FFI_TYPE_STRUCT;
+   cls_struct_type2.elements = cls_struct_fields2;
+ 
+-  struct A e_dbl = { 1LL, 7};
+-  struct B f_dbl = { 99, {12LL , 127}, 255};
+-  struct C g_dbl = { 2LL, 9};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uint64;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &ffi_type_uchar;
+   cls_struct_fields1[1] = &cls_struct_type;
+   cls_struct_fields1[2] = &ffi_type_uint;
+   cls_struct_fields1[3] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct11.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct11.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct11.c
+@@ -0,0 +1,121 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check parameter passing with nested structs
++		of a single type.  This tests the special cases
++		for homogeneous floating-point aggregates in the
++		AArch64 PCS.
++   Limitations:	none.
++   PR:		none.
++   Originator:  ARM Ltd.  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++typedef struct A {
++  float a_x;
++  float a_y;
++} A;
++
++typedef struct B {
++  float b_x;
++  float b_y;
++} B;
++
++typedef struct C {
++  A a;
++  B b;
++} C;
++
++static C C_fn (int x, int y, int z, C source, int i, int j, int k)
++{
++  C result;
++  result.a.a_x = source.a.a_x;
++  result.a.a_y = source.a.a_y;
++  result.b.b_x = source.b.b_x;
++  result.b.b_y = source.b.b_y;
++
++  printf ("%d, %d, %d, %d, %d, %d\n", x, y, z, i, j, k);
++
++  printf ("%.1f, %.1f, %.1f, %.1f, "
++	  "%.1f, %.1f, %.1f, %.1f\n",
++	  source.a.a_x, source.a.a_y,
++	  source.b.b_x, source.b.b_y,
++	  result.a.a_x, result.a.a_y,
++	  result.b.b_x, result.b.b_y);
++
++  return result;
++}
++
++int main (void)
++{
++  ffi_cif cif;
++
++  ffi_type* struct_fields_source_a[3];
++  ffi_type* struct_fields_source_b[3];
++  ffi_type* struct_fields_source_c[3];
++  ffi_type* arg_types[8];
++
++  ffi_type struct_type_a, struct_type_b, struct_type_c;
++
++  struct A source_fld_a = {1.0, 2.0};
++  struct B source_fld_b = {4.0, 8.0};
++  int k = 1;
++
++  struct C result;
++  struct C source = {source_fld_a, source_fld_b};
++
++  struct_type_a.size = 0;
++  struct_type_a.alignment = 0;
++  struct_type_a.type = FFI_TYPE_STRUCT;
++  struct_type_a.elements = struct_fields_source_a;
++
++  struct_type_b.size = 0;
++  struct_type_b.alignment = 0;
++  struct_type_b.type = FFI_TYPE_STRUCT;
++  struct_type_b.elements = struct_fields_source_b;
++
++  struct_type_c.size = 0;
++  struct_type_c.alignment = 0;
++  struct_type_c.type = FFI_TYPE_STRUCT;
++  struct_type_c.elements = struct_fields_source_c;
++
++  struct_fields_source_a[0] = &ffi_type_float;
++  struct_fields_source_a[1] = &ffi_type_float;
++  struct_fields_source_a[2] = NULL;
++
++  struct_fields_source_b[0] = &ffi_type_float;
++  struct_fields_source_b[1] = &ffi_type_float;
++  struct_fields_source_b[2] = NULL;
++
++  struct_fields_source_c[0] = &struct_type_a;
++  struct_fields_source_c[1] = &struct_type_b;
++  struct_fields_source_c[2] = NULL;
++
++  arg_types[0] = &ffi_type_sint32;
++  arg_types[1] = &ffi_type_sint32;
++  arg_types[2] = &ffi_type_sint32;
++  arg_types[3] = &struct_type_c;
++  arg_types[4] = &ffi_type_sint32;
++  arg_types[5] = &ffi_type_sint32;
++  arg_types[6] = &ffi_type_sint32;
++  arg_types[7] = NULL;
++
++  void *args[7];
++  args[0] = &k;
++  args[1] = &k;
++  args[2] = &k;
++  args[3] = &source;
++  args[4] = &k;
++  args[5] = &k;
++  args[6] = &k;
++  CHECK (ffi_prep_cif (&cif, FFI_DEFAULT_ABI, 7, &struct_type_c,
++		       arg_types) == FFI_OK);
++
++  ffi_call (&cif, FFI_FN (C_fn), &result, args);
++  /* { dg-output "1, 1, 1, 1, 1, 1\n" } */
++  /* { dg-output "1.0, 2.0, 4.0, 8.0, 1.0, 2.0, 4.0, 8.0" } */
++  CHECK (result.a.a_x == source.a.a_x);
++  CHECK (result.a.a_y == source.a.a_y);
++  CHECK (result.b.b_x == source.b.b_x);
++  CHECK (result.b.b_y == source.b.b_y);
++  exit (0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct2.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct2.c
+@@ -52,31 +52,31 @@ int main (void)
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type cls_struct_type, cls_struct_type1;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct A e_dbl = { 1, 7};
++  struct B f_dbl = {{12 , 127}, 99};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+-  struct A e_dbl = { 1, 7};
+-  struct B f_dbl = {{12 , 127}, 99};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_ulong;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct3.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct3.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct3.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct3.c
+@@ -53,31 +53,31 @@ int main (void)
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type cls_struct_type, cls_struct_type1;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = {{12LL , 127}, 99};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+-  struct A e_dbl = { 1LL, 7};
+-  struct B f_dbl = {{12LL , 127}, 99};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uint64;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct4.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct4.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct4.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct4.c
+@@ -53,31 +53,31 @@ int main (void)
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type cls_struct_type, cls_struct_type1;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct A e_dbl = { 1.0, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+-  struct A e_dbl = { 1.0, 7};
+-  struct B f_dbl = {{12.0 , 127}, 99};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct5.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct5.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct5.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct5.c
+@@ -53,31 +53,31 @@ int main (void)
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type cls_struct_type, cls_struct_type1;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct A e_dbl = { 1.0, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+-  struct A e_dbl = { 1.0, 7};
+-  struct B f_dbl = {{12.0 , 127}, 99};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_longdouble;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct6.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct6.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct6.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct6.c
+@@ -61,37 +61,37 @@ int main (void)
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[4];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type* cls_struct_fields2[3];
+   ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
+   ffi_type* dbl_arg_types[4];
+ 
++  struct A e_dbl = { 1.0, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++  struct C g_dbl = { 2, 9};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+   cls_struct_type2.size = 0;
+   cls_struct_type2.alignment = 0;
+   cls_struct_type2.type = FFI_TYPE_STRUCT;
+   cls_struct_type2.elements = cls_struct_fields2;
+ 
+-  struct A e_dbl = { 1.0, 7};
+-  struct B f_dbl = {{12.0 , 127}, 99};
+-  struct C g_dbl = { 2, 9};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_double;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct7.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct7.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct7.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct7.c
+@@ -53,31 +53,31 @@ int main (void)
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[3];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type cls_struct_type, cls_struct_type1;
+   ffi_type* dbl_arg_types[3];
+ 
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+-  struct A e_dbl = { 1LL, 7};
+-  struct B f_dbl = {{12.0 , 127}, 99};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uint64;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct8.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct8.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct8.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct8.c
+@@ -61,37 +61,37 @@ int main (void)
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[4];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type* cls_struct_fields2[3];
+   ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
+   ffi_type* dbl_arg_types[4];
+ 
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = {{12LL , 127}, 99};
++  struct C g_dbl = { 2LL, 9};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+   cls_struct_type2.size = 0;
+   cls_struct_type2.alignment = 0;
+   cls_struct_type2.type = FFI_TYPE_STRUCT;
+   cls_struct_type2.elements = cls_struct_fields2;
+ 
+-  struct A e_dbl = { 1LL, 7};
+-  struct B f_dbl = {{12LL , 127}, 99};
+-  struct C g_dbl = { 2LL, 9};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uint64;
+   cls_struct_fields[1] = &ffi_type_uchar;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct9.c b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct9.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct9.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/nested_struct9.c
+@@ -61,37 +61,37 @@ int main (void)
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   void* args_dbl[4];
+   ffi_type* cls_struct_fields[3];
+   ffi_type* cls_struct_fields1[3];
+   ffi_type* cls_struct_fields2[3];
+   ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
+   ffi_type* dbl_arg_types[4];
+ 
++  struct A e_dbl = { 1, 7LL};
++  struct B f_dbl = {{12.0 , 127}, 99};
++  struct C g_dbl = { 2, 9};
++
++  struct B res_dbl;
++
+   cls_struct_type.size = 0;
+   cls_struct_type.alignment = 0;
+   cls_struct_type.type = FFI_TYPE_STRUCT;
+   cls_struct_type.elements = cls_struct_fields;
+ 
+   cls_struct_type1.size = 0;
+   cls_struct_type1.alignment = 0;
+   cls_struct_type1.type = FFI_TYPE_STRUCT;
+   cls_struct_type1.elements = cls_struct_fields1;
+ 
+   cls_struct_type2.size = 0;
+   cls_struct_type2.alignment = 0;
+   cls_struct_type2.type = FFI_TYPE_STRUCT;
+   cls_struct_type2.elements = cls_struct_fields2;
+ 
+-  struct A e_dbl = { 1, 7LL};
+-  struct B f_dbl = {{12.0 , 127}, 99};
+-  struct C g_dbl = { 2, 9};
+-
+-  struct B res_dbl;
+-
+   cls_struct_fields[0] = &ffi_type_uchar;
+   cls_struct_fields[1] = &ffi_type_uint64;
+   cls_struct_fields[2] = NULL;
+ 
+   cls_struct_fields1[0] = &cls_struct_type;
+   cls_struct_fields1[1] = &ffi_type_uchar;
+   cls_struct_fields1[2] = NULL;
+ 
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/return_dbl.c b/js/src/ctypes/libffi/testsuite/libffi.call/return_dbl.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/return_dbl.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/return_dbl.c
+@@ -4,16 +4,17 @@
+    PR:		none.
+    Originator:	<andreast@gcc.gnu.org> 20050212  */
+ 
+ /* { dg-do run } */
+ #include "ffitest.h"
+ 
+ static double return_dbl(double dbl)
+ {
++  printf ("%f\n", dbl);
+   return 2 * dbl;
+ }
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   double dbl, rdbl;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/return_sc.c b/js/src/ctypes/libffi/testsuite/libffi.call/return_sc.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/return_sc.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/return_sc.c
+@@ -25,12 +25,12 @@ int main (void)
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+ 		     &ffi_type_schar, args) == FFI_OK);
+ 
+   for (sc = (signed char) -127;
+        sc < (signed char) 127; sc++)
+     {
+       ffi_call(&cif, FFI_FN(return_sc), &rint, values);
+-      CHECK(rint == (ffi_arg) sc);
++      CHECK((signed char)rint == sc);
+     }
+   exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/return_uc.c b/js/src/ctypes/libffi/testsuite/libffi.call/return_uc.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/return_uc.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/return_uc.c
+@@ -27,12 +27,12 @@ int main (void)
+   /* Initialize the cif */
+   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+ 		     &ffi_type_uchar, args) == FFI_OK);
+ 
+   for (uc = (unsigned char) '\x00';
+        uc < (unsigned char) '\xff'; uc++)
+     {
+       ffi_call(&cif, FFI_FN(return_uc), &rint, values);
+-      CHECK(rint == (signed int) uc);
++      CHECK((unsigned char)rint == uc);
+     }
+   exit(0);
+ }
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/stret_large.c b/js/src/ctypes/libffi/testsuite/libffi.call/stret_large.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/stret_large.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/stret_large.c
+@@ -4,18 +4,18 @@
+ 				the gp and fp register count on Darwin/AIX/ppc64.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin	6/21/2007	*/
+ 
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-*  } } */
+ #include "ffitest.h"
+ 
+-// 13 FPRs: 104 bytes
+-// 14 FPRs: 112 bytes
++/* 13 FPRs: 104 bytes */
++/* 14 FPRs: 112 bytes */
+ 
+ typedef struct struct_108byte {
+ 	double a;
+ 	double b;
+ 	double c;
+ 	double d;
+ 	double e;
+ 	double f;
+@@ -77,27 +77,27 @@ int main (void)
+ 	ffi_cif cif;
+         void *code;
+ 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void* args_dbl[5];
+ 	ffi_type* cls_struct_fields[15];
+ 	ffi_type cls_struct_type;
+ 	ffi_type* dbl_arg_types[5];
+ 
+-	cls_struct_type.size = 0;
+-	cls_struct_type.alignment = 0;
+-	cls_struct_type.type = FFI_TYPE_STRUCT;
+-	cls_struct_type.elements = cls_struct_fields;
+-
+ 	struct_108byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 7 };
+ 	struct_108byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 4 };
+ 	struct_108byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 3 };
+ 	struct_108byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 2 };
+ 	struct_108byte res_dbl;
+ 
++	cls_struct_type.size = 0;
++	cls_struct_type.alignment = 0;
++	cls_struct_type.type = FFI_TYPE_STRUCT;
++	cls_struct_type.elements = cls_struct_fields;
++
+ 	cls_struct_fields[0] = &ffi_type_double;
+ 	cls_struct_fields[1] = &ffi_type_double;
+ 	cls_struct_fields[2] = &ffi_type_double;
+ 	cls_struct_fields[3] = &ffi_type_double;
+ 	cls_struct_fields[4] = &ffi_type_double;
+ 	cls_struct_fields[5] = &ffi_type_double;
+ 	cls_struct_fields[6] = &ffi_type_double;
+ 	cls_struct_fields[7] = &ffi_type_double;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/stret_large2.c b/js/src/ctypes/libffi/testsuite/libffi.call/stret_large2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/stret_large2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/stret_large2.c
+@@ -4,18 +4,18 @@
+ 				the gp and fp register count on Darwin/AIX/ppc64.
+    Limitations:	none.
+    PR:			none.
+    Originator:	Blake Chaffin	6/21/2007	*/
+ 
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-*  } } */
+ #include "ffitest.h"
+ 
+-// 13 FPRs: 104 bytes
+-// 14 FPRs: 112 bytes
++/* 13 FPRs: 104 bytes */
++/* 14 FPRs: 112 bytes */
+ 
+ typedef struct struct_116byte {
+ 	double a;
+ 	double b;
+ 	double c;
+ 	double d;
+ 	double e;
+ 	double f;
+@@ -79,27 +79,27 @@ int main (void)
+ 	ffi_cif cif;
+         void *code;
+ 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void* args_dbl[5];
+ 	ffi_type* cls_struct_fields[16];
+ 	ffi_type cls_struct_type;
+ 	ffi_type* dbl_arg_types[5];
+ 
+-	cls_struct_type.size = 0;
+-	cls_struct_type.alignment = 0;
+-	cls_struct_type.type = FFI_TYPE_STRUCT;
+-	cls_struct_type.elements = cls_struct_fields;
+-
+ 	struct_116byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 7 };
+ 	struct_116byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 6.0, 4 };
+ 	struct_116byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 7.0, 3 };
+ 	struct_116byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 8.0, 2 };
+ 	struct_116byte res_dbl;
+ 
++	cls_struct_type.size = 0;
++	cls_struct_type.alignment = 0;
++	cls_struct_type.type = FFI_TYPE_STRUCT;
++	cls_struct_type.elements = cls_struct_fields;
++
+ 	cls_struct_fields[0] = &ffi_type_double;
+ 	cls_struct_fields[1] = &ffi_type_double;
+ 	cls_struct_fields[2] = &ffi_type_double;
+ 	cls_struct_fields[3] = &ffi_type_double;
+ 	cls_struct_fields[4] = &ffi_type_double;
+ 	cls_struct_fields[5] = &ffi_type_double;
+ 	cls_struct_fields[6] = &ffi_type_double;
+ 	cls_struct_fields[7] = &ffi_type_double;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium.c b/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium.c
+@@ -63,27 +63,27 @@ int main (void)
+ 	ffi_cif cif;
+         void *code;
+ 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void* args_dbl[5];
+ 	ffi_type* cls_struct_fields[10];
+ 	ffi_type cls_struct_type;
+ 	ffi_type* dbl_arg_types[5];
+ 
+-	cls_struct_type.size = 0;
+-	cls_struct_type.alignment = 0;
+-	cls_struct_type.type = FFI_TYPE_STRUCT;
+-	cls_struct_type.elements = cls_struct_fields;
+-
+ 	struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7.0 };
+ 	struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0 };
+ 	struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3.0 };
+ 	struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2.0 };
+ 	struct_72byte res_dbl;
+ 
++	cls_struct_type.size = 0;
++	cls_struct_type.alignment = 0;
++	cls_struct_type.type = FFI_TYPE_STRUCT;
++	cls_struct_type.elements = cls_struct_fields;
++
+ 	cls_struct_fields[0] = &ffi_type_double;
+ 	cls_struct_fields[1] = &ffi_type_double;
+ 	cls_struct_fields[2] = &ffi_type_double;
+ 	cls_struct_fields[3] = &ffi_type_double;
+ 	cls_struct_fields[4] = &ffi_type_double;
+ 	cls_struct_fields[5] = &ffi_type_double;
+ 	cls_struct_fields[6] = &ffi_type_double;
+ 	cls_struct_fields[7] = &ffi_type_double;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium2.c b/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/stret_medium2.c
+@@ -64,27 +64,27 @@ int main (void)
+ 	ffi_cif cif;
+         void *code;
+ 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+ 	void* args_dbl[5];
+ 	ffi_type* cls_struct_fields[10];
+ 	ffi_type cls_struct_type;
+ 	ffi_type* dbl_arg_types[5];
+ 
+-	cls_struct_type.size = 0;
+-	cls_struct_type.alignment = 0;
+-	cls_struct_type.type = FFI_TYPE_STRUCT;
+-	cls_struct_type.elements = cls_struct_fields;
+-
+ 	struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7 };
+ 	struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4 };
+ 	struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3 };
+ 	struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2 };
+ 	struct_72byte res_dbl;
+ 
++	cls_struct_type.size = 0;
++	cls_struct_type.alignment = 0;
++	cls_struct_type.type = FFI_TYPE_STRUCT;
++	cls_struct_type.elements = cls_struct_fields;
++
+ 	cls_struct_fields[0] = &ffi_type_double;
+ 	cls_struct_fields[1] = &ffi_type_double;
+ 	cls_struct_fields[2] = &ffi_type_double;
+ 	cls_struct_fields[3] = &ffi_type_double;
+ 	cls_struct_fields[4] = &ffi_type_double;
+ 	cls_struct_fields[5] = &ffi_type_double;
+ 	cls_struct_fields[6] = &ffi_type_double;
+ 	cls_struct_fields[7] = &ffi_type_double;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/strlen.c b/js/src/ctypes/libffi/testsuite/libffi.call/strlen.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/strlen.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/strlen.c
+@@ -2,34 +2,34 @@
+    Purpose:	Check strlen function call.
+    Limitations:	none.
+    PR:		none.
+    Originator:	From the original ffitest.c  */
+ 
+ /* { dg-do run } */
+ #include "ffitest.h"
+ 
+-static size_t my_strlen(char *s)
++static size_t ABI_ATTR my_strlen(char *s)
+ {
+   return (strlen(s));
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_arg rint;
+   char *s;
+ 
+   args[0] = &ffi_type_pointer;
+   values[0] = (void*) &s;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1,
+ 		     &ffi_type_sint, args) == FFI_OK);
+   
+   s = "a";
+   ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
+   CHECK(rint == 1);
+   
+   s = "1234567";
+   ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/strlen2.c b/js/src/ctypes/libffi/testsuite/libffi.call/strlen2.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/strlen2.c
+@@ -0,0 +1,49 @@
++/* Area:	ffi_call
++   Purpose:	Check strlen function call with additional arguments.
++   Limitations:	none.
++   PR:		none.
++   Originator:	From the original ffitest.c  */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++static size_t ABI_ATTR my_f(char *s, float a)
++{
++  return (size_t) ((int) strlen(s) + (int) a);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  ffi_arg rint;
++  char *s;
++  float v2;
++  args[0] = &ffi_type_pointer;
++  args[1] = &ffi_type_float;
++  values[0] = (void*) &s;
++  values[1] = (void*) &v2;
++  
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
++		       &ffi_type_sint, args) == FFI_OK);
++  
++  s = "a";
++  v2 = 0.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 1);
++  
++  s = "1234567";
++  v2 = -1.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 6);
++  
++  s = "1234567890123456789012345";
++  v2 = 1.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 26);
++  
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/strlen3.c b/js/src/ctypes/libffi/testsuite/libffi.call/strlen3.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/strlen3.c
+@@ -0,0 +1,49 @@
++/* Area:	ffi_call
++   Purpose:	Check strlen function call with additional arguments.
++   Limitations:	none.
++   PR:		none.
++   Originator:	From the original ffitest.c  */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++static size_t ABI_ATTR my_f(float a, char *s)
++{
++  return (size_t) ((int) strlen(s) + (int) a);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  ffi_arg rint;
++  char *s;
++  float v2;
++  args[1] = &ffi_type_pointer;
++  args[0] = &ffi_type_float;
++  values[1] = (void*) &s;
++  values[0] = (void*) &v2;
++  
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
++		       &ffi_type_sint, args) == FFI_OK);
++  
++  s = "a";
++  v2 = 0.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 1);
++  
++  s = "1234567";
++  v2 = -1.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 6);
++  
++  s = "1234567890123456789012345";
++  v2 = 1.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 26);
++  
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/strlen4.c b/js/src/ctypes/libffi/testsuite/libffi.call/strlen4.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/strlen4.c
+@@ -0,0 +1,55 @@
++/* Area:	ffi_call
++   Purpose:	Check strlen function call with additional arguments.
++   Limitations:	none.
++   PR:		none.
++   Originator:	From the original ffitest.c  */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++static size_t ABI_ATTR my_f(float a, char *s, int i)
++{
++  return (size_t) ((int) strlen(s) + (int) a + i);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  ffi_arg rint;
++  char *s;
++  int v1;
++  float v2;
++  args[2] = &ffi_type_sint;
++  args[1] = &ffi_type_pointer;
++  args[0] = &ffi_type_float;
++  values[2] = (void*) &v1;
++  values[1] = (void*) &s;
++  values[0] = (void*) &v2;
++  
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 3,
++		       &ffi_type_sint, args) == FFI_OK);
++  
++  s = "a";
++  v1 = 1;
++  v2 = 0.0;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 2);
++  
++  s = "1234567";
++  v2 = -1.0;
++  v1 = -2;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 4);
++  
++  s = "1234567890123456789012345";
++  v2 = 1.0;
++  v1 = 2;
++  ffi_call(&cif, FFI_FN(my_f), &rint, values);
++  CHECK(rint == 28);
++  
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/strlen_win32.c b/js/src/ctypes/libffi/testsuite/libffi.call/strlen_win32.c
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/strlen_win32.c
++++ /dev/null
+@@ -1,44 +0,0 @@
+-/* Area:	ffi_call
+-   Purpose:	Check stdcall strlen call on X86_WIN32 systems.
+-   Limitations:	none.
+-   PR:		none.
+-   Originator:	From the original ffitest.c  */
+-
+-/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */
+-
+-#include "ffitest.h"
+-
+-static size_t __attribute__((stdcall)) my_stdcall_strlen(char *s)
+-{
+-  return (strlen(s));
+-}
+-
+-int main (void)
+-{
+-  ffi_cif cif;
+-  ffi_type *args[MAX_ARGS];
+-  void *values[MAX_ARGS];
+-  ffi_arg rint;
+-  char *s;
+-  args[0] = &ffi_type_pointer;
+-  values[0] = (void*) &s;
+-  
+-  /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 1,
+-		       &ffi_type_sint, args) == FFI_OK);
+-  
+-  s = "a";
+-  ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values);
+-  CHECK(rint == 1);
+-  
+-  s = "1234567";
+-  ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values);
+-  CHECK(rint == 7);
+-  
+-  s = "1234567890123456789012345";
+-  ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values);
+-  CHECK(rint == 25);
+-  
+-  printf("stdcall strlen tests passed\n");
+-  exit(0);
+-}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct1.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct1.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct1.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct1.c
+@@ -9,51 +9,53 @@
+ 
+ typedef struct
+ {
+   unsigned char uc;
+   double d;
+   unsigned int ui;
+ } test_structure_1;
+ 
+-static test_structure_1 struct1(test_structure_1 ts)
++static test_structure_1 ABI_ATTR struct1(test_structure_1 ts)
+ {
+   ts.uc++;
+   ts.d--;
+   ts.ui++;
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts1_type;
+   ffi_type *ts1_type_elements[4];
++
++  test_structure_1 ts1_arg;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_1 *ts1_result =
++    (test_structure_1 *) malloc (sizeof(test_structure_1));
++
+   ts1_type.size = 0;
+   ts1_type.alignment = 0;
+   ts1_type.type = FFI_TYPE_STRUCT;
+   ts1_type.elements = ts1_type_elements;
+   ts1_type_elements[0] = &ffi_type_uchar;
+   ts1_type_elements[1] = &ffi_type_double;
+   ts1_type_elements[2] = &ffi_type_uint;
+   ts1_type_elements[3] = NULL;
+   
+-  test_structure_1 ts1_arg;
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_1 *ts1_result = 
+-    (test_structure_1 *) malloc (sizeof(test_structure_1));
+-  
+   args[0] = &ts1_type;
+   values[0] = &ts1_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1,
+ 		     &ts1_type, args) == FFI_OK);
+   
+   ts1_arg.uc = '\x01';
+   ts1_arg.d = 3.14159;
+   ts1_arg.ui = 555;
+ 
+   ffi_call(&cif, FFI_FN(struct1), ts1_result, values);
+   
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct2.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct2.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct2.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct2.c
+@@ -8,50 +8,50 @@
+ #include "ffitest.h"
+ 
+ typedef struct
+ {
+   double d1;
+   double d2;
+ } test_structure_2;
+ 
+-static test_structure_2 struct2(test_structure_2 ts)
++static test_structure_2 ABI_ATTR struct2(test_structure_2 ts)
+ {
+   ts.d1--;
+   ts.d2--;
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   test_structure_2 ts2_arg;
+   ffi_type ts2_type;
+   ffi_type *ts2_type_elements[3];
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_2 *ts2_result =
++    (test_structure_2 *) malloc (sizeof(test_structure_2));
++
+   ts2_type.size = 0;
+   ts2_type.alignment = 0;
+   ts2_type.type = FFI_TYPE_STRUCT;
+   ts2_type.elements = ts2_type_elements;
+   ts2_type_elements[0] = &ffi_type_double;
+   ts2_type_elements[1] = &ffi_type_double;
+   ts2_type_elements[2] = NULL;
+ 
+-  
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_2 *ts2_result = 
+-    (test_structure_2 *) malloc (sizeof(test_structure_2));
+-  
+   args[0] = &ts2_type;
+   values[0] = &ts2_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts2_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts2_type, args) == FFI_OK);
+   
+   ts2_arg.d1 = 5.55;
+   ts2_arg.d2 = 6.66;
+   
+   printf ("%g\n", ts2_arg.d1);
+   printf ("%g\n", ts2_arg.d2);
+   
+   ffi_call(&cif, FFI_FN(struct2), ts2_result, values);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct3.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct3.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct3.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct3.c
+@@ -7,47 +7,48 @@
+ /* { dg-do run } */
+ #include "ffitest.h"
+ 
+ typedef struct
+ {
+   int si;
+ } test_structure_3;
+ 
+-static test_structure_3 struct3(test_structure_3 ts)
++static test_structure_3 ABI_ATTR struct3(test_structure_3 ts)
+ {
+   ts.si = -(ts.si*2);
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   int compare_value;
+   ffi_type ts3_type;
+   ffi_type *ts3_type_elements[2];
++
++  test_structure_3 ts3_arg;
++  test_structure_3 *ts3_result =
++    (test_structure_3 *) malloc (sizeof(test_structure_3));
++
+   ts3_type.size = 0;
+   ts3_type.alignment = 0;
+   ts3_type.type = FFI_TYPE_STRUCT;
+   ts3_type.elements = ts3_type_elements;
+   ts3_type_elements[0] = &ffi_type_sint;
+   ts3_type_elements[1] = NULL;
+ 
+-  test_structure_3 ts3_arg;
+-  test_structure_3 *ts3_result = 
+-    (test_structure_3 *) malloc (sizeof(test_structure_3));
+-  
+   args[0] = &ts3_type;
+   values[0] = &ts3_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1,
+ 		     &ts3_type, args) == FFI_OK);
+   
+   ts3_arg.si = -123;
+   compare_value = ts3_arg.si;
+   
+   ffi_call(&cif, FFI_FN(struct3), ts3_result, values);
+   
+   printf ("%d %d\n", ts3_result->si, -(compare_value*2));
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct4.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct4.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct4.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct4.c
+@@ -9,50 +9,51 @@
+ 
+ typedef struct
+ {
+   unsigned ui1;
+   unsigned ui2;
+   unsigned ui3;
+ } test_structure_4;
+ 
+-static test_structure_4 struct4(test_structure_4 ts)
++static test_structure_4 ABI_ATTR struct4(test_structure_4 ts)
+ {
+   ts.ui3 = ts.ui1 * ts.ui2 * ts.ui3;
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts4_type;
+   ffi_type *ts4_type_elements[4];  
++
++  test_structure_4 ts4_arg;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_4 *ts4_result =
++    (test_structure_4 *) malloc (sizeof(test_structure_4));
++
+   ts4_type.size = 0;
+   ts4_type.alignment = 0;
+   ts4_type.type = FFI_TYPE_STRUCT;
+-  test_structure_4 ts4_arg;
+   ts4_type.elements = ts4_type_elements;
+   ts4_type_elements[0] = &ffi_type_uint;
+   ts4_type_elements[1] = &ffi_type_uint;
+   ts4_type_elements[2] = &ffi_type_uint;
+   ts4_type_elements[3] = NULL;
+ 
+-  
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_4 *ts4_result = 
+-    (test_structure_4 *) malloc (sizeof(test_structure_4));
+-  
+   args[0] = &ts4_type;
+   values[0] = &ts4_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts4_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts4_type, args) == FFI_OK);
+   
+   ts4_arg.ui1 = 2;
+   ts4_arg.ui2 = 3;
+   ts4_arg.ui3 = 4;
+   
+   ffi_call (&cif, FFI_FN(struct4), ts4_result, values);
+   
+   CHECK(ts4_result->ui3 == 2U * 3U * 4U);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct5.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct5.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct5.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct5.c
+@@ -7,52 +7,53 @@
+ /* { dg-do run } */
+ #include "ffitest.h"
+ typedef struct
+ {
+   char c1;
+   char c2;
+ } test_structure_5;
+ 
+-static test_structure_5 struct5(test_structure_5 ts1, test_structure_5 ts2)
++static test_structure_5 ABI_ATTR struct5(test_structure_5 ts1, test_structure_5 ts2)
+ {
+   ts1.c1 += ts2.c1;
+   ts1.c2 -= ts2.c2;
+   
+   return ts1;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts5_type;
+   ffi_type *ts5_type_elements[3];
++
++  test_structure_5 ts5_arg1, ts5_arg2;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_5 *ts5_result =
++    (test_structure_5 *) malloc (sizeof(test_structure_5));
++
+   ts5_type.size = 0;
+   ts5_type.alignment = 0;
+   ts5_type.type = FFI_TYPE_STRUCT;
+   ts5_type.elements = ts5_type_elements;
+   ts5_type_elements[0] = &ffi_type_schar;
+   ts5_type_elements[1] = &ffi_type_schar;
+   ts5_type_elements[2] = NULL;
+ 
+-  test_structure_5 ts5_arg1, ts5_arg2;
+-  
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_5 *ts5_result = 
+-    (test_structure_5 *) malloc (sizeof(test_structure_5));
+-  
+   args[0] = &ts5_type;
+   args[1] = &ts5_type;
+   values[0] = &ts5_arg1;
+   values[1] = &ts5_arg2;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ts5_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts5_type, args) == FFI_OK);
+   
+   ts5_arg1.c1 = 2;
+   ts5_arg1.c2 = 6;
+   ts5_arg2.c1 = 5;
+   ts5_arg2.c2 = 3;
+   
+   ffi_call (&cif, FFI_FN(struct5), ts5_result, values);
+   
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct6.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct6.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct6.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct6.c
+@@ -7,51 +7,51 @@
+ /* { dg-do run } */
+ #include "ffitest.h"
+ typedef struct
+ {
+   float f;
+   double d;
+ } test_structure_6;
+ 
+-static test_structure_6 struct6 (test_structure_6 ts)
++static test_structure_6 ABI_ATTR struct6 (test_structure_6 ts)
+ {
+   ts.f += 1;
+   ts.d += 1;
+   
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts6_type;
+   ffi_type *ts6_type_elements[3];
++
++  test_structure_6 ts6_arg;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_6 *ts6_result =
++    (test_structure_6 *) malloc (sizeof(test_structure_6));
++
+   ts6_type.size = 0;
+   ts6_type.alignment = 0;
+   ts6_type.type = FFI_TYPE_STRUCT;
+   ts6_type.elements = ts6_type_elements;
+   ts6_type_elements[0] = &ffi_type_float;
+   ts6_type_elements[1] = &ffi_type_double;
+   ts6_type_elements[2] = NULL;
+ 
+-
+-  test_structure_6 ts6_arg;
+-
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_6 *ts6_result = 
+-    (test_structure_6 *) malloc (sizeof(test_structure_6));
+-  
+   args[0] = &ts6_type;
+   values[0] = &ts6_arg;
+ 
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts6_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts6_type, args) == FFI_OK);
+   
+   ts6_arg.f = 5.55f;
+   ts6_arg.d = 6.66;
+   
+   printf ("%g\n", ts6_arg.f);
+   printf ("%g\n", ts6_arg.d);
+ 
+   ffi_call(&cif, FFI_FN(struct6), ts6_result, values);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct7.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct7.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct7.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct7.c
+@@ -8,53 +8,53 @@
+ #include "ffitest.h"
+ typedef struct
+ {
+   float f1;
+   float f2;
+   double d;
+ } test_structure_7;
+ 
+-static test_structure_7 struct7 (test_structure_7 ts)
++static test_structure_7 ABI_ATTR struct7 (test_structure_7 ts)
+ {
+   ts.f1 += 1;
+   ts.f2 += 1;
+   ts.d += 1;
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts7_type;
+   ffi_type *ts7_type_elements[4];
++
++  test_structure_7 ts7_arg;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_7 *ts7_result =
++    (test_structure_7 *) malloc (sizeof(test_structure_7));
++
+   ts7_type.size = 0;
+   ts7_type.alignment = 0;
+   ts7_type.type = FFI_TYPE_STRUCT;
+   ts7_type.elements = ts7_type_elements;
+   ts7_type_elements[0] = &ffi_type_float;
+   ts7_type_elements[1] = &ffi_type_float;
+   ts7_type_elements[2] = &ffi_type_double;
+   ts7_type_elements[3] = NULL;
+ 
+-
+-  test_structure_7 ts7_arg;
+-  
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_7 *ts7_result = 
+-    (test_structure_7 *) malloc (sizeof(test_structure_7));
+-  
+   args[0] = &ts7_type;
+   values[0] = &ts7_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts7_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts7_type, args) == FFI_OK);
+   
+   ts7_arg.f1 = 5.55f;
+   ts7_arg.f2 = 55.5f;
+   ts7_arg.d = 6.66;
+ 
+   printf ("%g\n", ts7_arg.f1);
+   printf ("%g\n", ts7_arg.f2);
+   printf ("%g\n", ts7_arg.d);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct8.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct8.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct8.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct8.c
+@@ -9,54 +9,55 @@
+ typedef struct
+ {
+   float f1;
+   float f2;
+   float f3;
+   float f4;
+ } test_structure_8;
+ 
+-static test_structure_8 struct8 (test_structure_8 ts)
++static test_structure_8 ABI_ATTR struct8 (test_structure_8 ts)
+ {
+   ts.f1 += 1;
+   ts.f2 += 1;
+   ts.f3 += 1;
+   ts.f4 += 1;
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts8_type;
+   ffi_type *ts8_type_elements[5];
++
++  test_structure_8 ts8_arg;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_8 *ts8_result =
++    (test_structure_8 *) malloc (sizeof(test_structure_8));
++
+   ts8_type.size = 0;
+   ts8_type.alignment = 0;
+   ts8_type.type = FFI_TYPE_STRUCT;
+   ts8_type.elements = ts8_type_elements;
+   ts8_type_elements[0] = &ffi_type_float;
+   ts8_type_elements[1] = &ffi_type_float;
+   ts8_type_elements[2] = &ffi_type_float;
+   ts8_type_elements[3] = &ffi_type_float;
+   ts8_type_elements[4] = NULL;
+ 
+-  test_structure_8 ts8_arg;
+-  
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_8 *ts8_result = 
+-    (test_structure_8 *) malloc (sizeof(test_structure_8));
+-  
+   args[0] = &ts8_type;
+   values[0] = &ts8_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts8_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts8_type, args) == FFI_OK);
+   
+   ts8_arg.f1 = 5.55f;
+   ts8_arg.f2 = 55.5f;
+   ts8_arg.f3 = -5.55f;
+   ts8_arg.f4 = -55.5f;
+ 
+   printf ("%g\n", ts8_arg.f1);
+   printf ("%g\n", ts8_arg.f2);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/struct9.c b/js/src/ctypes/libffi/testsuite/libffi.call/struct9.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/struct9.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/struct9.c
+@@ -8,50 +8,51 @@
+ #include "ffitest.h"
+ 
+ typedef struct
+ {
+   float f;
+   int i;
+ } test_structure_9;
+ 
+-static test_structure_9 struct9 (test_structure_9 ts)
++static test_structure_9 ABI_ATTR struct9 (test_structure_9 ts)
+ {
+   ts.f += 1;
+   ts.i += 1;
+ 
+   return ts;
+ }
+ 
+ int main (void)
+ {
+   ffi_cif cif;
+   ffi_type *args[MAX_ARGS];
+   void *values[MAX_ARGS];
+   ffi_type ts9_type;
+   ffi_type *ts9_type_elements[3];
++
++  test_structure_9 ts9_arg;
++
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_9 *ts9_result =
++    (test_structure_9 *) malloc (sizeof(test_structure_9));
++
+   ts9_type.size = 0;
+   ts9_type.alignment = 0;
+   ts9_type.type = FFI_TYPE_STRUCT;
+   ts9_type.elements = ts9_type_elements;
+   ts9_type_elements[0] = &ffi_type_float;
+   ts9_type_elements[1] = &ffi_type_sint;
+   ts9_type_elements[2] = NULL;
+ 
+-  test_structure_9 ts9_arg;
+-  
+-  /* This is a hack to get a properly aligned result buffer */
+-  test_structure_9 *ts9_result = 
+-    (test_structure_9 *) malloc (sizeof(test_structure_9));
+-  
+   args[0] = &ts9_type;
+   values[0] = &ts9_arg;
+   
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts9_type, args) == FFI_OK);
++  CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts9_type, args) == FFI_OK);
+   
+   ts9_arg.f = 5.55f;
+   ts9_arg.i = 5;
+   
+   printf ("%g\n", ts9_arg.f);
+   printf ("%d\n", ts9_arg.i);
+   
+   ffi_call(&cif, FFI_FN(struct9), ts9_result, values);
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/testclosure.c b/js/src/ctypes/libffi/testsuite/libffi.call/testclosure.c
+--- a/js/src/ctypes/libffi/testsuite/libffi.call/testclosure.c
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/testclosure.c
+@@ -38,23 +38,23 @@ int main (void)
+ {
+   ffi_cif cif;
+   void *code;
+   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
+   ffi_type* cls_struct_fields0[5];
+   ffi_type cls_struct_type0;
+   ffi_type* dbl_arg_types[5];
+ 
++  struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0};
++
+   cls_struct_type0.size = 0;
+   cls_struct_type0.alignment = 0;
+   cls_struct_type0.type = FFI_TYPE_STRUCT;
+   cls_struct_type0.elements = cls_struct_fields0;
+ 
+-  struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0};
+-
+   cls_struct_fields0[0] = &ffi_type_float;
+   cls_struct_fields0[1] = &ffi_type_float;
+   cls_struct_fields0[2] = &ffi_type_float;
+   cls_struct_fields0[3] = &ffi_type_float;
+   cls_struct_fields0[4] = NULL;
+ 
+   dbl_arg_types[0] = &cls_struct_type0;
+   dbl_arg_types[1] = NULL;
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/uninitialized.c b/js/src/ctypes/libffi/testsuite/libffi.call/uninitialized.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/uninitialized.c
+@@ -0,0 +1,61 @@
++/* { dg-do run } */
++#include "ffitest.h"
++
++typedef struct
++{
++  unsigned char uc;
++  double d;
++  unsigned int ui;
++} test_structure_1;
++
++static test_structure_1 struct1(test_structure_1 ts)
++{
++  ts.uc++;
++  ts.d--;
++  ts.ui++;
++
++  return ts;
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  ffi_type ts1_type;
++  ffi_type *ts1_type_elements[4];
++
++  memset(&cif, 1, sizeof(cif));
++  ts1_type.size = 0;
++  ts1_type.alignment = 0;
++  ts1_type.type = FFI_TYPE_STRUCT;
++  ts1_type.elements = ts1_type_elements;
++  ts1_type_elements[0] = &ffi_type_uchar;
++  ts1_type_elements[1] = &ffi_type_double;
++  ts1_type_elements[2] = &ffi_type_uint;
++  ts1_type_elements[3] = NULL;
++
++  test_structure_1 ts1_arg;
++  /* This is a hack to get a properly aligned result buffer */
++  test_structure_1 *ts1_result =
++    (test_structure_1 *) malloc (sizeof(test_structure_1));
++
++  args[0] = &ts1_type;
++  values[0] = &ts1_arg;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
++		     &ts1_type, args) == FFI_OK);
++
++  ts1_arg.uc = '\x01';
++  ts1_arg.d = 3.14159;
++  ts1_arg.ui = 555;
++
++  ffi_call(&cif, FFI_FN(struct1), ts1_result, values);
++
++  CHECK(ts1_result->ui == 556);
++  CHECK(ts1_result->d == 3.14159 - 1);
++
++  free (ts1_result);
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/unwindtest.cc b/js/src/ctypes/libffi/testsuite/libffi.call/unwindtest.cc
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/unwindtest.cc
+@@ -0,0 +1,117 @@
++/* Area:	ffi_closure, unwind info
++   Purpose:	Check if the unwind information is passed correctly.
++   Limitations:	none.
++   PR:		none.
++   Originator:	Jeff Sturm <jsturm@one-point.com>  */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++void ABI_ATTR
++closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
++		void** args __UNUSED__, void* userdata __UNUSED__)
++{
++  throw 9;
++}
++
++typedef void (*closure_test_type)();
++
++void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
++		      void** args, void* userdata __UNUSED__)
++ {
++    *(ffi_arg*)resp =
++      (int)*(float *)args[0] +(int)(*(float *)args[1]) +
++      (int)(*(float *)args[2]) + (int)*(float *)args[3] +
++      (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
++      (int)*(float *)args[6] + (int)(*(int *)args[7]) +
++      (int)(*(double*)args[8]) + (int)*(int *)args[9] +
++      (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
++      (int)*(int *)args[12] + (int)(*(int *)args[13]) +
++      (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata;
++
++    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
++	   (int)*(float *)args[0], (int)(*(float *)args[1]),
++	   (int)(*(float *)args[2]), (int)*(float *)args[3],
++	   (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
++	   (int)*(float *)args[6], (int)(*(int *)args[7]),
++	   (int)(*(double *)args[8]), (int)*(int *)args[9],
++	   (int)(*(int *)args[10]), (int)(*(float *)args[11]),
++	   (int)*(int *)args[12], (int)(*(int *)args[13]),
++	   (int)(*(int *)args[14]), *(int *)args[15],
++	   (int)(intptr_t)userdata, (int)*(ffi_arg*)resp);
++
++    throw (int)*(ffi_arg*)resp;
++}
++
++typedef int (*closure_test_type1)(float, float, float, float, signed short,
++				  float, float, int, double, int, int, float,
++				  int, int, int, int);
++
++int main (void)
++{
++  ffi_cif cif;
++  void *code;
++  ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code);
++  ffi_type * cl_arg_types[17];
++
++  {
++    cl_arg_types[1] = NULL;
++
++    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
++		       &ffi_type_void, cl_arg_types) == FFI_OK);
++    CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK);
++
++    try
++      {
++	(*((closure_test_type)(code)))();
++      } catch (int exception_code)
++      {
++	CHECK(exception_code == 9);
++      }
++
++    printf("part one OK\n");
++    /* { dg-output "part one OK" } */
++    }
++
++    {
++
++      cl_arg_types[0] = &ffi_type_float;
++      cl_arg_types[1] = &ffi_type_float;
++      cl_arg_types[2] = &ffi_type_float;
++      cl_arg_types[3] = &ffi_type_float;
++      cl_arg_types[4] = &ffi_type_sshort;
++      cl_arg_types[5] = &ffi_type_float;
++      cl_arg_types[6] = &ffi_type_float;
++      cl_arg_types[7] = &ffi_type_uint;
++      cl_arg_types[8] = &ffi_type_double;
++      cl_arg_types[9] = &ffi_type_uint;
++      cl_arg_types[10] = &ffi_type_uint;
++      cl_arg_types[11] = &ffi_type_float;
++      cl_arg_types[12] = &ffi_type_uint;
++      cl_arg_types[13] = &ffi_type_uint;
++      cl_arg_types[14] = &ffi_type_uint;
++      cl_arg_types[15] = &ffi_type_uint;
++      cl_arg_types[16] = NULL;
++
++      /* Initialize the cif */
++      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
++			 &ffi_type_sint, cl_arg_types) == FFI_OK);
++
++      CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
++                                 (void *) 3 /* userdata */, code)  == FFI_OK);
++      try
++	{
++	  (*((closure_test_type1)code))
++	    (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
++	     19, 21, 1);
++	  /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
++	} catch (int exception_code)
++	{
++	  CHECK(exception_code == 255);
++	}
++      printf("part two OK\n");
++      /* { dg-output "\npart two OK" } */
++    }
++    exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/unwindtest_ffi_call.cc b/js/src/ctypes/libffi/testsuite/libffi.call/unwindtest_ffi_call.cc
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/unwindtest_ffi_call.cc
+@@ -0,0 +1,54 @@
++/* Area:	ffi_call, unwind info
++   Purpose:	Check if the unwind information is passed correctly.
++   Limitations:	none.
++   PR:		none.
++   Originator:	Andreas Tobler <andreast@gcc.gnu.org> 20061213  */
++
++/* { dg-do run } */
++
++#include "ffitest.h"
++
++static int checking(int a __UNUSED__, short b __UNUSED__,
++		    signed char c __UNUSED__)
++{
++  throw 9;
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  ffi_arg rint;
++
++  signed int si;
++  signed short ss;
++  signed char sc;
++
++  args[0] = &ffi_type_sint;
++  values[0] = &si;
++  args[1] = &ffi_type_sshort;
++  values[1] = &ss;
++  args[2] = &ffi_type_schar;
++  values[2] = &sc;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
++		     &ffi_type_sint, args) == FFI_OK);
++
++  si = -6;
++  ss = -12;
++  sc = -1;
++  {
++    try
++      {
++	ffi_call(&cif, FFI_FN(checking), &rint, values);
++      } catch (int exception_code)
++      {
++	CHECK(exception_code == 9);
++      }
++    printf("part one OK\n");
++    /* { dg-output "part one OK" } */
++  }
++  exit(0);
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/va_1.c b/js/src/ctypes/libffi/testsuite/libffi.call/va_1.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/va_1.c
+@@ -0,0 +1,196 @@
++/* Area:		ffi_call
++   Purpose:		Test passing struct in variable argument lists.
++   Limitations:	none.
++   PR:			none.
++   Originator:	        ARM Ltd. */
++
++/* { dg-do run } */
++/* { dg-output "" { xfail avr32*-*-* } } */
++
++#include "ffitest.h"
++#include <stdarg.h>
++
++struct small_tag
++{
++  unsigned char a;
++  unsigned char b;
++};
++
++struct large_tag
++{
++  unsigned a;
++  unsigned b;
++  unsigned c;
++  unsigned d;
++  unsigned e;
++};
++
++static int
++test_fn (int n, ...)
++{
++  va_list ap;
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l;
++  unsigned char uc;
++  signed char sc;
++  unsigned short us;
++  signed short ss;
++  unsigned int ui;
++  signed int si;
++  unsigned long ul;
++  signed long sl;
++  float f;
++  double d;
++
++  va_start (ap, n);
++  s1 = va_arg (ap, struct small_tag);
++  l = va_arg (ap, struct large_tag);
++  s2 = va_arg (ap, struct small_tag);
++
++  uc = va_arg (ap, unsigned);
++  sc = va_arg (ap, signed);
++
++  us = va_arg (ap, unsigned);
++  ss = va_arg (ap, signed);
++
++  ui = va_arg (ap, unsigned int);
++  si = va_arg (ap, signed int);
++
++  ul = va_arg (ap, unsigned long);
++  sl = va_arg (ap, signed long);
++
++  f = va_arg (ap, double);	/* C standard promotes float->double
++				   when anonymous */
++  d = va_arg (ap, double);
++
++  printf ("%u %u %u %u %u %u %u %u %u uc=%u sc=%d %u %d %u %d %lu %ld %f %f\n",
++	  s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
++	  s2.a, s2.b,
++	  uc, sc,
++	  us, ss,
++	  ui, si,
++	  ul, sl,
++	  f, d);
++  va_end (ap);
++  return n + 1;
++}
++
++int
++main (void)
++{
++  ffi_cif cif;
++  void* args[15];
++  ffi_type* arg_types[15];
++
++  ffi_type s_type;
++  ffi_type *s_type_elements[3];
++
++  ffi_type l_type;
++  ffi_type *l_type_elements[6];
++
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l1;
++
++  int n;
++  ffi_arg res;
++
++  unsigned char uc;
++  signed char sc;
++  unsigned short us;
++  signed short ss;
++  unsigned int ui;
++  signed int si;
++  unsigned long ul;
++  signed long sl;
++  double d1;
++  double f1;
++
++  s_type.size = 0;
++  s_type.alignment = 0;
++  s_type.type = FFI_TYPE_STRUCT;
++  s_type.elements = s_type_elements;
++
++  s_type_elements[0] = &ffi_type_uchar;
++  s_type_elements[1] = &ffi_type_uchar;
++  s_type_elements[2] = NULL;
++
++  l_type.size = 0;
++  l_type.alignment = 0;
++  l_type.type = FFI_TYPE_STRUCT;
++  l_type.elements = l_type_elements;
++
++  l_type_elements[0] = &ffi_type_uint;
++  l_type_elements[1] = &ffi_type_uint;
++  l_type_elements[2] = &ffi_type_uint;
++  l_type_elements[3] = &ffi_type_uint;
++  l_type_elements[4] = &ffi_type_uint;
++  l_type_elements[5] = NULL;
++
++  arg_types[0] = &ffi_type_sint;
++  arg_types[1] = &s_type;
++  arg_types[2] = &l_type;
++  arg_types[3] = &s_type;
++  arg_types[4] = &ffi_type_uchar;
++  arg_types[5] = &ffi_type_schar;
++  arg_types[6] = &ffi_type_ushort;
++  arg_types[7] = &ffi_type_sshort;
++  arg_types[8] = &ffi_type_uint;
++  arg_types[9] = &ffi_type_sint;
++  arg_types[10] = &ffi_type_ulong;
++  arg_types[11] = &ffi_type_slong;
++  arg_types[12] = &ffi_type_double;
++  arg_types[13] = &ffi_type_double;
++  arg_types[14] = NULL;
++
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 14, &ffi_type_sint, arg_types) == FFI_OK);
++
++  s1.a = 5;
++  s1.b = 6;
++
++  l1.a = 10;
++  l1.b = 11;
++  l1.c = 12;
++  l1.d = 13;
++  l1.e = 14;
++
++  s2.a = 7;
++  s2.b = 8;
++
++  n = 41;
++
++  uc = 9;
++  sc = 10;
++  us = 11;
++  ss = 12;
++  ui = 13;
++  si = 14;
++  ul = 15;
++  sl = 16;
++  f1 = 2.12;
++  d1 = 3.13;
++
++  args[0] = &n;
++  args[1] = &s1;
++  args[2] = &l1;
++  args[3] = &s2;
++  args[4] = &uc;
++  args[5] = &sc;
++  args[6] = &us;
++  args[7] = &ss;
++  args[8] = &ui;
++  args[9] = &si;
++  args[10] = &ul;
++  args[11] = &sl;
++  args[12] = &f1;
++  args[13] = &d1;
++  args[14] = NULL;
++
++  ffi_call(&cif, FFI_FN(test_fn), &res, args);
++  /* { dg-output "5 6 10 11 12 13 14 7 8 uc=9 sc=10 11 12 13 14 15 16 2.120000 3.130000" } */
++  printf("res: %d\n", (int) res);
++  /* { dg-output "\nres: 42" } */
++
++  return 0;
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/va_struct1.c b/js/src/ctypes/libffi/testsuite/libffi.call/va_struct1.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/va_struct1.c
+@@ -0,0 +1,121 @@
++/* Area:		ffi_call
++   Purpose:		Test passing struct in variable argument lists.
++   Limitations:	none.
++   PR:			none.
++   Originator: ARM Ltd. */
++
++/* { dg-do run } */
++/* { dg-output "" { xfail avr32*-*-* } } */
++
++#include "ffitest.h"
++#include <stdarg.h>
++
++struct small_tag
++{
++  unsigned char a;
++  unsigned char b;
++};
++
++struct large_tag
++{
++  unsigned a;
++  unsigned b;
++  unsigned c;
++  unsigned d;
++  unsigned e;
++};
++
++static int
++test_fn (int n, ...)
++{
++  va_list ap;
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l;
++
++  va_start (ap, n);
++  s1 = va_arg (ap, struct small_tag);
++  l = va_arg (ap, struct large_tag);
++  s2 = va_arg (ap, struct small_tag);
++  printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
++	  s2.a, s2.b);
++  va_end (ap);
++  return n + 1;
++}
++
++int
++main (void)
++{
++  ffi_cif cif;
++  void* args[5];
++  ffi_type* arg_types[5];
++
++  ffi_type s_type;
++  ffi_type *s_type_elements[3];
++
++  ffi_type l_type;
++  ffi_type *l_type_elements[6];
++
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l1;
++
++  int n;
++  ffi_arg res;
++
++  s_type.size = 0;
++  s_type.alignment = 0;
++  s_type.type = FFI_TYPE_STRUCT;
++  s_type.elements = s_type_elements;
++
++  s_type_elements[0] = &ffi_type_uchar;
++  s_type_elements[1] = &ffi_type_uchar;
++  s_type_elements[2] = NULL;
++
++  l_type.size = 0;
++  l_type.alignment = 0;
++  l_type.type = FFI_TYPE_STRUCT;
++  l_type.elements = l_type_elements;
++
++  l_type_elements[0] = &ffi_type_uint;
++  l_type_elements[1] = &ffi_type_uint;
++  l_type_elements[2] = &ffi_type_uint;
++  l_type_elements[3] = &ffi_type_uint;
++  l_type_elements[4] = &ffi_type_uint;
++  l_type_elements[5] = NULL;
++
++  arg_types[0] = &ffi_type_sint;
++  arg_types[1] = &s_type;
++  arg_types[2] = &l_type;
++  arg_types[3] = &s_type;
++  arg_types[4] = NULL;
++
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint, arg_types) == FFI_OK);
++
++  s1.a = 5;
++  s1.b = 6;
++
++  l1.a = 10;
++  l1.b = 11;
++  l1.c = 12;
++  l1.d = 13;
++  l1.e = 14;
++
++  s2.a = 7;
++  s2.b = 8;
++
++  n = 41;
++
++  args[0] = &n;
++  args[1] = &s1;
++  args[2] = &l1;
++  args[3] = &s2;
++  args[4] = NULL;
++
++  ffi_call(&cif, FFI_FN(test_fn), &res, args);
++  /* { dg-output "5 6 10 11 12 13 14 7 8" } */
++  printf("res: %d\n", (int) res);
++  /* { dg-output "\nres: 42" } */
++
++  return 0;
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/va_struct2.c b/js/src/ctypes/libffi/testsuite/libffi.call/va_struct2.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/va_struct2.c
+@@ -0,0 +1,123 @@
++/* Area:		ffi_call
++   Purpose:		Test passing struct in variable argument lists.
++   Limitations:	none.
++   PR:			none.
++   Originator: ARM Ltd. */
++
++/* { dg-do run } */
++/* { dg-output "" { xfail avr32*-*-* } } */
++
++#include "ffitest.h"
++#include <stdarg.h>
++
++struct small_tag
++{
++  unsigned char a;
++  unsigned char b;
++};
++
++struct large_tag
++{
++  unsigned a;
++  unsigned b;
++  unsigned c;
++  unsigned d;
++  unsigned e;
++};
++
++static struct small_tag
++test_fn (int n, ...)
++{
++  va_list ap;
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l;
++
++  va_start (ap, n);
++  s1 = va_arg (ap, struct small_tag);
++  l = va_arg (ap, struct large_tag);
++  s2 = va_arg (ap, struct small_tag);
++  printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
++	  s2.a, s2.b);
++  va_end (ap);
++  s1.a += s2.a;
++  s1.b += s2.b;
++  return s1;
++}
++
++int
++main (void)
++{
++  ffi_cif cif;
++  void* args[5];
++  ffi_type* arg_types[5];
++
++  ffi_type s_type;
++  ffi_type *s_type_elements[3];
++
++  ffi_type l_type;
++  ffi_type *l_type_elements[6];
++
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l1;
++
++  int n;
++  struct small_tag res;
++
++  s_type.size = 0;
++  s_type.alignment = 0;
++  s_type.type = FFI_TYPE_STRUCT;
++  s_type.elements = s_type_elements;
++
++  s_type_elements[0] = &ffi_type_uchar;
++  s_type_elements[1] = &ffi_type_uchar;
++  s_type_elements[2] = NULL;
++
++  l_type.size = 0;
++  l_type.alignment = 0;
++  l_type.type = FFI_TYPE_STRUCT;
++  l_type.elements = l_type_elements;
++
++  l_type_elements[0] = &ffi_type_uint;
++  l_type_elements[1] = &ffi_type_uint;
++  l_type_elements[2] = &ffi_type_uint;
++  l_type_elements[3] = &ffi_type_uint;
++  l_type_elements[4] = &ffi_type_uint;
++  l_type_elements[5] = NULL;
++
++  arg_types[0] = &ffi_type_sint;
++  arg_types[1] = &s_type;
++  arg_types[2] = &l_type;
++  arg_types[3] = &s_type;
++  arg_types[4] = NULL;
++
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &s_type, arg_types) == FFI_OK);
++
++  s1.a = 5;
++  s1.b = 6;
++
++  l1.a = 10;
++  l1.b = 11;
++  l1.c = 12;
++  l1.d = 13;
++  l1.e = 14;
++
++  s2.a = 7;
++  s2.b = 8;
++
++  n = 41;
++
++  args[0] = &n;
++  args[1] = &s1;
++  args[2] = &l1;
++  args[3] = &s2;
++  args[4] = NULL;
++
++  ffi_call(&cif, FFI_FN(test_fn), &res, args);
++  /* { dg-output "5 6 10 11 12 13 14 7 8" } */
++  printf("res: %d %d\n", res.a, res.b);
++  /* { dg-output "\nres: 12 14" } */
++
++  return 0;
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/va_struct3.c b/js/src/ctypes/libffi/testsuite/libffi.call/va_struct3.c
+new file mode 100644
+--- /dev/null
++++ b/js/src/ctypes/libffi/testsuite/libffi.call/va_struct3.c
+@@ -0,0 +1,125 @@
++/* Area:		ffi_call
++   Purpose:		Test passing struct in variable argument lists.
++   Limitations:	none.
++   PR:			none.
++   Originator:	ARM Ltd. */
++
++/* { dg-do run } */
++/* { dg-output "" { xfail avr32*-*-* } } */
++
++#include "ffitest.h"
++#include <stdarg.h>
++
++struct small_tag
++{
++  unsigned char a;
++  unsigned char b;
++};
++
++struct large_tag
++{
++  unsigned a;
++  unsigned b;
++  unsigned c;
++  unsigned d;
++  unsigned e;
++};
++
++static struct large_tag
++test_fn (int n, ...)
++{
++  va_list ap;
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l;
++
++  va_start (ap, n);
++  s1 = va_arg (ap, struct small_tag);
++  l = va_arg (ap, struct large_tag);
++  s2 = va_arg (ap, struct small_tag);
++  printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
++	  s2.a, s2.b);
++  va_end (ap);
++  l.a += s1.a;
++  l.b += s1.b;
++  l.c += s2.a;
++  l.d += s2.b;
++  return l;
++}
++
++int
++main (void)
++{
++  ffi_cif cif;
++  void* args[5];
++  ffi_type* arg_types[5];
++
++  ffi_type s_type;
++  ffi_type *s_type_elements[3];
++
++  ffi_type l_type;
++  ffi_type *l_type_elements[6];
++
++  struct small_tag s1;
++  struct small_tag s2;
++  struct large_tag l1;
++
++  int n;
++  struct large_tag res;
++
++  s_type.size = 0;
++  s_type.alignment = 0;
++  s_type.type = FFI_TYPE_STRUCT;
++  s_type.elements = s_type_elements;
++
++  s_type_elements[0] = &ffi_type_uchar;
++  s_type_elements[1] = &ffi_type_uchar;
++  s_type_elements[2] = NULL;
++
++  l_type.size = 0;
++  l_type.alignment = 0;
++  l_type.type = FFI_TYPE_STRUCT;
++  l_type.elements = l_type_elements;
++
++  l_type_elements[0] = &ffi_type_uint;
++  l_type_elements[1] = &ffi_type_uint;
++  l_type_elements[2] = &ffi_type_uint;
++  l_type_elements[3] = &ffi_type_uint;
++  l_type_elements[4] = &ffi_type_uint;
++  l_type_elements[5] = NULL;
++
++  arg_types[0] = &ffi_type_sint;
++  arg_types[1] = &s_type;
++  arg_types[2] = &l_type;
++  arg_types[3] = &s_type;
++  arg_types[4] = NULL;
++
++  CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &l_type, arg_types) == FFI_OK);
++
++  s1.a = 5;
++  s1.b = 6;
++
++  l1.a = 10;
++  l1.b = 11;
++  l1.c = 12;
++  l1.d = 13;
++  l1.e = 14;
++
++  s2.a = 7;
++  s2.b = 8;
++
++  n = 41;
++
++  args[0] = &n;
++  args[1] = &s1;
++  args[2] = &l1;
++  args[3] = &s2;
++  args[4] = NULL;
++
++  ffi_call(&cif, FFI_FN(test_fn), &res, args);
++  /* { dg-output "5 6 10 11 12 13 14 7 8" } */
++  printf("res: %d %d %d %d %d\n", res.a, res.b, res.c, res.d, res.e);
++  /* { dg-output "\nres: 15 17 19 21 14" } */
++
++  return 0;
++}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.special/ffitestcxx.h b/js/src/ctypes/libffi/testsuite/libffi.special/ffitestcxx.h
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/libffi.special/ffitestcxx.h
++++ /dev/null
+@@ -1,96 +0,0 @@
+-#include <stdlib.h>
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <ffi.h>
+-#include "fficonfig.h"
+-
+-#define MAX_ARGS 256
+-
+-
+-/* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
+-#undef __UNUSED__
+-#if defined(__GNUC__)
+-#define __UNUSED__ __attribute__((__unused__))
+-#else
+-#define __UNUSED__
+-#endif
+-
+-#define CHECK(x) (!(x) ? abort() : (void)0)
+-
+-/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
+-   file open.  */
+-#ifdef HAVE_MMAP_ANON
+-# undef HAVE_MMAP_DEV_ZERO
+-
+-# include <sys/mman.h>
+-# ifndef MAP_FAILED
+-#  define MAP_FAILED -1
+-# endif
+-# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
+-#  define MAP_ANONYMOUS MAP_ANON
+-# endif
+-# define USING_MMAP
+-
+-#endif
+-
+-#ifdef HAVE_MMAP_DEV_ZERO
+-
+-# include <sys/mman.h>
+-# ifndef MAP_FAILED
+-#  define MAP_FAILED -1
+-# endif
+-# define USING_MMAP
+-
+-#endif
+-
+-
+-/* MinGW kludge.  */
+-#ifdef _WIN64
+-#define PRIdLL "I64d"
+-#define PRIuLL "I64u"
+-#else
+-#define PRIdLL "lld"
+-#define PRIuLL "llu"
+-#endif
+-
+-#ifdef USING_MMAP
+-static inline void *
+-allocate_mmap (size_t size)
+-{
+-  void *page;
+-#if defined (HAVE_MMAP_DEV_ZERO)
+-  static int dev_zero_fd = -1;
+-#endif
+-
+-#ifdef HAVE_MMAP_DEV_ZERO
+-  if (dev_zero_fd == -1)
+-    {
+-      dev_zero_fd = open ("/dev/zero", O_RDONLY);
+-      if (dev_zero_fd == -1)
+-	{
+-	  perror ("open /dev/zero: %m");
+-	  exit (1);
+-	}
+-    }
+-#endif
+-
+-
+-#ifdef HAVE_MMAP_ANON
+-  page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
+-	       MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+-#endif
+-#ifdef HAVE_MMAP_DEV_ZERO
+-  page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
+-	       MAP_PRIVATE, dev_zero_fd, 0);
+-#endif
+-
+-  if (page == (char *) MAP_FAILED)
+-    {
+-      perror ("virtual memory exhausted");
+-      exit (1);
+-    }
+-
+-  return page;
+-}
+-
+-#endif
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.special/special.exp b/js/src/ctypes/libffi/testsuite/libffi.special/special.exp
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/libffi.special/special.exp
++++ /dev/null
+@@ -1,37 +0,0 @@
+-# Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 3 of the License, or
+-# (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; see the file COPYING3.  If not see
+-# <http://www.gnu.org/licenses/>.
+-
+-load_lib libffi-dg.exp
+-
+-dg-init
+-libffi-init
+-
+-global srcdir subdir
+-
+-global cxx_options
+-
+-set cxx_options " -shared-libgcc -lstdc++"
+-
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O0 -W -Wall"
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O2"
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O3"
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-Os"
+-
+-dg-finish
+-
+-# Local Variables:
+-# tcl-indent-level:4
+-# End:
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.special/unwindtest.cc b/js/src/ctypes/libffi/testsuite/libffi.special/unwindtest.cc
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/libffi.special/unwindtest.cc
++++ /dev/null
+@@ -1,124 +0,0 @@
+-/* Area:	ffi_closure, unwind info
+-   Purpose:	Check if the unwind information is passed correctly.
+-   Limitations:	none.
+-   PR:		none.
+-   Originator:	Jeff Sturm <jsturm@one-point.com>  */
+-
+-/* { dg-do run } */
+-#include "ffitestcxx.h"
+-
+-#if defined HAVE_STDINT_H
+-#include <stdint.h>
+-#endif
+-
+-#if defined HAVE_INTTYPES_H
+-#include <inttypes.h>
+-#endif
+-
+-void
+-closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
+-		void** args __UNUSED__, void* userdata __UNUSED__)
+-{
+-  throw 9;
+-}
+-
+-typedef void (*closure_test_type)();
+-
+-void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
+-		      void** args, void* userdata __UNUSED__)
+- {
+-    *(ffi_arg*)resp =
+-      (int)*(float *)args[0] +(int)(*(float *)args[1]) +
+-      (int)(*(float *)args[2]) + (int)*(float *)args[3] +
+-      (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
+-      (int)*(float *)args[6] + (int)(*(int *)args[7]) +
+-      (int)(*(double*)args[8]) + (int)*(int *)args[9] +
+-      (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
+-      (int)*(int *)args[12] + (int)(*(int *)args[13]) +
+-      (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata;
+-
+-    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
+-	   (int)*(float *)args[0], (int)(*(float *)args[1]),
+-	   (int)(*(float *)args[2]), (int)*(float *)args[3],
+-	   (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
+-	   (int)*(float *)args[6], (int)(*(int *)args[7]),
+-	   (int)(*(double *)args[8]), (int)*(int *)args[9],
+-	   (int)(*(int *)args[10]), (int)(*(float *)args[11]),
+-	   (int)*(int *)args[12], (int)(*(int *)args[13]),
+-	   (int)(*(int *)args[14]), *(int *)args[15],
+-	   (int)(intptr_t)userdata, (int)*(ffi_arg*)resp);
+-
+-    throw (int)*(ffi_arg*)resp;
+-}
+-
+-typedef int (*closure_test_type1)(float, float, float, float, signed short,
+-				  float, float, int, double, int, int, float,
+-				  int, int, int, int);
+-
+-int main (void)
+-{
+-  ffi_cif cif;
+-  void *code;
+-  ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code);
+-  ffi_type * cl_arg_types[17];
+-
+-  {
+-    cl_arg_types[1] = NULL;
+-
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
+-		       &ffi_type_void, cl_arg_types) == FFI_OK);
+-    CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK);
+-
+-    try
+-      {
+-	(*((closure_test_type)(code)))();
+-      } catch (int exception_code)
+-      {
+-	CHECK(exception_code == 9);
+-      }
+-
+-    printf("part one OK\n");
+-    /* { dg-output "part one OK" } */
+-    }
+-
+-    {
+-
+-      cl_arg_types[0] = &ffi_type_float;
+-      cl_arg_types[1] = &ffi_type_float;
+-      cl_arg_types[2] = &ffi_type_float;
+-      cl_arg_types[3] = &ffi_type_float;
+-      cl_arg_types[4] = &ffi_type_sshort;
+-      cl_arg_types[5] = &ffi_type_float;
+-      cl_arg_types[6] = &ffi_type_float;
+-      cl_arg_types[7] = &ffi_type_uint;
+-      cl_arg_types[8] = &ffi_type_double;
+-      cl_arg_types[9] = &ffi_type_uint;
+-      cl_arg_types[10] = &ffi_type_uint;
+-      cl_arg_types[11] = &ffi_type_float;
+-      cl_arg_types[12] = &ffi_type_uint;
+-      cl_arg_types[13] = &ffi_type_uint;
+-      cl_arg_types[14] = &ffi_type_uint;
+-      cl_arg_types[15] = &ffi_type_uint;
+-      cl_arg_types[16] = NULL;
+-
+-      /* Initialize the cif */
+-      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
+-			 &ffi_type_sint, cl_arg_types) == FFI_OK);
+-
+-      CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
+-                                 (void *) 3 /* userdata */, code)  == FFI_OK);
+-      try
+-	{
+-	  (*((closure_test_type1)code))
+-	    (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
+-	     19, 21, 1);
+-	  /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
+-	} catch (int exception_code)
+-	{
+-	  CHECK(exception_code == 255);
+-	}
+-      printf("part two OK\n");
+-      /* { dg-output "\npart two OK" } */
+-    }
+-    exit(0);
+-}
+diff --git a/js/src/ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc b/js/src/ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
+deleted file mode 100644
+--- a/js/src/ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
++++ /dev/null
+@@ -1,53 +0,0 @@
+-/* Area:	ffi_call, unwind info
+-   Purpose:	Check if the unwind information is passed correctly.
+-   Limitations:	none.
+-   PR:		none.
+-   Originator:	Andreas Tobler <andreast@gcc.gnu.org> 20061213  */
+-
+-/* { dg-do run } */
+-#include "ffitestcxx.h"
+-
+-static int checking(int a __UNUSED__, short b __UNUSED__,
+-		    signed char c __UNUSED__)
+-{
+-  throw 9;
+-}
+-
+-int main (void)
+-{
+-  ffi_cif cif;
+-  ffi_type *args[MAX_ARGS];
+-  void *values[MAX_ARGS];
+-  ffi_arg rint;
+-
+-  signed int si;
+-  signed short ss;
+-  signed char sc;
+-
+-  args[0] = &ffi_type_sint;
+-  values[0] = &si;
+-  args[1] = &ffi_type_sshort;
+-  values[1] = &ss;
+-  args[2] = &ffi_type_schar;
+-  values[2] = &sc;
+-
+-  /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+-		     &ffi_type_sint, args) == FFI_OK);
+-
+-  si = -6;
+-  ss = -12;
+-  sc = -1;
+-  {
+-    try
+-      {
+-	ffi_call(&cif, FFI_FN(checking), &rint, values);
+-      } catch (int exception_code)
+-      {
+-	CHECK(exception_code == 9);
+-      }
+-    printf("part one OK\n");
+-    /* { dg-output "part one OK" } */
+-  }
+-  exit(0);
+-}
+--- a/js/src/ctypes/patches-libffi/00-base.patch
++++ /dev/null
+@@ -1,1349 +0,0 @@
+-Patch libffi to fix bug 550602, bug 538216, bug545634, bug 594611, bug 605421
+-and bug 631928.
+-
+-diff --git a/js/src/ctypes/libffi/Makefile.in b/js/src/ctypes/libffi/Makefile.in
+---- a/js/src/ctypes/libffi/Makefile.in
+-+++ b/js/src/ctypes/libffi/Makefile.in
+-@@ -199,17 +199,17 @@ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIB
+- CCLD = $(CC)
+- LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+- 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+- 	$(LDFLAGS) -o $@
+- SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \
+- 	$(libffi_convenience_la_SOURCES) \
+- 	$(nodist_libffi_convenience_la_SOURCES)
+- DIST_SOURCES = $(libffi_la_SOURCES) $(libffi_convenience_la_SOURCES)
+--INFO_DEPS = $(srcdir)/doc/libffi.info
+-+INFO_DEPS =
+- am__TEXINFO_TEX_DIR = $(srcdir)
+- DVIS = doc/libffi.dvi
+- PDFS = doc/libffi.pdf
+- PSS = doc/libffi.ps
+- HTMLS = doc/libffi.html
+- TEXINFOS = doc/libffi.texi
+- TEXI2DVI = texi2dvi
+- TEXI2PDF = $(TEXI2DVI) --pdf --batch
+-@@ -986,57 +986,57 @@ distclean-compile:
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi.Plo@am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi64.Plo@am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/freebsd.Plo@am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/sysv.Plo@am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/unix64.Plo@am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win32.Plo@am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win64.Plo@am__quote@
+- 
+--.S.o:
+-+%.o: %.S
+- @am__fastdepCCAS_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+- @am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+- @am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+- @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+- @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- @am__fastdepCCAS_FALSE@	$(CPPASCOMPILE) -c -o $@ $<
+- 
+--.S.obj:
+-+%.obj: %.S
+- @am__fastdepCCAS_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+- @am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+- @am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+- @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+- @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- @am__fastdepCCAS_FALSE@	$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+- 
+--.S.lo:
+-+%.lo: %.S
+- @am__fastdepCCAS_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+- @am__fastdepCCAS_TRUE@	$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+- @am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+- @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+- @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- @am__fastdepCCAS_FALSE@	$(LTCPPASCOMPILE) -c -o $@ $<
+- 
+--.c.o:
+-+%.o: %.c
+- @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+- @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+- @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+- @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+- @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
+- 
+--.c.obj:
+-+%.obj: %.c
+- @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+- @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+- @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+- @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+- @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+- 
+--.c.lo:
+-+%.lo: %.c
+- @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+- @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+- @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+- @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+- @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+- 
+- mostlyclean-libtool:
+-@@ -1129,17 +1129,17 @@ doc/libffi.html: doc/libffi.texi $(srcdi
+- 	-@rm -f vti.tmp
+- 	@cp $(srcdir)/doc/version.texi $@
+- 
+- mostlyclean-vti:
+- 	-rm -f vti.tmp
+- 
+- maintainer-clean-vti:
+- @MAINTAINER_MODE_TRUE@	-rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi
+--.dvi.ps:
+-+%.ps: %.dvi
+- 	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+- 	$(DVIPS) -o $@ $<
+- 
+- uninstall-dvi-am:
+- 	@$(NORMAL_UNINSTALL)
+- 	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+- 	for p in $$list; do \
+- 	  $(am__strip_dir) \
+-diff --git a/js/src/ctypes/libffi/aclocal.m4 b/js/src/ctypes/libffi/aclocal.m4
+---- a/js/src/ctypes/libffi/aclocal.m4
+-+++ b/js/src/ctypes/libffi/aclocal.m4
+-@@ -4703,17 +4703,17 @@ dnl Note also adjust exclude_expsyms for
+-       # Tell ltmain to make .dll files, not .so files.
+-       shrext_cmds=".dll"
+-       # FIXME: Setting linknames here is a bad hack.
+-       _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+-       # The linker will automatically build a .lib file if we build a DLL.
+-       _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+-       # FIXME: Should let the user specify the lib program.
+-       _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+--      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+-+      _LT_TAGVAR(fix_srcfile_path, $1)=''
+-       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-       ;;
+- 
+-     darwin* | rhapsody*)
+-       _LT_DARWIN_LINKER_FEATURES($1)
+-       ;;
+- 
+-     dgux*)
+-diff --git a/js/src/ctypes/libffi/config.sub b/js/src/ctypes/libffi/config.sub
+---- a/js/src/ctypes/libffi/config.sub
+-+++ b/js/src/ctypes/libffi/config.sub
+-@@ -1,15 +1,15 @@
+- #! /bin/sh
+- # Configuration validation subroutine script.
+- #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+- #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+- #   Free Software Foundation, Inc.
+- 
+--timestamp='2009-11-07'
+-+timestamp='2011-01-03'
+- 
+- # This file is (in principle) common to ALL GNU software.
+- # The presence of a machine in this file suggests that SOME GNU software
+- # can handle that machine.  It does not imply ALL GNU software can.
+- #
+- # This file is free software; you can redistribute it and/or modify
+- # it under the terms of the GNU General Public License as published by
+- # the Free Software Foundation; either version 2 of the License, or
+-@@ -121,17 +121,17 @@ esac
+- 
+- # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+- # Here we must recognize all the valid KERNEL-OS combinations.
+- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+- case $maybe_os in
+-   nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+-   uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+-   kopensolaris*-gnu* | \
+--  storm-chaos* | os2-emx* | rtmk-nova*)
+-+  storm-chaos* | os2-emx* | rtmk-nova* | wince-winmo*)
+-     os=-$maybe_os
+-     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+-     ;;
+-   *)
+-     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+-     if [ $basic_machine != $1 ]
+-     then os=`echo $1 | sed 's/.*-/-/'`
+-     else os=; fi
+-@@ -282,32 +282,30 @@ case $basic_machine in
+- 	| mt \
+- 	| msp430 \
+- 	| nios | nios2 \
+- 	| ns16k | ns32k \
+- 	| or32 \
+- 	| pdp10 | pdp11 | pj | pjl \
+- 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+- 	| pyramid \
+--	| rx \
+- 	| score \
+- 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+- 	| sh64 | sh64le \
+- 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+- 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+- 	| spu | strongarm \
+- 	| tahoe | thumb | tic4x | tic80 | tron \
+--	| ubicom32 \
+- 	| v850 | v850e \
+- 	| we32k \
+- 	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+- 	| z8k | z80)
+- 		basic_machine=$basic_machine-unknown
+- 		;;
+--	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+-+	m6811 | m68hc11 | m6812 | m68hc12)
+- 		# Motorola 68HC11/12.
+- 		basic_machine=$basic_machine-unknown
+- 		os=-none
+- 		;;
+- 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+- 		;;
+- 	ms1)
+- 		basic_machine=mt-unknown
+-@@ -368,26 +366,25 @@ case $basic_machine in
+- 	| mt-* \
+- 	| msp430-* \
+- 	| nios-* | nios2-* \
+- 	| none-* | np1-* | ns16k-* | ns32k-* \
+- 	| orion-* \
+- 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+- 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+- 	| pyramid-* \
+--	| romp-* | rs6000-* | rx-* \
+-+	| romp-* | rs6000-* \
+- 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+- 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+- 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+- 	| sparclite-* \
+- 	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+- 	| tahoe-* | thumb-* \
+- 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+- 	| tron-* \
+--	| ubicom32-* \
+- 	| v850-* | v850e-* | vax-* \
+- 	| we32k-* \
+- 	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+- 	| xstormy16-* | xtensa*-* \
+- 	| ymp-* \
+- 	| z8k-* | z80-*)
+- 		;;
+- 	# Recognize the basic CPU types without company name, with glob match.
+-@@ -1294,17 +1291,17 @@ case $os in
+- 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+- 	      | -uxpv* | -beos* | -mpeix* | -udk* \
+- 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+- 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+- 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+- 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+- 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+- 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+--	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+-+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -winmo*)
+- 	# Remember, each alternative MUST END IN *, to match a version number.
+- 		;;
+- 	-qnx*)
+- 		case $basic_machine in
+- 		    x86-* | i*86-*)
+- 			;;
+- 		    *)
+- 			os=-nto$os
+-@@ -1336,16 +1333,19 @@ case $os in
+- 		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+- 		;;
+- 	-opened*)
+- 		os=-openedition
+- 		;;
+-         -os400*)
+- 		os=-os400
+- 		;;
+-+	-wince-winmo*)
+-+		os=-wince-winmo
+-+		;;
+- 	-wince*)
+- 		os=-wince
+- 		;;
+- 	-osfrose*)
+- 		os=-osfrose
+- 		;;
+- 	-osf*)
+- 		os=-osf
+-@@ -1427,16 +1427,19 @@ case $os in
+- 		os=-kaos
+- 		;;
+- 	-zvmoe)
+- 		os=-zvmoe
+- 		;;
+- 	-dicos*)
+- 		os=-dicos
+- 		;;
+-+        -android*)
+-+	        os=-android
+-+                ;;
+- 	-none)
+- 		;;
+- 	*)
+- 		# Get rid of the `-' at the beginning of $os.
+- 		os=`echo $os | sed 's/[^-]*-//'`
+- 		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+- 		exit 1
+- 		;;
+-@@ -1681,16 +1684,19 @@ case $basic_machine in
+- 				vendor=apple
+- 				;;
+- 			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+- 				vendor=atari
+- 				;;
+- 			-vos*)
+- 				vendor=stratus
+- 				;;
+-+			*-android*|*-linuxandroid*)
+-+				vendor=linux-
+-+				;;
+- 		esac
+- 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+- 		;;
+- esac
+- 
+- echo $basic_machine$os
+- exit
+- 
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -8903,17 +8903,17 @@ if test -z "$aix_libpath"; then aix_libp
+-       # Tell ltmain to make .dll files, not .so files.
+-       shrext_cmds=".dll"
+-       # FIXME: Setting linknames here is a bad hack.
+-       archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+-       # The linker will automatically build a .lib file if we build a DLL.
+-       old_archive_from_new_cmds='true'
+-       # FIXME: Should let the user specify the lib program.
+-       old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+--      fix_srcfile_path='`cygpath -w "$srcfile"`'
+-+      fix_srcfile_path=''
+-       enable_shared_with_static_runtimes=yes
+-       ;;
+- 
+-     darwin* | rhapsody*)
+- 
+- 
+-   archive_cmds_need_lc=no
+-   hardcode_direct=no
+-@@ -12270,20 +12270,20 @@ fi
+- 
+- if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
+-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5
+- $as_echo_n "checking assembler supports pc related relocs... " >&6; }
+- if test "${libffi_cv_as_x86_pcrel+set}" = set; 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; then
+-+	    libffi_cv_as_x86_pcrel=yes
+- 	fi
+- 
+- fi
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5
+- $as_echo "$libffi_cv_as_x86_pcrel" >&6; }
+-     if test "x$libffi_cv_as_x86_pcrel" = xyes; then
+- 
+- $as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -272,20 +272,20 @@ if test x$TARGET = xSPARC; then
+-        AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
+- 	       [Define if your assembler supports .register.])
+-     fi
+- 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; then
+-+	    libffi_cv_as_x86_pcrel=yes
+- 	fi
+- 	])
+-     if test "x$libffi_cv_as_x86_pcrel" = xyes; then
+- 	AC_DEFINE(HAVE_AS_X86_PCREL, 1,
+- 		  [Define if your assembler supports PC relative relocs.])
+-     fi
+- 
+-     AC_CACHE_CHECK([assembler .ascii pseudo-op support],
+-diff --git a/js/src/ctypes/libffi/include/ffi.h.in b/js/src/ctypes/libffi/include/ffi.h.in
+---- a/js/src/ctypes/libffi/include/ffi.h.in
+-+++ b/js/src/ctypes/libffi/include/ffi.h.in
+-@@ -72,25 +72,37 @@ extern "C" {
+- #endif
+- 
+- #include <stddef.h>
+- #include <limits.h>
+- 
+- /* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
+-    But we can find it either under the correct ANSI name, or under GNU
+-    C's internal name.  */
+-+
+-+#define FFI_64_BIT_MAX 9223372036854775807
+-+
+- #ifdef LONG_LONG_MAX
+- # define FFI_LONG_LONG_MAX LONG_LONG_MAX
+- #else
+- # ifdef LLONG_MAX
+- #  define FFI_LONG_LONG_MAX LLONG_MAX
+- # else
+- #  ifdef __GNUC__
+- #   define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
+- #  endif
+-+#  ifdef _AIX
+-+#   ifndef __PPC64__
+-+#    if defined (__IBMC__) || defined (__IBMCPP__)
+-+#     define FFI_LONG_LONG_MAX LONGLONG_MAX
+-+#    endif
+-+#   endif /* __PPC64__ */
+-+#   undef  FFI_64_BIT_MAX
+-+#   define FFI_64_BIT_MAX 9223372036854775807LL
+-+#  endif
+- # endif
+- #endif
+- 
+- /* The closure code assumes that this works on pointers, i.e. a size_t	*/
+- /* can hold a pointer.							*/
+- 
+- typedef struct _ffi_type
+- {
+-@@ -127,27 +139,27 @@ typedef struct _ffi_type
+- #elif INT_MAX == 9223372036854775807
+- # define ffi_type_uint         ffi_type_uint64
+- # define ffi_type_sint         ffi_type_sint64
+- #else
+-  #error "int size not supported"
+- #endif
+- 
+- #if LONG_MAX == 2147483647
+--# if FFI_LONG_LONG_MAX != 9223372036854775807
+-+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX
+-  #error "no 64-bit data type supported"
+- # endif
+--#elif LONG_MAX != 9223372036854775807
+-+#elif LONG_MAX != FFI_64_BIT_MAX
+-  #error "long size not supported"
+- #endif
+- 
+- #if LONG_MAX == 2147483647
+- # define ffi_type_ulong        ffi_type_uint32
+- # define ffi_type_slong        ffi_type_sint32
+--#elif LONG_MAX == 9223372036854775807
+-+#elif LONG_MAX == FFI_64_BIT_MAX
+- # define ffi_type_ulong        ffi_type_uint64
+- # define ffi_type_slong        ffi_type_sint64
+- #else
+-  #error "long size not supported"
+- #endif
+- 
+- /* These are defined in types.c */
+- extern ffi_type ffi_type_void;
+-@@ -190,17 +202,17 @@ typedef struct {
+- #endif
+- } ffi_cif;
+- 
+- /* ---- Definitions for the raw API -------------------------------------- */
+- 
+- #ifndef FFI_SIZEOF_ARG
+- # if LONG_MAX == 2147483647
+- #  define FFI_SIZEOF_ARG        4
+--# elif LONG_MAX == 9223372036854775807
+-+# elif LONG_MAX == FFI_64_BIT_MAX
+- #  define FFI_SIZEOF_ARG        8
+- # endif
+- #endif
+- 
+- #ifndef FFI_SIZEOF_JAVA_RAW
+- #  define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG
+- #endif
+- 
+-diff --git a/js/src/ctypes/libffi/src/arm/ffi.c b/js/src/ctypes/libffi/src/arm/ffi.c
+---- a/js/src/ctypes/libffi/src/arm/ffi.c
+-+++ b/js/src/ctypes/libffi/src/arm/ffi.c
+-@@ -24,22 +24,30 @@
+-    DEALINGS IN THE SOFTWARE.
+-    ----------------------------------------------------------------------- */
+- 
+- #include <ffi.h>
+- #include <ffi_common.h>
+- 
+- #include <stdlib.h>
+- 
+-+/* Forward declares. */
+-+static int vfp_type_p (ffi_type *);
+-+static void layout_vfp_args (ffi_cif *);
+-+
+- /* ffi_prep_args is called by the assembly routine once stack space
+--   has been allocated for the function's arguments */
+--
+--void ffi_prep_args(char *stack, extended_cif *ecif)
+-+   has been allocated for the function's arguments
+-+   
+-+   The vfp_space parameter is the load area for VFP regs, the return
+-+   value is cif->vfp_used (word bitset of VFP regs used for passing
+-+   arguments). These are only used for the VFP hard-float ABI.
+-+*/
+-+int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space)
+- {
+--  register unsigned int i;
+-+  register unsigned int i, vi = 0;
+-   register void **p_argv;
+-   register char *argp;
+-   register ffi_type **p_arg;
+- 
+-   argp = stack;
+- 
+-   if ( ecif->cif->flags == FFI_TYPE_STRUCT ) {
+-     *(void **) argp = ecif->rvalue;
+-@@ -49,16 +57,31 @@ void ffi_prep_args(char *stack, extended
+-   p_argv = ecif->avalue;
+- 
+-   for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
+-        (i != 0);
+-        i--, p_arg++)
+-     {
+-       size_t z;
+- 
+-+      /* Allocated in VFP registers. */
+-+      if (ecif->cif->abi == FFI_VFP
+-+	  && vi < ecif->cif->vfp_nargs && vfp_type_p (*p_arg))
+-+	{
+-+	  float* vfp_slot = vfp_space + ecif->cif->vfp_args[vi++];
+-+	  if ((*p_arg)->type == FFI_TYPE_FLOAT)
+-+	    *((float*)vfp_slot) = *((float*)*p_argv);
+-+	  else if ((*p_arg)->type == FFI_TYPE_DOUBLE)
+-+	    *((double*)vfp_slot) = *((double*)*p_argv);
+-+	  else
+-+	    memcpy(vfp_slot, *p_argv, (*p_arg)->size);
+-+	  p_argv++;
+-+	  continue;
+-+	}
+-+
+-       /* Align if necessary */
+-       if (((*p_arg)->alignment - 1) & (unsigned) argp) {
+- 	argp = (char *) ALIGN(argp, (*p_arg)->alignment);
+-       }
+- 
+-       if ((*p_arg)->type == FFI_TYPE_STRUCT)
+- 	argp = (char *) ALIGN(argp, 4);
+- 
+-@@ -98,23 +121,25 @@ void ffi_prep_args(char *stack, extended
+- 	    }
+- 	  else
+- 	    {
+- 	      memcpy(argp, *p_argv, z);
+- 	    }
+- 	  p_argv++;
+- 	  argp += z;
+-     }
+--  
+--  return;
+-+
+-+  /* Indicate the VFP registers used. */
+-+  return ecif->cif->vfp_used;
+- }
+- 
+- /* Perform machine dependent cif processing */
+- ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
+- {
+-+  int type_code;
+-   /* Round the stack up to a multiple of 8 bytes.  This isn't needed 
+-      everywhere, but it is on some platforms, and it doesn't harm anything
+-      when it isn't needed.  */
+-   cif->bytes = (cif->bytes + 7) & ~7;
+- 
+-   /* Set the return type flag */
+-   switch (cif->rtype->type)
+-     {
+-@@ -125,137 +150,176 @@ ffi_status ffi_prep_cif_machdep(ffi_cif 
+-       break;
+- 
+-     case FFI_TYPE_SINT64:
+-     case FFI_TYPE_UINT64:
+-       cif->flags = (unsigned) FFI_TYPE_SINT64;
+-       break;
+- 
+-     case FFI_TYPE_STRUCT:
+--      if (cif->rtype->size <= 4)
+-+      if (cif->abi == FFI_VFP
+-+	  && (type_code = vfp_type_p (cif->rtype)) != 0)
+-+	{
+-+	  /* A Composite Type passed in VFP registers, either
+-+	     FFI_TYPE_STRUCT_VFP_FLOAT or FFI_TYPE_STRUCT_VFP_DOUBLE. */
+-+	  cif->flags = (unsigned) type_code;
+-+	}
+-+      else if (cif->rtype->size <= 4)
+- 	/* A Composite Type not larger than 4 bytes is returned in r0.  */
+- 	cif->flags = (unsigned)FFI_TYPE_INT;
+-       else
+- 	/* A Composite Type larger than 4 bytes, or whose size cannot
+- 	   be determined statically ... is stored in memory at an
+- 	   address passed [in r0].  */
+- 	cif->flags = (unsigned)FFI_TYPE_STRUCT;
+-       break;
+- 
+-     default:
+-       cif->flags = FFI_TYPE_INT;
+-       break;
+-     }
+- 
+-+  /* Map out the register placements of VFP register args.
+-+     The VFP hard-float calling conventions are slightly more sophisticated than
+-+     the base calling conventions, so we do it here instead of in ffi_prep_args(). */
+-+  if (cif->abi == FFI_VFP)
+-+    layout_vfp_args (cif);
+-+
+-   return FFI_OK;
+- }
+- 
+--extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
+--			  unsigned, unsigned, unsigned *, void (*fn)(void));
+-+/* Prototypes for assembly functions, in sysv.S */
+-+extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *);
+-+extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *);
+- 
+- void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+- {
+-   extended_cif ecif;
+- 
+-   int small_struct = (cif->flags == FFI_TYPE_INT 
+- 		      && cif->rtype->type == FFI_TYPE_STRUCT);
+-+  int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT
+-+		    || cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE);
+- 
+-   ecif.cif = cif;
+-   ecif.avalue = avalue;
+- 
+-   unsigned int temp;
+-   
+-   /* If the return value is a struct and we don't have a return	*/
+-   /* value address then we need to make one		        */
+- 
+-   if ((rvalue == NULL) && 
+-       (cif->flags == FFI_TYPE_STRUCT))
+-     {
+-       ecif.rvalue = alloca(cif->rtype->size);
+-     }
+-   else if (small_struct)
+-     ecif.rvalue = &temp;
+-+  else if (vfp_struct)
+-+    {
+-+      /* Largest case is double x 4. */
+-+      ecif.rvalue = alloca(32);
+-+    }
+-   else
+-     ecif.rvalue = rvalue;
+- 
+-   switch (cif->abi) 
+-     {
+-     case FFI_SYSV:
+--      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue,
+--		    fn);
+-+      ffi_call_SYSV (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue);
+-+      break;
+- 
+-+    case FFI_VFP:
+-+      ffi_call_VFP (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue);
+-       break;
+-+
+-     default:
+-       FFI_ASSERT(0);
+-       break;
+-     }
+-   if (small_struct)
+-     memcpy (rvalue, &temp, cif->rtype->size);
+-+  else if (vfp_struct)
+-+    memcpy (rvalue, ecif.rvalue, cif->rtype->size);
+- }
+- 
+- /** private members **/
+- 
+- static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
+--					 void** args, ffi_cif* cif);
+-+					 void** args, ffi_cif* cif, float *vfp_stack);
+- 
+- void ffi_closure_SYSV (ffi_closure *);
+- 
+-+void ffi_closure_VFP (ffi_closure *);
+-+
+- /* This function is jumped to by the trampoline */
+- 
+- unsigned int
+--ffi_closure_SYSV_inner (closure, respp, args)
+-+ffi_closure_SYSV_inner (closure, respp, args, vfp_args)
+-      ffi_closure *closure;
+-      void **respp;
+-      void *args;
+-+     void *vfp_args;
+- {
+-   // our various things...
+-   ffi_cif       *cif;
+-   void         **arg_area;
+- 
+-   cif         = closure->cif;
+-   arg_area    = (void**) alloca (cif->nargs * sizeof (void*));  
+- 
+-   /* this call will initialize ARG_AREA, such that each
+-    * element in that array points to the corresponding 
+-    * value on the stack; and if the function returns
+-    * a structure, it will re-set RESP to point to the
+-    * structure return address.  */
+- 
+--  ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif);
+-+  ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args);
+- 
+-   (closure->fun) (cif, *respp, arg_area, closure->user_data);
+- 
+-   return cif->flags;
+- }
+- 
+- /*@-exportheader@*/
+- static void 
+- ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
+--			    void **avalue, ffi_cif *cif)
+-+			    void **avalue, ffi_cif *cif,
+-+			    /* Used only under VFP hard-float ABI. */
+-+			    float *vfp_stack)
+- /*@=exportheader@*/
+- {
+--  register unsigned int i;
+-+  register unsigned int i, vi = 0;
+-   register void **p_argv;
+-   register char *argp;
+-   register ffi_type **p_arg;
+- 
+-   argp = stack;
+- 
+-   if ( cif->flags == FFI_TYPE_STRUCT ) {
+-     *rvalue = *(void **) argp;
+-     argp += 4;
+-   }
+- 
+-   p_argv = avalue;
+- 
+-   for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++)
+-     {
+-       size_t z;
+-+      size_t alignment;
+-+  
+-+      if (cif->abi == FFI_VFP
+-+	  && vi < cif->vfp_nargs && vfp_type_p (*p_arg))
+-+	{
+-+	  *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]);
+-+	  continue;
+-+	}
+- 
+--      size_t alignment = (*p_arg)->alignment;
+-+      alignment = (*p_arg)->alignment;
+-       if (alignment < 4)
+- 	alignment = 4;
+-       /* Align if necessary */
+-       if ((alignment - 1) & (unsigned) argp) {
+- 	argp = (char *) ALIGN(argp, alignment);
+-       }
+- 
+-       z = (*p_arg)->size;
+-@@ -290,20 +354,147 @@ ffi_prep_incoming_args_SYSV(char *stack,
+- 
+- ffi_status
+- ffi_prep_closure_loc (ffi_closure* closure,
+- 		      ffi_cif* cif,
+- 		      void (*fun)(ffi_cif*,void*,void**,void*),
+- 		      void *user_data,
+- 		      void *codeloc)
+- {
+--  FFI_ASSERT (cif->abi == FFI_SYSV);
+-+  void (*closure_func)(ffi_closure*) = NULL;
+- 
+-+  if (cif->abi == FFI_SYSV)
+-+    closure_func = &ffi_closure_SYSV;
+-+  else if (cif->abi == FFI_VFP)
+-+    closure_func = &ffi_closure_VFP;
+-+  else
+-+    FFI_ASSERT (0);
+-+    
+-   FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
+--		       &ffi_closure_SYSV,  \
+-+		       closure_func,  \
+- 		       codeloc);
+-     
+-   closure->cif  = cif;
+-   closure->user_data = user_data;
+-   closure->fun  = fun;
+- 
+-   return FFI_OK;
+- }
+-+
+-+/* Below are routines for VFP hard-float support. */
+-+
+-+static int rec_vfp_type_p (ffi_type *t, int *elt, int *elnum)
+-+{
+-+  switch (t->type)
+-+    {
+-+    case FFI_TYPE_FLOAT:
+-+    case FFI_TYPE_DOUBLE:
+-+      *elt = (int) t->type;
+-+      *elnum = 1;
+-+      return 1;
+-+
+-+    case FFI_TYPE_STRUCT_VFP_FLOAT:
+-+      *elt = FFI_TYPE_FLOAT;
+-+      *elnum = t->size / sizeof (float);
+-+      return 1;
+-+
+-+    case FFI_TYPE_STRUCT_VFP_DOUBLE:
+-+      *elt = FFI_TYPE_DOUBLE;
+-+      *elnum = t->size / sizeof (double);
+-+      return 1;
+-+
+-+    case FFI_TYPE_STRUCT:;
+-+      {
+-+	int base_elt = 0, total_elnum = 0;
+-+	ffi_type **el = t->elements;
+-+	while (*el)
+-+	  {
+-+	    int el_elt = 0, el_elnum = 0;
+-+	    if (! rec_vfp_type_p (*el, &el_elt, &el_elnum)
+-+		|| (base_elt && base_elt != el_elt)
+-+		|| total_elnum + el_elnum > 4)
+-+	      return 0;
+-+	    base_elt = el_elt;
+-+	    total_elnum += el_elnum;
+-+	    el++;
+-+	  }
+-+	*elnum = total_elnum;
+-+	*elt = base_elt;
+-+	return 1;
+-+      }
+-+    default: ;
+-+    }
+-+  return 0;
+-+}
+-+
+-+static int vfp_type_p (ffi_type *t)
+-+{
+-+  int elt, elnum;
+-+  if (rec_vfp_type_p (t, &elt, &elnum))
+-+    {
+-+      if (t->type == FFI_TYPE_STRUCT)
+-+	{
+-+	  if (elnum == 1)
+-+	    t->type = elt;
+-+	  else
+-+	    t->type = (elt == FFI_TYPE_FLOAT
+-+		       ? FFI_TYPE_STRUCT_VFP_FLOAT
+-+		       : FFI_TYPE_STRUCT_VFP_DOUBLE);
+-+	}
+-+      return (int) t->type;
+-+    }
+-+  return 0;
+-+}
+-+
+-+static void place_vfp_arg (ffi_cif *cif, ffi_type *t)
+-+{
+-+  int reg = cif->vfp_reg_free;
+-+  int nregs = t->size / sizeof (float);
+-+  int align = ((t->type == FFI_TYPE_STRUCT_VFP_FLOAT
+-+		|| t->type == FFI_TYPE_FLOAT) ? 1 : 2);
+-+  /* Align register number. */
+-+  if ((reg & 1) && align == 2)
+-+    reg++;
+-+  while (reg + nregs <= 16)
+-+    {
+-+      int s, new_used = 0;
+-+      for (s = reg; s < reg + nregs; s++)
+-+	{
+-+	  new_used |= (1 << s);
+-+	  if (cif->vfp_used & (1 << s))
+-+	    {
+-+	      reg += align;
+-+	      goto next_reg;
+-+	    }
+-+	}
+-+      /* Found regs to allocate. */
+-+      cif->vfp_used |= new_used;
+-+      cif->vfp_args[cif->vfp_nargs++] = reg;
+-+
+-+      /* Update vfp_reg_free. */
+-+      if (cif->vfp_used & (1 << cif->vfp_reg_free))
+-+	{
+-+	  reg += nregs;
+-+	  while (cif->vfp_used & (1 << reg))
+-+	    reg += 1;
+-+	  cif->vfp_reg_free = reg;
+-+	}
+-+      return;
+-+    next_reg: ;
+-+    }
+-+}
+-+
+-+static void layout_vfp_args (ffi_cif *cif)
+-+{
+-+  int i;
+-+  /* Init VFP fields */
+-+  cif->vfp_used = 0;
+-+  cif->vfp_nargs = 0;
+-+  cif->vfp_reg_free = 0;
+-+  memset (cif->vfp_args, -1, 16); /* Init to -1. */
+-+
+-+  for (i = 0; i < cif->nargs; i++)
+-+    {
+-+      ffi_type *t = cif->arg_types[i];
+-+      if (vfp_type_p (t))
+-+	place_vfp_arg (cif, t);
+-+    }
+-+}
+-diff --git a/js/src/ctypes/libffi/src/arm/ffitarget.h b/js/src/ctypes/libffi/src/arm/ffitarget.h
+---- a/js/src/ctypes/libffi/src/arm/ffitarget.h
+-+++ b/js/src/ctypes/libffi/src/arm/ffitarget.h
+-@@ -29,21 +29,35 @@
+- 
+- #ifndef LIBFFI_ASM
+- typedef unsigned long          ffi_arg;
+- typedef signed long            ffi_sarg;
+- 
+- typedef enum ffi_abi {
+-   FFI_FIRST_ABI = 0,
+-   FFI_SYSV,
+-+  FFI_VFP,
+-   FFI_LAST_ABI,
+-+#ifdef __ARM_PCS_VFP
+-+  FFI_DEFAULT_ABI = FFI_VFP
+-+#else
+-   FFI_DEFAULT_ABI = FFI_SYSV
+-+#endif
+- } ffi_abi;
+- #endif
+- 
+-+#define FFI_EXTRA_CIF_FIELDS			\
+-+  int vfp_used;					\
+-+  short vfp_reg_free, vfp_nargs;		\
+-+  signed char vfp_args[16]			\
+-+
+-+/* Internally used. */
+-+#define FFI_TYPE_STRUCT_VFP_FLOAT  (FFI_TYPE_LAST + 1)
+-+#define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2)
+-+
+- /* ---- Definitions for closures ----------------------------------------- */
+- 
+- #define FFI_CLOSURES 1
+- #define FFI_TRAMPOLINE_SIZE 20
+- #define FFI_NATIVE_RAW_API 0
+- 
+- #endif
+- 
+-diff --git a/js/src/ctypes/libffi/src/arm/sysv.S b/js/src/ctypes/libffi/src/arm/sysv.S
+---- a/js/src/ctypes/libffi/src/arm/sysv.S
+-+++ b/js/src/ctypes/libffi/src/arm/sysv.S
+-@@ -137,54 +137,52 @@
+- 	ldr\cond	pc, [sp], #4
+- 	.else
+- 	ldm\cond\dirn	sp!, {\regs, pc}
+- 	.endif
+- #endif
+- .endm
+- 
+- 
+--	@ r0:   ffi_prep_args
+-+	@ r0:   fn
+- 	@ r1:   &ecif
+- 	@ r2:   cif->bytes
+- 	@ r3:   fig->flags
+- 	@ sp+0: ecif.rvalue
+--	@ sp+4: fn
+- 
+- 	@ This assumes we are using gas.
+- ARM_FUNC_START ffi_call_SYSV
+- 	@ Save registers
+-         stmfd	sp!, {r0-r3, fp, lr}
+- 	UNWIND .save	{r0-r3, fp, lr}
+- 	mov	fp, sp
+- 
+- 	UNWIND .setfp	fp, sp
+- 
+- 	@ Make room for all of the new args.
+- 	sub	sp, fp, r2
+- 
+- 	@ Place all of the ffi_prep_args in position
+--	mov	ip, r0
+- 	mov	r0, sp
+- 	@     r1 already set
+- 
+- 	@ Call ffi_prep_args(stack, &ecif)
+--	call_reg(ip)
+-+	bl	ffi_prep_args
+- 
+- 	@ move first 4 parameters in registers
+- 	ldmia	sp, {r0-r3}
+- 
+- 	@ and adjust stack
+--	ldr	ip, [fp, #8]
+--        cmp	ip, #16
+--	movhs	ip, #16
+--        add	sp, sp, ip
+-+	sub	lr, fp, sp	@ cif->bytes == fp - sp
+-+	ldr	ip, [fp]	@ load fn() in advance
+-+	cmp	lr, #16
+-+	movhs	lr, #16
+-+	add	sp, sp, lr
+- 
+- 	@ call (fn) (...)
+--	ldr	ip, [fp, #28]
+- 	call_reg(ip)
+- 	
+- 	@ Remove the space we pushed for the args
+- 	mov	sp, fp
+- 
+- 	@ Load r2 with the pointer to storage for the return value
+- 	ldr	r2, [sp, #24]
+- 
+-@@ -225,16 +223,111 @@ ARM_FUNC_START ffi_call_SYSV
+- 
+- LSYM(Lepilogue):
+- 	RETLDM	"r0-r3,fp"
+- 
+- .ffi_call_SYSV_end:
+- 	UNWIND .fnend
+-         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
+- 
+-+
+-+	@ r0:   fn
+-+	@ r1:   &ecif
+-+	@ r2:   cif->bytes
+-+	@ r3:   fig->flags
+-+	@ sp+0: ecif.rvalue
+-+
+-+ARM_FUNC_START ffi_call_VFP
+-+	@ Save registers
+-+        stmfd	sp!, {r0-r3, fp, lr}
+-+	UNWIND .save	{r0-r3, fp, lr}
+-+	mov	fp, sp
+-+	UNWIND .setfp	fp, sp
+-+
+-+	@ Make room for all of the new args.
+-+	sub	sp, sp, r2
+-+
+-+	@ Make room for loading VFP args
+-+	sub	sp, sp, #64
+-+
+-+	@ Place all of the ffi_prep_args in position
+-+	mov	r0, sp
+-+	@     r1 already set
+-+	sub	r2, fp, #64   @ VFP scratch space
+-+
+-+	@ Call ffi_prep_args(stack, &ecif, vfp_space)
+-+	bl	ffi_prep_args
+-+
+-+	@ Load VFP register args if needed
+-+	cmp	r0, #0
+-+	beq	LSYM(Lbase_args)
+-+
+-+	@ Load only d0 if possible
+-+	cmp	r0, #3
+-+	sub	ip, fp, #64
+-+	flddle	d0, [ip]
+-+	fldmiadgt	ip, {d0-d7}
+-+
+-+LSYM(Lbase_args):
+-+	@ move first 4 parameters in registers
+-+	ldmia	sp, {r0-r3}
+-+
+-+	@ and adjust stack
+-+	sub	lr, ip, sp	@ cif->bytes == (fp - 64) - sp
+-+	ldr	ip, [fp]	@ load fn() in advance
+-+        cmp	lr, #16
+-+	movhs	lr, #16
+-+        add	sp, sp, lr
+-+
+-+	@ call (fn) (...)
+-+	call_reg(ip)
+-+
+-+	@ Remove the space we pushed for the args
+-+	mov	sp, fp
+-+
+-+	@ Load r2 with the pointer to storage for
+-+	@ the return value
+-+	ldr	r2, [sp, #24]
+-+
+-+	@ Load r3 with the return type code 
+-+	ldr	r3, [sp, #12]
+-+
+-+	@ If the return value pointer is NULL,
+-+	@ assume no return value.
+-+	cmp	r2, #0
+-+	beq	LSYM(Lepilogue_vfp)
+-+	
+-+	cmp	r3, #FFI_TYPE_INT
+-+	streq	r0, [r2]
+-+	beq	LSYM(Lepilogue_vfp)
+-+
+-+	cmp	r3, #FFI_TYPE_SINT64
+-+	stmeqia	r2, {r0, r1}
+-+	beq	LSYM(Lepilogue_vfp)
+-+
+-+	cmp	r3, #FFI_TYPE_FLOAT
+-+	fstseq	s0, [r2]
+-+	beq	LSYM(Lepilogue_vfp)
+-+	
+-+	cmp	r3, #FFI_TYPE_DOUBLE
+-+	fstdeq	d0, [r2]
+-+	beq	LSYM(Lepilogue_vfp)
+-+
+-+	cmp	r3, #FFI_TYPE_STRUCT_VFP_FLOAT
+-+	cmpne	r3, #FFI_TYPE_STRUCT_VFP_DOUBLE
+-+	fstmiadeq	r2, {d0-d3}
+-+
+-+LSYM(Lepilogue_vfp):
+-+	RETLDM	"r0-r3,fp"
+-+
+-+.ffi_call_VFP_end:
+-+	UNWIND .fnend
+-+        .size    CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
+-+	
+-+	
+- /*
+- 	unsigned int FFI_HIDDEN
+- 	ffi_closure_SYSV_inner (closure, respp, args)
+- 	     ffi_closure *closure;
+- 	     void **respp;
+-   	     void *args;
+- */
+- 
+-@@ -297,11 +390,73 @@ ARM_FUNC_START ffi_closure_SYSV
+- 	ldfd	f0, [sp]
+- 	b	.Lclosure_epilogue
+- #endif
+- 
+- .ffi_closure_SYSV_end:
+- 	UNWIND .fnend
+-         .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
+- 
+-+
+-+ARM_FUNC_START ffi_closure_VFP
+-+	fstmfdd	sp!, {d0-d7}
+-+	@ r0-r3, then d0-d7
+-+	UNWIND .pad #80
+-+	add	ip, sp, #80
+-+	stmfd	sp!, {ip, lr}
+-+	UNWIND .save	{r0, lr}
+-+	add	r2, sp, #72
+-+	add	r3, sp, #8
+-+	.pad #72
+-+	sub	sp, sp, #72
+-+	str	sp, [sp, #64]
+-+	add	r1, sp, #64
+-+	bl	ffi_closure_SYSV_inner
+-+
+-+	cmp	r0, #FFI_TYPE_INT
+-+	beq	.Lretint_vfp
+-+
+-+	cmp	r0, #FFI_TYPE_FLOAT
+-+	beq	.Lretfloat_vfp
+-+
+-+	cmp	r0, #FFI_TYPE_DOUBLE
+-+	cmpne	r0, #FFI_TYPE_LONGDOUBLE
+-+	beq	.Lretdouble_vfp
+-+
+-+	cmp	r0, #FFI_TYPE_SINT64
+-+	beq	.Lretlonglong_vfp
+-+
+-+	cmp	r0, #FFI_TYPE_STRUCT_VFP_FLOAT
+-+	beq	.Lretfloat_struct_vfp
+-+
+-+	cmp	r0, #FFI_TYPE_STRUCT_VFP_DOUBLE
+-+	beq	.Lretdouble_struct_vfp
+-+	
+-+.Lclosure_epilogue_vfp:
+-+	add	sp, sp, #72
+-+	ldmfd	sp, {sp, pc}
+-+
+-+.Lretfloat_vfp:
+-+	flds	s0, [sp]
+-+	b	.Lclosure_epilogue_vfp
+-+.Lretdouble_vfp:
+-+	fldd	d0, [sp]
+-+	b	.Lclosure_epilogue_vfp
+-+.Lretint_vfp:
+-+	ldr	r0, [sp]
+-+	b	.Lclosure_epilogue_vfp
+-+.Lretlonglong_vfp:
+-+	ldmia	sp, {r0, r1}
+-+	b	.Lclosure_epilogue_vfp
+-+.Lretfloat_struct_vfp:
+-+	fldmiad	sp, {d0-d1}
+-+	b	.Lclosure_epilogue_vfp
+-+.Lretdouble_struct_vfp:
+-+	fldmiad	sp, {d0-d3}
+-+	b	.Lclosure_epilogue_vfp
+-+
+-+.ffi_closure_VFP_end:
+-+	UNWIND .fnend
+-+        .size    CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP)
+-+
+- #if defined __ELF__ && defined __linux__
+- 	.section	.note.GNU-stack,"",%progbits
+- #endif
+-diff --git a/js/src/ctypes/libffi/src/x86/ffi64.c b/js/src/ctypes/libffi/src/x86/ffi64.c
+---- a/js/src/ctypes/libffi/src/x86/ffi64.c
+-+++ b/js/src/ctypes/libffi/src/x86/ffi64.c
+-@@ -373,29 +373,29 @@ ffi_prep_cif_machdep (ffi_cif *cif)
+- 	  || gprcount + ngpr > MAX_GPR_REGS
+- 	  || ssecount + nsse > MAX_SSE_REGS)
+- 	{
+- 	  long align = cif->arg_types[i]->alignment;
+- 
+- 	  if (align < 8)
+- 	    align = 8;
+- 
+--	  bytes = ALIGN(bytes, align);
+-+	  bytes = ALIGN (bytes, align);
+- 	  bytes += cif->arg_types[i]->size;
+- 	}
+-       else
+- 	{
+- 	  gprcount += ngpr;
+- 	  ssecount += nsse;
+- 	}
+-     }
+-   if (ssecount)
+-     flags |= 1 << 11;
+-   cif->flags = flags;
+--  cif->bytes = bytes;
+-+  cif->bytes = ALIGN (bytes, 8);
+- 
+-   return FFI_OK;
+- }
+- 
+- void
+- ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+- {
+-   enum x86_64_reg_class classes[MAX_CLASSES];
+-diff --git a/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp b/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp
+---- a/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp
+-+++ b/js/src/ctypes/libffi/testsuite/lib/libffi-dg.exp
+-@@ -261,16 +261,66 @@ proc dg-xfail-if { args } {
+-     set args [lreplace $args 0 0]
+-     set selector "target [join [lindex $args 1]]"
+-     if { [dg-process-target $selector] == "S" } {
+- 	global compiler_conditional_xfail_data
+- 	set compiler_conditional_xfail_data $args
+-     }
+- }
+- 
+-+proc check-flags { args } {
+-+
+-+    # The args are within another list; pull them out.
+-+    set args [lindex $args 0]
+-+
+-+    # The next two arguments are optional.  If they were not specified,
+-+    # use the defaults.
+-+    if { [llength $args] == 2 } {
+-+	lappend $args [list "*"]
+-+    }
+-+    if { [llength $args] == 3 } {
+-+	lappend $args [list ""]
+-+    }
+-+
+-+    # If the option strings are the defaults, or the same as the
+-+    # defaults, there is no need to call check_conditional_xfail to
+-+    # compare them to the actual options.
+-+    if { [string compare [lindex $args 2] "*"] == 0
+-+	 && [string compare [lindex $args 3] "" ] == 0 } {
+-+	set result 1    
+-+    } else {
+-+	# The target list might be an effective-target keyword, so replace
+-+	# the original list with "*-*-*", since we already know it matches.
+-+	set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]]
+-+    }
+-+
+-+    return $result
+-+}
+-+
+-+proc dg-skip-if { args } {
+-+    # Verify the number of arguments.  The last two are optional.
+-+    set args [lreplace $args 0 0]
+-+    if { [llength $args] < 2 || [llength $args] > 4 } {
+-+        error "dg-skip-if 2: need 2, 3, or 4 arguments"
+-+    }
+-+
+-+    # Don't bother if we're already skipping the test.
+-+    upvar dg-do-what dg-do-what
+-+    if { [lindex ${dg-do-what} 1] == "N" } {
+-+      return
+-+    }
+-+
+-+    set selector [list target [lindex $args 1]]
+-+    if { [dg-process-target $selector] == "S" } {
+-+        if [check-flags $args] {
+-+            upvar dg-do-what dg-do-what
+-+            set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+-+        }
+-+    }
+-+}
+- 
+- # We need to make sure that additional_files and additional_sources
+- # are both cleared out after every test.  It is not enough to clear
+- # them out *before* the next test run because gcc-target-compile gets
+- # run directly from some .exp files (outside of any test).  (Those
+- # uses should eventually be eliminated.)
+- 
+- # Because the DG framework doesn't provide a hook that is run at the
+-diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c
+---- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c
+-+++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_double_va.c
+-@@ -1,16 +1,18 @@
+- /* Area:		ffi_call, closure_call
+-    Purpose:		Test doubles passed in variable argument lists.
+-    Limitations:	none.
+-    PR:			none.
+-    Originator:	Blake Chaffin 6/6/2007	 */
+- 
+- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
+- /* { dg-output "" { xfail avr32*-*-* } } */
+-+/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */
+-+
+- #include "ffitest.h"
+- 
+- static void
+- cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp, 
+- 		 void** args, void* userdata __UNUSED__)
+- {
+- 	char*	format		= *(char**)args[0];
+- 	double	doubleValue	= *(double*)args[1];
+-diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c b/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c
+---- a/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c
+-+++ b/js/src/ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c
+-@@ -1,16 +1,18 @@
+- /* Area:		ffi_call, closure_call
+-    Purpose:		Test long doubles passed in variable argument lists.
+-    Limitations:	none.
+-    PR:			none.
+-    Originator:	Blake Chaffin 6/6/2007	 */
+- 
+- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
+- /* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */
+-+/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */
+-+
+- #include "ffitest.h"
+- 
+- static void
+- cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, 
+- 		     void** args, void* userdata __UNUSED__)
+- {
+- 	char*		format	= *(char**)args[0];
+- 	long double	ldValue	= *(long double*)args[1];
+diff --git a/js/src/ctypes/patches-libffi/01-bug-670719.patch b/js/src/ctypes/patches-libffi/01-bug-670719.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/01-bug-670719.patch
++++ /dev/null
+@@ -1,50 +0,0 @@
+-# HG changeset patch
+-# Parent e357f3f732a0f3e98f8bd4661de03c9042c5c330
+-# User Landry Breuil <landry@openbsd.org>
+-treat powerpc-*-openbsd* as powerpc-*-freebsd*
+-
+-
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -11272,17 +11272,17 @@ case "$host" in
+- 	TARGET=POWERPC; TARGETDIR=powerpc
+- 	;;
+-   powerpc-*-darwin*)
+- 	TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
+- 	;;
+-   powerpc-*-aix* | rs6000-*-aix*)
+- 	TARGET=POWERPC_AIX; TARGETDIR=powerpc
+- 	;;
+--  powerpc-*-freebsd*)
+-+  powerpc-*-freebsd* | powerpc-*-openbsd*)
+- 	TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+- 	;;
+-   powerpc*-*-rtems*)
+- 	TARGET=POWERPC; TARGETDIR=powerpc
+- 	;;
+- 
+-   s390-*-* | s390x-*-*)
+- 	TARGET=S390; TARGETDIR=s390
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -135,17 +135,17 @@ case "$host" in
+- 	TARGET=POWERPC; TARGETDIR=powerpc
+- 	;;
+-   powerpc-*-darwin*)
+- 	TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
+- 	;;
+-   powerpc-*-aix* | rs6000-*-aix*)
+- 	TARGET=POWERPC_AIX; TARGETDIR=powerpc
+- 	;;
+--  powerpc-*-freebsd*)
+-+  powerpc-*-freebsd* | powerpc-*-openbsd*)
+- 	TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+- 	;;
+-   powerpc*-*-rtems*)
+- 	TARGET=POWERPC; TARGETDIR=powerpc
+- 	;;
+- 
+-   s390-*-* | s390x-*-*)
+- 	TARGET=S390; TARGETDIR=s390
+diff --git a/js/src/ctypes/patches-libffi/02-bug-682180.patch b/js/src/ctypes/patches-libffi/02-bug-682180.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/02-bug-682180.patch
++++ /dev/null
+@@ -1,48 +0,0 @@
+-# HG changeset patch
+-# Parent 5e5eb679345b4d13b8e9ee40e253a97fd665dad3
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -12357,17 +12357,18 @@ fi
+-     if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
+- 
+- $as_echo "#define HAVE_AS_STRING_PSEUDO_OP 1" >>confdefs.h
+- 
+-     fi
+- fi
+- 
+- case "$target" in
+--     *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+-+     # Darwin 10 (OSX 10.6) and beyond allocate non-executable pages
+-+     *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+- 
+- $as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h
+- 
+-      ;;
+- esac
+- 
+- if test x$TARGET = xX86_64; then
+-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports unwind section type" >&5
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -311,17 +311,18 @@ if test x$TARGET = xX86 || test x$TARGET
+-     ])
+-     if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
+-        AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1,
+- 	       [Define if your assembler supports .string.])
+-     fi
+- fi
+- 
+- case "$target" in
+--     *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+-+     # Darwin 10 (OSX 10.6) and beyond allocate non-executable pages
+-+     *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+-        AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
+-                  [Cannot use malloc on this target, so, we revert to
+-                    alternative means])
+-      ;;
+- esac
+- 
+- if test x$TARGET = xX86_64; then
+-     AC_CACHE_CHECK([assembler supports unwind section type],
+diff --git a/js/src/ctypes/patches-libffi/03-bug-712594.patch b/js/src/ctypes/patches-libffi/03-bug-712594.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/03-bug-712594.patch
++++ /dev/null
+@@ -1,1210 +0,0 @@
+-commit 5b9cd52784339a42e417174a55e310e214d435f9
+-Author: Anthony Green <green@moxielogic.com>
+-Date:   Mon Nov 22 15:19:57 2010 -0500
+-
+-    win64-underscore patch
+-
+-diff --git a/js/src/ctypes/libffi/aclocal.m4 b/js/src/ctypes/libffi/aclocal.m4
+---- a/js/src/ctypes/libffi/aclocal.m4
+-+++ b/js/src/ctypes/libffi/aclocal.m4
+-@@ -7359,16 +7359,821 @@ func_append ()
+-   eval "$[1]=\$$[1]\$[2]"
+- }
+- 
+- _LT_EOF
+-     ;;
+-   esac
+- ])
+- 
+-+# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*-
+-+#
+-+#   Copyright (C) 1999-2006, 2007, 2008 Free Software Foundation, Inc.
+-+#   Written by Thomas Tanner, 1999
+-+#
+-+# This file is free software; the Free Software Foundation gives
+-+# unlimited permission to copy and/or distribute it, with or without
+-+# modifications, as long as this notice is preserved.
+-+
+-+# serial 17 LTDL_INIT
+-+
+-+# LT_CONFIG_LTDL_DIR(DIRECTORY, [LTDL-MODE])
+-+# ------------------------------------------
+-+# DIRECTORY contains the libltdl sources.  It is okay to call this
+-+# function multiple times, as long as the same DIRECTORY is always given.
+-+AC_DEFUN([LT_CONFIG_LTDL_DIR],
+-+[AC_BEFORE([$0], [LTDL_INIT])
+-+_$0($*)
+-+])# LT_CONFIG_LTDL_DIR
+-+
+-+# We break this out into a separate macro, so that we can call it safely
+-+# internally without being caught accidentally by the sed scan in libtoolize.
+-+m4_defun([_LT_CONFIG_LTDL_DIR],
+-+[dnl remove trailing slashes
+-+m4_pushdef([_ARG_DIR], m4_bpatsubst([$1], [/*$]))
+-+m4_case(_LTDL_DIR,
+-+	[], [dnl only set lt_ltdl_dir if _ARG_DIR is not simply `.'
+-+	     m4_if(_ARG_DIR, [.],
+-+	             [],
+-+		 [m4_define([_LTDL_DIR], _ARG_DIR)
+-+	          _LT_SHELL_INIT([lt_ltdl_dir=']_ARG_DIR['])])],
+-+    [m4_if(_ARG_DIR, _LTDL_DIR,
+-+	    [],
+-+	[m4_fatal([multiple libltdl directories: `]_LTDL_DIR[', `]_ARG_DIR['])])])
+-+m4_popdef([_ARG_DIR])
+-+])# _LT_CONFIG_LTDL_DIR
+-+
+-+# Initialise:
+-+m4_define([_LTDL_DIR], [])
+-+
+-+
+-+# _LT_BUILD_PREFIX
+-+# ----------------
+-+# If Autoconf is new enough, expand to `${top_build_prefix}', otherwise
+-+# to `${top_builddir}/'.
+-+m4_define([_LT_BUILD_PREFIX],
+-+[m4_ifdef([AC_AUTOCONF_VERSION],
+-+   [m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.62]),
+-+	  [-1], [m4_ifdef([_AC_HAVE_TOP_BUILD_PREFIX],
+-+			  [${top_build_prefix}],
+-+			  [${top_builddir}/])],
+-+	  [${top_build_prefix}])],
+-+   [${top_builddir}/])[]dnl
+-+])
+-+
+-+
+-+# LTDL_CONVENIENCE
+-+# ----------------
+-+# sets LIBLTDL to the link flags for the libltdl convenience library and
+-+# LTDLINCL to the include flags for the libltdl header and adds
+-+# --enable-ltdl-convenience to the configure arguments.  Note that
+-+# AC_CONFIG_SUBDIRS is not called here.  LIBLTDL will be prefixed with
+-+# '${top_build_prefix}' if available, otherwise with '${top_builddir}/',
+-+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+-+# quotes!).  If your package is not flat and you're not using automake,
+-+# define top_build_prefix, top_builddir, and top_srcdir appropriately
+-+# in your Makefiles.
+-+AC_DEFUN([LTDL_CONVENIENCE],
+-+[AC_BEFORE([$0], [LTDL_INIT])dnl
+-+dnl Although the argument is deprecated and no longer documented,
+-+dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
+-+dnl here make sure it is the same as any other declaration of libltdl's
+-+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+-+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+-+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+-+_$0()
+-+])# LTDL_CONVENIENCE
+-+
+-+# AC_LIBLTDL_CONVENIENCE accepted a directory argument in older libtools,
+-+# now we have LT_CONFIG_LTDL_DIR:
+-+AU_DEFUN([AC_LIBLTDL_CONVENIENCE],
+-+[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+-+_LTDL_CONVENIENCE])
+-+
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [])
+-+
+-+
+-+# _LTDL_CONVENIENCE
+-+# -----------------
+-+# Code shared by LTDL_CONVENIENCE and LTDL_INIT([convenience]).
+-+m4_defun([_LTDL_CONVENIENCE],
+-+[case $enable_ltdl_convenience in
+-+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+-+  "") enable_ltdl_convenience=yes
+-+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+-+esac
+-+LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdlc.la"
+-+LTDLDEPS=$LIBLTDL
+-+LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}"
+-+
+-+AC_SUBST([LIBLTDL])
+-+AC_SUBST([LTDLDEPS])
+-+AC_SUBST([LTDLINCL])
+-+
+-+# For backwards non-gettext consistent compatibility...
+-+INCLTDL="$LTDLINCL"
+-+AC_SUBST([INCLTDL])
+-+])# _LTDL_CONVENIENCE
+-+
+-+
+-+# LTDL_INSTALLABLE
+-+# ----------------
+-+# sets LIBLTDL to the link flags for the libltdl installable library
+-+# and LTDLINCL to the include flags for the libltdl header and adds
+-+# --enable-ltdl-install to the configure arguments.  Note that
+-+# AC_CONFIG_SUBDIRS is not called from here.  If an installed libltdl
+-+# is not found, LIBLTDL will be prefixed with '${top_build_prefix}' if
+-+# available, otherwise with '${top_builddir}/', and LTDLINCL will be
+-+# prefixed with '${top_srcdir}/' (note the single quotes!).  If your
+-+# package is not flat and you're not using automake, define top_build_prefix,
+-+# top_builddir, and top_srcdir appropriately in your Makefiles.
+-+# In the future, this macro may have to be called after LT_INIT.
+-+AC_DEFUN([LTDL_INSTALLABLE],
+-+[AC_BEFORE([$0], [LTDL_INIT])dnl
+-+dnl Although the argument is deprecated and no longer documented,
+-+dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
+-+dnl here make sure it is the same as any other declaration of libltdl's
+-+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+-+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+-+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+-+_$0()
+-+])# LTDL_INSTALLABLE
+-+
+-+# AC_LIBLTDL_INSTALLABLE accepted a directory argument in older libtools,
+-+# now we have LT_CONFIG_LTDL_DIR:
+-+AU_DEFUN([AC_LIBLTDL_INSTALLABLE],
+-+[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+-+_LTDL_INSTALLABLE])
+-+
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [])
+-+
+-+
+-+# _LTDL_INSTALLABLE
+-+# -----------------
+-+# Code shared by LTDL_INSTALLABLE and LTDL_INIT([installable]).
+-+m4_defun([_LTDL_INSTALLABLE],
+-+[if test -f $prefix/lib/libltdl.la; then
+-+  lt_save_LDFLAGS="$LDFLAGS"
+-+  LDFLAGS="-L$prefix/lib $LDFLAGS"
+-+  AC_CHECK_LIB([ltdl], [lt_dlinit], [lt_lib_ltdl=yes])
+-+  LDFLAGS="$lt_save_LDFLAGS"
+-+  if test x"${lt_lib_ltdl-no}" = xyes; then
+-+    if test x"$enable_ltdl_install" != xyes; then
+-+      # Don't overwrite $prefix/lib/libltdl.la without --enable-ltdl-install
+-+      AC_MSG_WARN([not overwriting libltdl at $prefix, force with `--enable-ltdl-install'])
+-+      enable_ltdl_install=no
+-+    fi
+-+  elif test x"$enable_ltdl_install" = xno; then
+-+    AC_MSG_WARN([libltdl not installed, but installation disabled])
+-+  fi
+-+fi
+-+
+-+# If configure.ac declared an installable ltdl, and the user didn't override
+-+# with --disable-ltdl-install, we will install the shipped libltdl.
+-+case $enable_ltdl_install in
+-+  no) ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+-+      LIBLTDL="-lltdl"
+-+      LTDLDEPS=
+-+      LTDLINCL=
+-+      ;;
+-+  *)  enable_ltdl_install=yes
+-+      ac_configure_args="$ac_configure_args --enable-ltdl-install"
+-+      LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdl.la"
+-+      LTDLDEPS=$LIBLTDL
+-+      LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}"
+-+      ;;
+-+esac
+-+
+-+AC_SUBST([LIBLTDL])
+-+AC_SUBST([LTDLDEPS])
+-+AC_SUBST([LTDLINCL])
+-+
+-+# For backwards non-gettext consistent compatibility...
+-+INCLTDL="$LTDLINCL"
+-+AC_SUBST([INCLTDL])
+-+])# LTDL_INSTALLABLE
+-+
+-+
+-+# _LTDL_MODE_DISPATCH
+-+# -------------------
+-+m4_define([_LTDL_MODE_DISPATCH],
+-+[dnl If _LTDL_DIR is `.', then we are configuring libltdl itself:
+-+m4_if(_LTDL_DIR, [],
+-+	[],
+-+    dnl if _LTDL_MODE was not set already, the default value is `subproject':
+-+    [m4_case(m4_default(_LTDL_MODE, [subproject]),
+-+	  [subproject], [AC_CONFIG_SUBDIRS(_LTDL_DIR)
+-+			  _LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])],
+-+	  [nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"; lt_libobj_prefix="$lt_ltdl_dir/"])],
+-+	  [recursive], [],
+-+	[m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])dnl
+-+dnl Be careful not to expand twice:
+-+m4_define([$0], [])
+-+])# _LTDL_MODE_DISPATCH
+-+
+-+
+-+# _LT_LIBOBJ(MODULE_NAME)
+-+# -----------------------
+-+# Like AC_LIBOBJ, except that MODULE_NAME goes into _LT_LIBOBJS instead
+-+# of into LIBOBJS.
+-+AC_DEFUN([_LT_LIBOBJ], [
+-+  m4_pattern_allow([^_LT_LIBOBJS$])
+-+  _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
+-+])# _LT_LIBOBJS
+-+
+-+
+-+# LTDL_INIT([OPTIONS])
+-+# --------------------
+-+# Clients of libltdl can use this macro to allow the installer to
+-+# choose between a shipped copy of the ltdl sources or a preinstalled
+-+# version of the library.  If the shipped ltdl sources are not in a
+-+# subdirectory named libltdl, the directory name must be given by
+-+# LT_CONFIG_LTDL_DIR.
+-+AC_DEFUN([LTDL_INIT],
+-+[dnl Parse OPTIONS
+-+_LT_SET_OPTIONS([$0], [$1])
+-+
+-+dnl We need to keep our own list of libobjs separate from our parent project,
+-+dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
+-+dnl we look for our own LIBOBJs.
+-+m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
+-+m4_pushdef([AC_LIBSOURCES])
+-+
+-+dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
+-+m4_if(_LTDL_MODE, [],
+-+        [m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
+-+        m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])],
+-+                [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])
+-+
+-+AC_ARG_WITH([included_ltdl],
+-+    [AS_HELP_STRING([--with-included-ltdl],
+-+                    [use the GNU ltdl sources included here])])
+-+
+-+if test "x$with_included_ltdl" != xyes; then
+-+  # We are not being forced to use the included libltdl sources, so
+-+  # decide whether there is a useful installed version we can use.
+-+  AC_CHECK_HEADER([ltdl.h],
+-+      [AC_CHECK_DECL([lt_dlinterface_register],
+-+	   [AC_CHECK_LIB([ltdl], [lt_dladvise_preload],
+-+	       [with_included_ltdl=no],
+-+	       [with_included_ltdl=yes])],
+-+	   [with_included_ltdl=yes],
+-+	   [AC_INCLUDES_DEFAULT
+-+	    #include <ltdl.h>])],
+-+      [with_included_ltdl=yes],
+-+      [AC_INCLUDES_DEFAULT]
+-+  )
+-+fi
+-+
+-+dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
+-+dnl was called yet, then for old times' sake, we assume libltdl is in an
+-+dnl eponymous directory:
+-+AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
+-+
+-+AC_ARG_WITH([ltdl_include],
+-+    [AS_HELP_STRING([--with-ltdl-include=DIR],
+-+                    [use the ltdl headers installed in DIR])])
+-+
+-+if test -n "$with_ltdl_include"; then
+-+  if test -f "$with_ltdl_include/ltdl.h"; then :
+-+  else
+-+    AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include'])
+-+  fi
+-+else
+-+  with_ltdl_include=no
+-+fi
+-+
+-+AC_ARG_WITH([ltdl_lib],
+-+    [AS_HELP_STRING([--with-ltdl-lib=DIR],
+-+                    [use the libltdl.la installed in DIR])])
+-+
+-+if test -n "$with_ltdl_lib"; then
+-+  if test -f "$with_ltdl_lib/libltdl.la"; then :
+-+  else
+-+    AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib'])
+-+  fi
+-+else
+-+  with_ltdl_lib=no
+-+fi
+-+
+-+case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in
+-+  ,yes,no,no,)
+-+	m4_case(m4_default(_LTDL_TYPE, [convenience]),
+-+	    [convenience], [_LTDL_CONVENIENCE],
+-+	    [installable], [_LTDL_INSTALLABLE],
+-+	  [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)])
+-+	;;
+-+  ,no,no,no,)
+-+	# If the included ltdl is not to be used, then use the
+-+	# preinstalled libltdl we found.
+-+	AC_DEFINE([HAVE_LTDL], [1],
+-+	  [Define this if a modern libltdl is already installed])
+-+	LIBLTDL=-lltdl
+-+	LTDLDEPS=
+-+	LTDLINCL=
+-+	;;
+-+  ,no*,no,*)
+-+	AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together])
+-+	;;
+-+  *)	with_included_ltdl=no
+-+	LIBLTDL="-L$with_ltdl_lib -lltdl"
+-+	LTDLDEPS=
+-+	LTDLINCL="-I$with_ltdl_include"
+-+	;;
+-+esac
+-+INCLTDL="$LTDLINCL"
+-+
+-+# Report our decision...
+-+AC_MSG_CHECKING([where to find libltdl headers])
+-+AC_MSG_RESULT([$LTDLINCL])
+-+AC_MSG_CHECKING([where to find libltdl library])
+-+AC_MSG_RESULT([$LIBLTDL])
+-+
+-+_LTDL_SETUP
+-+
+-+dnl restore autoconf definition.
+-+m4_popdef([AC_LIBOBJ])
+-+m4_popdef([AC_LIBSOURCES])
+-+
+-+AC_CONFIG_COMMANDS_PRE([
+-+    _ltdl_libobjs=
+-+    _ltdl_ltlibobjs=
+-+    if test -n "$_LT_LIBOBJS"; then
+-+      # Remove the extension.
+-+      _lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
+-+      for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
+-+        _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
+-+        _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
+-+      done
+-+    fi
+-+    AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
+-+    AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
+-+])
+-+
+-+# Only expand once:
+-+m4_define([LTDL_INIT])
+-+])# LTDL_INIT
+-+
+-+# Old names:
+-+AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)])
+-+AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)])
+-+AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LIB_LTDL], [])
+-+dnl AC_DEFUN([AC_WITH_LTDL], [])
+-+dnl AC_DEFUN([LT_WITH_LTDL], [])
+-+
+-+
+-+# _LTDL_SETUP
+-+# -----------
+-+# Perform all the checks necessary for compilation of the ltdl objects
+-+#  -- including compiler checks and header checks.  This is a public
+-+# interface  mainly for the benefit of libltdl's own configure.ac, most
+-+# other users should call LTDL_INIT instead.
+-+AC_DEFUN([_LTDL_SETUP],
+-+[AC_REQUIRE([AC_PROG_CC])dnl
+-+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl
+-+AC_REQUIRE([LT_SYS_MODULE_PATH])dnl
+-+AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl
+-+AC_REQUIRE([LT_LIB_DLLOAD])dnl
+-+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+-+AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl
+-+AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl
+-+AC_REQUIRE([gl_FUNC_ARGZ])dnl
+-+
+-+m4_require([_LT_CHECK_OBJDIR])dnl
+-+m4_require([_LT_HEADER_DLFCN])dnl
+-+m4_require([_LT_CHECK_DLPREOPEN])dnl
+-+m4_require([_LT_DECL_SED])dnl
+-+
+-+dnl Don't require this, or it will be expanded earlier than the code
+-+dnl that sets the variables it relies on:
+-+_LT_ENABLE_INSTALL
+-+
+-+dnl _LTDL_MODE specific code must be called at least once:
+-+_LTDL_MODE_DISPATCH
+-+
+-+# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS
+-+# the user used.  This is so that ltdl.h can pick up the parent projects
+-+# config.h file, The first file in AC_CONFIG_HEADERS must contain the
+-+# definitions required by ltdl.c.
+-+# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility).
+-+AC_CONFIG_COMMANDS_PRE([dnl
+-+m4_pattern_allow([^LT_CONFIG_H$])dnl
+-+m4_ifset([AH_HEADER],
+-+    [LT_CONFIG_H=AH_HEADER],
+-+    [m4_ifset([AC_LIST_HEADERS],
+-+	    [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[      ]]*,,;s,[[ :]].*$,,'`],
+-+	[])])])
+-+AC_SUBST([LT_CONFIG_H])
+-+
+-+AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
+-+	[], [], [AC_INCLUDES_DEFAULT])
+-+
+-+AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
+-+AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
+-+
+-+AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
+-+
+-+name=ltdl
+-+LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""`
+-+AC_SUBST([LTDLOPEN])
+-+])# _LTDL_SETUP
+-+
+-+
+-+# _LT_ENABLE_INSTALL
+-+# ------------------
+-+m4_define([_LT_ENABLE_INSTALL],
+-+[AC_ARG_ENABLE([ltdl-install],
+-+    [AS_HELP_STRING([--enable-ltdl-install], [install libltdl])])
+-+
+-+case ,${enable_ltdl_install},${enable_ltdl_convenience} in
+-+  *yes*) ;;
+-+  *) enable_ltdl_convenience=yes ;;
+-+esac
+-+
+-+m4_ifdef([AM_CONDITIONAL],
+-+[AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno)
+-+ AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)])
+-+])# _LT_ENABLE_INSTALL
+-+
+-+
+-+# LT_SYS_DLOPEN_DEPLIBS
+-+# ---------------------
+-+AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS],
+-+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-+AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
+-+  [lt_cv_sys_dlopen_deplibs],
+-+  [# PORTME does your system automatically load deplibs for dlopen?
+-+  # or its logical equivalent (e.g. shl_load for HP-UX < 11)
+-+  # For now, we just catch OSes we know something about -- in the
+-+  # future, we'll try test this programmatically.
+-+  lt_cv_sys_dlopen_deplibs=unknown
+-+  case $host_os in
+-+  aix3*|aix4.1.*|aix4.2.*)
+-+    # Unknown whether this is true for these versions of AIX, but
+-+    # we want this `case' here to explicitly catch those versions.
+-+    lt_cv_sys_dlopen_deplibs=unknown
+-+    ;;
+-+  aix[[4-9]]*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  amigaos*)
+-+    case $host_cpu in
+-+    powerpc)
+-+      lt_cv_sys_dlopen_deplibs=no
+-+      ;;
+-+    esac
+-+    ;;
+-+  darwin*)
+-+    # Assuming the user has installed a libdl from somewhere, this is true
+-+    # If you are looking for one http://www.opendarwin.org/projects/dlcompat
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  freebsd* | dragonfly*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  gnu* | linux* | k*bsd*-gnu)
+-+    # GNU and its variants, using gnu ld.so (Glibc)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  hpux10*|hpux11*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  interix*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  irix[[12345]]*|irix6.[[01]]*)
+-+    # Catch all versions of IRIX before 6.2, and indicate that we don't
+-+    # know how it worked for any of those versions.
+-+    lt_cv_sys_dlopen_deplibs=unknown
+-+    ;;
+-+  irix*)
+-+    # The case above catches anything before 6.2, and it's known that
+-+    # at 6.2 and later dlopen does load deplibs.
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  netbsd*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  openbsd*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  osf[[1234]]*)
+-+    # dlopen did load deplibs (at least at 4.x), but until the 5.x series,
+-+    # it did *not* use an RPATH in a shared library to find objects the
+-+    # library depends on, so we explicitly say `no'.
+-+    lt_cv_sys_dlopen_deplibs=no
+-+    ;;
+-+  osf5.0|osf5.0a|osf5.1)
+-+    # dlopen *does* load deplibs and with the right loader patch applied
+-+    # it even uses RPATH in a shared library to search for shared objects
+-+    # that the library depends on, but there's no easy way to know if that
+-+    # patch is installed.  Since this is the case, all we can really
+-+    # say is unknown -- it depends on the patch being installed.  If
+-+    # it is, this changes to `yes'.  Without it, it would be `no'.
+-+    lt_cv_sys_dlopen_deplibs=unknown
+-+    ;;
+-+  osf*)
+-+    # the two cases above should catch all versions of osf <= 5.1.  Read
+-+    # the comments above for what we know about them.
+-+    # At > 5.1, deplibs are loaded *and* any RPATH in a shared library
+-+    # is used to find them so we can finally say `yes'.
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  qnx*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  solaris*)
+-+    lt_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+-+    libltdl_cv_sys_dlopen_deplibs=yes
+-+    ;;
+-+  esac
+-+  ])
+-+if test "$lt_cv_sys_dlopen_deplibs" != yes; then
+-+ AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
+-+    [Define if the OS needs help to load dependent libraries for dlopen().])
+-+fi
+-+])# LT_SYS_DLOPEN_DEPLIBS
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [])
+-+
+-+
+-+# LT_SYS_MODULE_EXT
+-+# -----------------
+-+AC_DEFUN([LT_SYS_MODULE_EXT],
+-+[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+-+AC_CACHE_CHECK([which extension is used for runtime loadable modules],
+-+  [libltdl_cv_shlibext],
+-+[
+-+module=yes
+-+eval libltdl_cv_shlibext=$shrext_cmds
+-+  ])
+-+if test -n "$libltdl_cv_shlibext"; then
+-+  m4_pattern_allow([LT_MODULE_EXT])dnl
+-+  AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
+-+    [Define to the extension used for runtime loadable modules, say, ".so".])
+-+fi
+-+])# LT_SYS_MODULE_EXT
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_SHLIBEXT], [LT_SYS_MODULE_EXT])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_SHLIBEXT], [])
+-+
+-+
+-+# LT_SYS_MODULE_PATH
+-+# ------------------
+-+AC_DEFUN([LT_SYS_MODULE_PATH],
+-+[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+-+AC_CACHE_CHECK([which variable specifies run-time module search path],
+-+  [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"])
+-+if test -n "$lt_cv_module_path_var"; then
+-+  m4_pattern_allow([LT_MODULE_PATH_VAR])dnl
+-+  AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"],
+-+    [Define to the name of the environment variable that determines the run-time module search path.])
+-+fi
+-+])# LT_SYS_MODULE_PATH
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_SHLIBPATH], [LT_SYS_MODULE_PATH])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_SHLIBPATH], [])
+-+
+-+
+-+# LT_SYS_DLSEARCH_PATH
+-+# --------------------
+-+AC_DEFUN([LT_SYS_DLSEARCH_PATH],
+-+[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+-+AC_CACHE_CHECK([for the default library search path],
+-+  [lt_cv_sys_dlsearch_path],
+-+  [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"])
+-+if test -n "$lt_cv_sys_dlsearch_path"; then
+-+  sys_dlsearch_path=
+-+  for dir in $lt_cv_sys_dlsearch_path; do
+-+    if test -z "$sys_dlsearch_path"; then
+-+      sys_dlsearch_path="$dir"
+-+    else
+-+      sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir"
+-+    fi
+-+  done
+-+  m4_pattern_allow([LT_DLSEARCH_PATH])dnl
+-+  AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"],
+-+    [Define to the system default library search path.])
+-+fi
+-+])# LT_SYS_DLSEARCH_PATH
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_SYSSEARCHPATH], [LT_SYS_DLSEARCH_PATH])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [])
+-+
+-+
+-+# _LT_CHECK_DLPREOPEN
+-+# -------------------
+-+m4_defun([_LT_CHECK_DLPREOPEN],
+-+[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+-+AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen],
+-+  [libltdl_cv_preloaded_symbols],
+-+  [if test -n "$lt_cv_sys_global_symbol_pipe"; then
+-+    libltdl_cv_preloaded_symbols=yes
+-+  else
+-+    libltdl_cv_preloaded_symbols=no
+-+  fi
+-+  ])
+-+if test x"$libltdl_cv_preloaded_symbols" = xyes; then
+-+  AC_DEFINE([HAVE_PRELOADED_SYMBOLS], [1],
+-+    [Define if libtool can extract symbol lists from object files.])
+-+fi
+-+])# _LT_CHECK_DLPREOPEN
+-+
+-+
+-+# LT_LIB_DLLOAD
+-+# -------------
+-+AC_DEFUN([LT_LIB_DLLOAD],
+-+[m4_pattern_allow([^LT_DLLOADERS$])
+-+LT_DLLOADERS=
+-+AC_SUBST([LT_DLLOADERS])
+-+
+-+AC_LANG_PUSH([C])
+-+
+-+LIBADD_DLOPEN=
+-+AC_SEARCH_LIBS([dlopen], [dl],
+-+	[AC_DEFINE([HAVE_LIBDL], [1],
+-+		   [Define if you have the libdl library or equivalent.])
+-+	if test "$ac_cv_search_dlopen" != "none required" ; then
+-+	  LIBADD_DLOPEN="-ldl"
+-+	fi
+-+	libltdl_cv_lib_dl_dlopen="yes"
+-+	LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+-+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H
+-+#  include <dlfcn.h>
+-+#endif
+-+    ]], [[dlopen(0, 0);]])],
+-+	    [AC_DEFINE([HAVE_LIBDL], [1],
+-+		       [Define if you have the libdl library or equivalent.])
+-+	    libltdl_cv_func_dlopen="yes"
+-+	    LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+-+	[AC_CHECK_LIB([svld], [dlopen],
+-+		[AC_DEFINE([HAVE_LIBDL], [1],
+-+			 [Define if you have the libdl library or equivalent.])
+-+	        LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes"
+-+		LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])])
+-+if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes
+-+then
+-+  lt_save_LIBS="$LIBS"
+-+  LIBS="$LIBS $LIBADD_DLOPEN"
+-+  AC_CHECK_FUNCS([dlerror])
+-+  LIBS="$lt_save_LIBS"
+-+fi
+-+AC_SUBST([LIBADD_DLOPEN])
+-+
+-+LIBADD_SHL_LOAD=
+-+AC_CHECK_FUNC([shl_load],
+-+	[AC_DEFINE([HAVE_SHL_LOAD], [1],
+-+		   [Define if you have the shl_load function.])
+-+	LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"],
+-+    [AC_CHECK_LIB([dld], [shl_load],
+-+	    [AC_DEFINE([HAVE_SHL_LOAD], [1],
+-+		       [Define if you have the shl_load function.])
+-+	    LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"
+-+	    LIBADD_SHL_LOAD="-ldld"])])
+-+AC_SUBST([LIBADD_SHL_LOAD])
+-+
+-+case $host_os in
+-+darwin[[1567]].*)
+-+# We only want this for pre-Mac OS X 10.4.
+-+  AC_CHECK_FUNC([_dyld_func_lookup],
+-+	[AC_DEFINE([HAVE_DYLD], [1],
+-+		   [Define if you have the _dyld_func_lookup function.])
+-+	LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"])
+-+  ;;
+-+beos*)
+-+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+-+  ;;
+-+cygwin* | mingw* | os2* | pw32*)
+-+  AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
+-+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
+-+  ;;
+-+esac
+-+
+-+AC_CHECK_LIB([dld], [dld_link],
+-+	[AC_DEFINE([HAVE_DLD], [1],
+-+		   [Define if you have the GNU dld library.])
+-+		LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"])
+-+AC_SUBST([LIBADD_DLD_LINK])
+-+
+-+m4_pattern_allow([^LT_DLPREOPEN$])
+-+LT_DLPREOPEN=
+-+if test -n "$LT_DLLOADERS"
+-+then
+-+  for lt_loader in $LT_DLLOADERS; do
+-+    LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader "
+-+  done
+-+  AC_DEFINE([HAVE_LIBDLLOADER], [1],
+-+            [Define if libdlloader will be built on this platform])
+-+fi
+-+AC_SUBST([LT_DLPREOPEN])
+-+
+-+dnl This isn't used anymore, but set it for backwards compatibility
+-+LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD"
+-+AC_SUBST([LIBADD_DL])
+-+
+-+AC_LANG_POP
+-+])# LT_LIB_DLLOAD
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_DLLIB], [LT_LIB_DLLOAD])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_DLLIB], [])
+-+
+-+
+-+# LT_SYS_SYMBOL_USCORE
+-+# --------------------
+-+# does the compiler prefix global symbols with an underscore?
+-+AC_DEFUN([LT_SYS_SYMBOL_USCORE],
+-+[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+-+AC_CACHE_CHECK([for _ prefix in compiled symbols],
+-+  [lt_cv_sys_symbol_underscore],
+-+  [lt_cv_sys_symbol_underscore=no
+-+  cat > conftest.$ac_ext <<_LT_EOF
+-+void nm_test_func(){}
+-+int main(){nm_test_func;return 0;}
+-+_LT_EOF
+-+  if AC_TRY_EVAL(ac_compile); then
+-+    # Now try to grab the symbols.
+-+    ac_nlist=conftest.nm
+-+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
+-+      # See whether the symbols have a leading underscore.
+-+      if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
+-+        lt_cv_sys_symbol_underscore=yes
+-+      else
+-+        if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
+-+	  :
+-+        else
+-+	  echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD
+-+        fi
+-+      fi
+-+    else
+-+      echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+-+    fi
+-+  else
+-+    echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+-+    cat conftest.c >&AS_MESSAGE_LOG_FD
+-+  fi
+-+  rm -rf conftest*
+-+  ])
+-+  sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+-+  AC_SUBST([sys_symbol_underscore])
+-+])# LT_SYS_SYMBOL_USCORE
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [])
+-+
+-+
+-+# LT_FUNC_DLSYM_USCORE
+-+# --------------------
+-+AC_DEFUN([LT_FUNC_DLSYM_USCORE],
+-+[AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+-+if test x"$lt_cv_sys_symbol_underscore" = xyes; then
+-+  if test x"$libltdl_cv_func_dlopen" = xyes ||
+-+     test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then
+-+	AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
+-+	  [libltdl_cv_need_uscore],
+-+	  [libltdl_cv_need_uscore=unknown
+-+          save_LIBS="$LIBS"
+-+          LIBS="$LIBS $LIBADD_DLOPEN"
+-+	  _LT_TRY_DLOPEN_SELF(
+-+	    [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes],
+-+	    [],				 [libltdl_cv_need_uscore=cross])
+-+	  LIBS="$save_LIBS"
+-+	])
+-+  fi
+-+fi
+-+
+-+if test x"$libltdl_cv_need_uscore" = xyes; then
+-+  AC_DEFINE([NEED_USCORE], [1],
+-+    [Define if dlsym() requires a leading underscore in symbol names.])
+-+fi
+-+])# LT_FUNC_DLSYM_USCORE
+-+
+-+# Old name:
+-+AU_ALIAS([AC_LTDL_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE])
+-+dnl aclocal-1.4 backwards compatibility:
+-+dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], [])
+-+
+- # Helper functions for option handling.                    -*- Autoconf -*-
+- #
+- #   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+- #   Written by Gary V. Vaughan, 2004
+- #
+- # This file is free software; the Free Software Foundation gives
+- # unlimited permission to copy and/or distribute it, with or without
+- # modifications, as long as this notice is preserved.
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -747,16 +747,17 @@ am__EXEEXT_TRUE
+- LTLIBOBJS
+- LIBOBJS
+- toolexeclibdir
+- toolexecdir
+- FFI_DEBUG_FALSE
+- FFI_DEBUG_TRUE
+- TARGETDIR
+- TARGET
+-+sys_symbol_underscore
+- HAVE_LONG_DOUBLE
+- ALLOCA
+- PA64_HPUX_FALSE
+- PA64_HPUX_TRUE
+- PA_HPUX_FALSE
+- PA_HPUX_TRUE
+- PA_LINUX_FALSE
+- PA_LINUX_TRUE
+-@@ -5045,23 +5046,23 @@ test -z "$NM" && NM=nm
+- 
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+- $as_echo_n "checking the name lister ($NM) interface... " >&6; }
+- if test "${lt_cv_nm_interface+set}" = set; then :
+-   $as_echo_n "(cached) " >&6
+- else
+-   lt_cv_nm_interface="BSD nm"
+-   echo "int some_variable = 0;" > conftest.$ac_ext
+--  (eval echo "\"\$as_me:5053: $ac_compile\"" >&5)
+-+  (eval echo "\"\$as_me:5054: $ac_compile\"" >&5)
+-   (eval "$ac_compile" 2>conftest.err)
+-   cat conftest.err >&5
+--  (eval echo "\"\$as_me:5056: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+-+  (eval echo "\"\$as_me:5057: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+-   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+-   cat conftest.err >&5
+--  (eval echo "\"\$as_me:5059: output\"" >&5)
+-+  (eval echo "\"\$as_me:5060: output\"" >&5)
+-   cat conftest.out >&5
+-   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+-     lt_cv_nm_interface="MS dumpbin"
+-   fi
+-   rm -f conftest*
+- fi
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+- $as_echo "$lt_cv_nm_interface" >&6; }
+-@@ -6257,17 +6258,17 @@ ia64-*-hpux*)
+- 	HPUX_IA64_MODE="64"
+- 	;;
+-     esac
+-   fi
+-   rm -rf conftest*
+-   ;;
+- *-*-irix6*)
+-   # Find out which ABI we are using.
+--  echo '#line 6265 "configure"' > conftest.$ac_ext
+-+  echo '#line 6266 "configure"' > conftest.$ac_ext
+-   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+-   (eval $ac_compile) 2>&5
+-   ac_status=$?
+-   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-   test $ac_status = 0; }; then
+-     if test "$lt_cv_prog_gnu_ld" = yes; then
+-       case `/usr/bin/file conftest.$ac_objext` in
+- 	*32-bit*)
+-@@ -7783,21 +7784,21 @@ else
+-    # (2) before a word containing "conftest.", or (3) at the end.
+-    # Note that $ac_compile itself does not contain backslashes and begins
+-    # with a dollar sign (not a hyphen), so the echo should work correctly.
+-    # The option is referenced via a variable to avoid confusing sed.
+-    lt_compile=`echo "$ac_compile" | $SED \
+-    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+-    -e 's:$: $lt_compiler_flag:'`
+--   (eval echo "\"\$as_me:7791: $lt_compile\"" >&5)
+-+   (eval echo "\"\$as_me:7792: $lt_compile\"" >&5)
+-    (eval "$lt_compile" 2>conftest.err)
+-    ac_status=$?
+-    cat conftest.err >&5
+--   echo "$as_me:7795: \$? = $ac_status" >&5
+-+   echo "$as_me:7796: \$? = $ac_status" >&5
+-    if (exit $ac_status) && test -s "$ac_outfile"; then
+-      # The compiler can only warn and ignore the option if not recognized
+-      # So say no if there are warnings other than the usual output.
+-      $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+-      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+-      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+-        lt_cv_prog_compiler_rtti_exceptions=yes
+-      fi
+-@@ -8122,21 +8123,21 @@ else
+-    # (2) before a word containing "conftest.", or (3) at the end.
+-    # Note that $ac_compile itself does not contain backslashes and begins
+-    # with a dollar sign (not a hyphen), so the echo should work correctly.
+-    # The option is referenced via a variable to avoid confusing sed.
+-    lt_compile=`echo "$ac_compile" | $SED \
+-    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+-    -e 's:$: $lt_compiler_flag:'`
+--   (eval echo "\"\$as_me:8130: $lt_compile\"" >&5)
+-+   (eval echo "\"\$as_me:8131: $lt_compile\"" >&5)
+-    (eval "$lt_compile" 2>conftest.err)
+-    ac_status=$?
+-    cat conftest.err >&5
+--   echo "$as_me:8134: \$? = $ac_status" >&5
+-+   echo "$as_me:8135: \$? = $ac_status" >&5
+-    if (exit $ac_status) && test -s "$ac_outfile"; then
+-      # The compiler can only warn and ignore the option if not recognized
+-      # So say no if there are warnings other than the usual output.
+-      $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+-      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+-      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+-        lt_cv_prog_compiler_pic_works=yes
+-      fi
+-@@ -8227,21 +8228,21 @@ else
+-    # Insert the option either (1) after the last *FLAGS variable, or
+-    # (2) before a word containing "conftest.", or (3) at the end.
+-    # Note that $ac_compile itself does not contain backslashes and begins
+-    # with a dollar sign (not a hyphen), so the echo should work correctly.
+-    lt_compile=`echo "$ac_compile" | $SED \
+-    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+-    -e 's:$: $lt_compiler_flag:'`
+--   (eval echo "\"\$as_me:8235: $lt_compile\"" >&5)
+-+   (eval echo "\"\$as_me:8236: $lt_compile\"" >&5)
+-    (eval "$lt_compile" 2>out/conftest.err)
+-    ac_status=$?
+-    cat out/conftest.err >&5
+--   echo "$as_me:8239: \$? = $ac_status" >&5
+-+   echo "$as_me:8240: \$? = $ac_status" >&5
+-    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+-    then
+-      # The compiler can only warn and ignore the option if not recognized
+-      # So say no if there are warnings
+-      $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+-      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+-      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+-        lt_cv_prog_compiler_c_o=yes
+-@@ -8282,21 +8283,21 @@ else
+-    # Insert the option either (1) after the last *FLAGS variable, or
+-    # (2) before a word containing "conftest.", or (3) at the end.
+-    # Note that $ac_compile itself does not contain backslashes and begins
+-    # with a dollar sign (not a hyphen), so the echo should work correctly.
+-    lt_compile=`echo "$ac_compile" | $SED \
+-    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+-    -e 's:$: $lt_compiler_flag:'`
+--   (eval echo "\"\$as_me:8290: $lt_compile\"" >&5)
+-+   (eval echo "\"\$as_me:8291: $lt_compile\"" >&5)
+-    (eval "$lt_compile" 2>out/conftest.err)
+-    ac_status=$?
+-    cat out/conftest.err >&5
+--   echo "$as_me:8294: \$? = $ac_status" >&5
+-+   echo "$as_me:8295: \$? = $ac_status" >&5
+-    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+-    then
+-      # The compiler can only warn and ignore the option if not recognized
+-      # So say no if there are warnings
+-      $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+-      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+-      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+-        lt_cv_prog_compiler_c_o=yes
+-@@ -10652,17 +10653,17 @@ if test "${lt_cv_dlopen_self+set}" = set
+-   $as_echo_n "(cached) " >&6
+- else
+-   	  if test "$cross_compiling" = yes; then :
+-   lt_cv_dlopen_self=cross
+- else
+-   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+-   lt_status=$lt_dlunknown
+-   cat > conftest.$ac_ext <<_LT_EOF
+--#line 10660 "configure"
+-+#line 10661 "configure"
+- #include "confdefs.h"
+- 
+- #if HAVE_DLFCN_H
+- #include <dlfcn.h>
+- #endif
+- 
+- #include <stdio.h>
+- 
+-@@ -10748,17 +10749,17 @@ if test "${lt_cv_dlopen_self_static+set}
+-   $as_echo_n "(cached) " >&6
+- else
+-   	  if test "$cross_compiling" = yes; then :
+-   lt_cv_dlopen_self_static=cross
+- else
+-   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+-   lt_status=$lt_dlunknown
+-   cat > conftest.$ac_ext <<_LT_EOF
+--#line 10756 "configure"
+-+#line 10757 "configure"
+- #include "confdefs.h"
+- 
+- #if HAVE_DLFCN_H
+- #include <dlfcn.h>
+- #endif
+- 
+- #include <stdio.h>
+- 
+-@@ -12356,16 +12357,71 @@ fi
+- $as_echo "$libffi_cv_as_string_pseudo_op" >&6; }
+-     if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
+- 
+- $as_echo "#define HAVE_AS_STRING_PSEUDO_OP 1" >>confdefs.h
+- 
+-     fi
+- fi
+- 
+-+if test x$TARGET = xX86_WIN64; then
+-+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5
+-+$as_echo_n "checking for _ prefix in compiled symbols... " >&6; }
+-+if test "${lt_cv_sys_symbol_underscore+set}" = set; then :
+-+  $as_echo_n "(cached) " >&6
+-+else
+-+  lt_cv_sys_symbol_underscore=no
+-+  cat > conftest.$ac_ext <<_LT_EOF
+-+void nm_test_func(){}
+-+int main(){nm_test_func;return 0;}
+-+_LT_EOF
+-+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+-+  (eval $ac_compile) 2>&5
+-+  ac_status=$?
+-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-+  test $ac_status = 0; }; then
+-+    # Now try to grab the symbols.
+-+    ac_nlist=conftest.nm
+-+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist\""; } >&5
+-+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) 2>&5
+-+  ac_status=$?
+-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-+  test $ac_status = 0; } && test -s "$ac_nlist"; then
+-+      # See whether the symbols have a leading underscore.
+-+      if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
+-+        lt_cv_sys_symbol_underscore=yes
+-+      else
+-+        if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
+-+	  :
+-+        else
+-+	  echo "configure: cannot find nm_test_func in $ac_nlist" >&5
+-+        fi
+-+      fi
+-+    else
+-+      echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&5
+-+    fi
+-+  else
+-+    echo "configure: failed program was:" >&5
+-+    cat conftest.c >&5
+-+  fi
+-+  rm -rf conftest*
+-+
+-+fi
+-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_symbol_underscore" >&5
+-+$as_echo "$lt_cv_sys_symbol_underscore" >&6; }
+-+  sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+-+
+-+
+-+    if test "x$sys_symbol_underscore" = xyes; then
+-+
+-+$as_echo "#define SYMBOL_UNDERSCORE 1" >>confdefs.h
+-+
+-+    fi
+-+fi
+-+
+- case "$target" in
+-      # Darwin 10 (OSX 10.6) and beyond allocate non-executable pages
+-      *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+- 
+- $as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h
+- 
+-      ;;
+- esac
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -310,16 +310,23 @@ if test x$TARGET = xX86 || test x$TARGET
+- 		       [libffi_cv_as_string_pseudo_op=no])
+-     ])
+-     if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
+-        AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1,
+- 	       [Define if your assembler supports .string.])
+-     fi
+- fi
+- 
+-+if test x$TARGET = xX86_WIN64; then
+-+    LT_SYS_SYMBOL_USCORE
+-+    if test "x$sys_symbol_underscore" = xyes; then
+-+        AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.])
+-+    fi
+-+fi
+-+
+- case "$target" in
+-      # Darwin 10 (OSX 10.6) and beyond allocate non-executable pages
+-      *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+-        AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
+-                  [Cannot use malloc on this target, so, we revert to
+-                    alternative means])
+-      ;;
+- esac
+-diff --git a/js/src/ctypes/libffi/src/x86/win64.S b/js/src/ctypes/libffi/src/x86/win64.S
+---- a/js/src/ctypes/libffi/src/x86/win64.S
+-+++ b/js/src/ctypes/libffi/src/x86/win64.S
+-@@ -227,32 +227,40 @@ ret_void$:
+- 	xor	rax, rax
+- 
+- 	lea	rsp, QWORD PTR [rbp+16]
+- 	pop	rbp
+- 	ret	0
+- ffi_call_win64 ENDP
+- _TEXT	ENDS
+- END
+--#else        
+-+
+-+#else
+-+
+-+#ifdef SYMBOL_UNDERSCORE
+-+#define SYMBOL_NAME(name) _##name
+-+#else
+-+#define SYMBOL_NAME(name) name
+-+#endif
+-+
+- .text
+- 
+--.extern _ffi_closure_win64_inner
+-+.extern SYMBOL_NAME(ffi_closure_win64_inner)
+- 
+- # ffi_closure_win64 will be called with these registers set:
+- #    rax points to 'closure'
+- #    r11 contains a bit mask that specifies which of the
+- #    first four parameters are float or double
+- #
+- # It must move the parameters passed in registers to their stack location,
+- # call ffi_closure_win64_inner for the actual work, then return the result.
+- # 
+- 	.balign 16
+--        .globl _ffi_closure_win64	
+--_ffi_closure_win64:     
+-+        .globl SYMBOL_NAME(ffi_closure_win64)
+-+SYMBOL_NAME(ffi_closure_win64):
+- 	# copy register arguments onto stack
+- 	test	$1,%r11
+- 	jne	.Lfirst_is_float	
+- 	mov	%rcx, 8(%rsp)
+- 	jmp	.Lsecond
+- .Lfirst_is_float:
+- 	movlpd	%xmm0, 8(%rsp)
+- 
+-@@ -282,27 +290,27 @@ END
+- 
+- .Ldone:
+- #.ALLOCSTACK 40
+- 	sub	$40, %rsp
+- #.ENDPROLOG
+- 	mov	%rax, %rcx	# context is first parameter
+- 	mov	%rsp, %rdx	# stack is second parameter
+- 	add	$48, %rdx	# point to start of arguments
+--	mov	$_ffi_closure_win64_inner, %rax
+-+	mov	$SYMBOL_NAME(ffi_closure_win64_inner), %rax
+- 	callq	*%rax		# call the real closure function
+- 	add	$40, %rsp
+- 	movq	%rax, %xmm0	# If the closure returned a float,
+-                                 # ffi_closure_win64_inner wrote it to rax
+- 	retq
+- .ffi_closure_win64_end:
+- 
+- 	.balign 16
+--        .globl	_ffi_call_win64
+--_ffi_call_win64:        
+-+        .globl	SYMBOL_NAME(ffi_call_win64)
+-+SYMBOL_NAME(ffi_call_win64):
+-         # copy registers onto stack
+- 	mov	%r9,32(%rsp)
+- 	mov	%r8,24(%rsp)
+- 	mov	%rdx,16(%rsp)
+- 	mov	%rcx,8(%rsp)
+-         #.PUSHREG rbp
+- 	push	%rbp
+-         #.ALLOCSTACK 48
+diff --git a/js/src/ctypes/patches-libffi/04-bug-756740.patch b/js/src/ctypes/patches-libffi/04-bug-756740.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/04-bug-756740.patch
++++ /dev/null
+@@ -1,44 +0,0 @@
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -11251,17 +11251,17 @@ case "$host" in
+- 
+-   m68k-*-*)
+- 	TARGET=M68K; TARGETDIR=m68k
+- 	;;
+- 
+-   mips-sgi-irix5.* | mips-sgi-irix6.*)
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+--  mips*-*-linux*)
+-+  mips*-*linux*)
+- 	# Support 128-bit long double for NewABI.
+- 	HAVE_LONG_DOUBLE='defined(__mips64)'
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+- 
+-   moxie-*-*)
+-         TARGET=MOXIE; TARGETDIR=moxie
+- 	;;
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -113,17 +113,17 @@ case "$host" in
+- 
+-   m68k-*-*)
+- 	TARGET=M68K; TARGETDIR=m68k
+- 	;;
+- 
+-   mips-sgi-irix5.* | mips-sgi-irix6.*)
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+--  mips*-*-linux*)
+-+  mips*-*linux*)
+- 	# Support 128-bit long double for NewABI.
+- 	HAVE_LONG_DOUBLE='defined(__mips64)'
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+- 
+-   moxie-*-*)
+-         TARGET=MOXIE; TARGETDIR=moxie
+- 	;;
+diff --git a/js/src/ctypes/patches-libffi/05-bug-644136.patch b/js/src/ctypes/patches-libffi/05-bug-644136.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/05-bug-644136.patch
++++ /dev/null
+@@ -1,31 +0,0 @@
+-# HG changeset patch
+-# User Siarhei Siamashka <siarhei.siamashka@gmail.com>
+-# Date 1314529402 -3600
+-# Node ID 0be4a94258c28b97a7e6e87b099359c759941b22
+-# Parent  f1cf848b1ff22bad8980b673cc4410a21c8bdf28
+-Bug 644136 - Add missing fpu directive to fix libffi build on ARM hardfloat systems; r=bsmedberg
+-
+-diff --git a/js/src/ctypes/libffi/src/arm/sysv.S b/js/src/ctypes/libffi/src/arm/sysv.S
+---- a/js/src/ctypes/libffi/src/arm/sysv.S
+-+++ b/js/src/ctypes/libffi/src/arm/sysv.S
+-@@ -224,16 +224,20 @@ ARM_FUNC_START ffi_call_SYSV
+- LSYM(Lepilogue):
+- 	RETLDM	"r0-r3,fp"
+- 
+- .ffi_call_SYSV_end:
+- 	UNWIND .fnend
+-         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
+- 
+- 
+-+/* Below are VFP hard-float ABI call and closure implementations.
+-+   Add VFP FPU directive here. */
+-+	.fpu	vfp
+-+
+- 	@ r0:   fn
+- 	@ r1:   &ecif
+- 	@ r2:   cif->bytes
+- 	@ r3:   fig->flags
+- 	@ sp+0: ecif.rvalue
+- 
+- ARM_FUNC_START ffi_call_VFP
+- 	@ Save registers
+diff --git a/js/src/ctypes/patches-libffi/06-bug-778414.patch b/js/src/ctypes/patches-libffi/06-bug-778414.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/06-bug-778414.patch
++++ /dev/null
+@@ -1,99 +0,0 @@
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -12422,26 +12422,42 @@ case "$target" in
+-      *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+- 
+- $as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h
+- 
+-      ;;
+- esac
+- 
+- if test x$TARGET = xX86_64; then
+--    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports unwind section type" >&5
+--$as_echo_n "checking assembler supports unwind section type... " >&6; }
+-+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking toolchain supports unwind section type" >&5
+-+$as_echo_n "checking toolchain supports unwind section type... " >&6; }
+- if test "${libffi_cv_as_x86_64_unwind_section_type+set}" = set; then :
+-   $as_echo_n "(cached) " >&6
+- else
+- 
+--	libffi_cv_as_x86_64_unwind_section_type=yes
+--	echo '.section .eh_frame,"a",@unwind' > conftest.s
+--	if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
+--	    libffi_cv_as_x86_64_unwind_section_type=no
+-+        cat  > conftest1.s << EOF
+-+.text
+-+.globl foo
+-+foo:
+-+jmp bar
+-+.section .eh_frame,"a",@unwind
+-+bar:
+-+EOF
+-+
+-+        cat > conftest2.c  << EOF
+-+extern void foo();
+-+int main(){foo();}
+-+EOF
+-+
+-+	libffi_cv_as_x86_64_unwind_section_type=no
+-+	# we ensure that we can compile _and_ link an assembly file containing an @unwind section
+-+	# since the compiler can support it and not the linker (ie old binutils)
+-+	if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \
+-+           $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then
+-+	    libffi_cv_as_x86_64_unwind_section_type=yes
+- 	fi
+- 
+- fi
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_64_unwind_section_type" >&5
+- $as_echo "$libffi_cv_as_x86_64_unwind_section_type" >&6; }
+-     if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then
+- 
+- $as_echo "#define HAVE_AS_X86_64_UNWIND_SECTION_TYPE 1" >>confdefs.h
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -327,22 +327,38 @@ case "$target" in
+-      *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
+-        AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
+-                  [Cannot use malloc on this target, so, we revert to
+-                    alternative means])
+-      ;;
+- esac
+- 
+- if test x$TARGET = xX86_64; then
+--    AC_CACHE_CHECK([assembler supports unwind section type],
+-+    AC_CACHE_CHECK([toolchain supports unwind section type],
+- 	libffi_cv_as_x86_64_unwind_section_type, [
+--	libffi_cv_as_x86_64_unwind_section_type=yes
+--	echo '.section .eh_frame,"a",@unwind' > conftest.s
+--	if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
+--	    libffi_cv_as_x86_64_unwind_section_type=no
+-+        cat  > conftest1.s << EOF
+-+.text
+-+.globl foo
+-+foo:
+-+jmp bar
+-+.section .eh_frame,"a",@unwind
+-+bar:
+-+EOF
+-+
+-+        cat > conftest2.c  << EOF
+-+extern void foo();
+-+int main(){foo();}
+-+EOF
+-+
+-+	libffi_cv_as_x86_64_unwind_section_type=no
+-+	# we ensure that we can compile _and_ link an assembly file containing an @unwind section
+-+	# since the compiler can support it and not the linker (ie old binutils)
+-+	if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \
+-+           $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then
+-+	    libffi_cv_as_x86_64_unwind_section_type=yes
+- 	fi
+- 	])
+-     if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then
+- 	AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
+- 		  [Define if your assembler supports unwind section type.])
+-     fi
+- fi
+- 
+diff --git a/js/src/ctypes/patches-libffi/07-bug-928381.patch b/js/src/ctypes/patches-libffi/07-bug-928381.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/07-bug-928381.patch
++++ /dev/null
+@@ -1,31 +0,0 @@
+-# HG changeset patch
+-# User Landry Breuil <landry@openbsd.org>
+-# Date 1382105758 -7200
+-#      Fri Oct 18 16:15:58 2013 +0200
+-# Node ID 5f82dae8c495a7fddf5ed935eb2a8be7f47b9bd8
+-# Parent  d50df2233e95f4d45b35eddbfbe84bcdda6a11e2
+-Bug 928381 - ctypes/libffi: Fix stack alignment on *BSD/i386 r=glandium
+-
+-diff --git a/js/src/ctypes/libffi/src/x86/freebsd.S b/js/src/ctypes/libffi/src/x86/freebsd.S
+---- a/js/src/ctypes/libffi/src/x86/freebsd.S
+-+++ b/js/src/ctypes/libffi/src/x86/freebsd.S
+-@@ -44,16 +44,19 @@ ffi_call_SYSV:
+-         pushl %ebp
+- .LCFI0:
+-         movl  %esp,%ebp
+- .LCFI1:
+- 	/* Make room for all of the new args.  */
+- 	movl  16(%ebp),%ecx
+- 	subl  %ecx,%esp
+- 
+-+	/* Align the stack pointer to 16-bytes */
+-+	andl  $0xfffffff0, %esp
+-+
+- 	movl  %esp,%eax
+- 
+- 	/* Place all of the ffi_prep_args in position  */
+- 	pushl 12(%ebp)
+- 	pushl %eax
+- 	call  *8(%ebp)
+- 
+- 	/* Return stack to previous state and call the function  */
+diff --git a/js/src/ctypes/patches-libffi/08-bug-928390.patch b/js/src/ctypes/patches-libffi/08-bug-928390.patch
+deleted file mode 100644
+--- a/js/src/ctypes/patches-libffi/08-bug-928390.patch
++++ /dev/null
+@@ -1,135 +0,0 @@
+-# HG changeset patch
+-# Parent e5f7246bf2158ac88b3e0727811925c467226d2e
+-# User Landry Breuil <landry@openbsd.org>
+-Bug 928390: Partially backport libffi upstream 049d8386ff for OpenBSD/mips/hppa. r=glandium
+-
+-diff --git a/js/src/ctypes/libffi/configure b/js/src/ctypes/libffi/configure
+---- a/js/src/ctypes/libffi/configure
+-+++ b/js/src/ctypes/libffi/configure
+-@@ -11208,17 +11208,17 @@ case "$host" in
+-   cris-*-*)
+- 	TARGET=LIBFFI_CRIS; TARGETDIR=cris
+- 	;;
+- 
+-   frv-*-*)
+- 	TARGET=FRV; TARGETDIR=frv
+- 	;;
+- 
+--  hppa*-*-linux* | parisc*-*-linux*)
+-+  hppa*-*-linux* | hppa*-*-openbsd* | parisc*-*-linux*)
+- 	TARGET=PA_LINUX; TARGETDIR=pa
+- 	;;
+-   hppa*64-*-hpux*)
+- 	TARGET=PA64_HPUX; TARGETDIR=pa
+- 	;;
+-   hppa*-*-hpux*)
+- 	TARGET=PA_HPUX; TARGETDIR=pa
+- 	;;
+-@@ -11251,17 +11251,17 @@ case "$host" in
+- 
+-   m68k-*-*)
+- 	TARGET=M68K; TARGETDIR=m68k
+- 	;;
+- 
+-   mips-sgi-irix5.* | mips-sgi-irix6.*)
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+--  mips*-*linux*)
+-+  mips*-*linux* | mips*-*-openbsd*)
+- 	# Support 128-bit long double for NewABI.
+- 	HAVE_LONG_DOUBLE='defined(__mips64)'
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+- 
+-   moxie-*-*)
+-         TARGET=MOXIE; TARGETDIR=moxie
+- 	;;
+-diff --git a/js/src/ctypes/libffi/configure.ac b/js/src/ctypes/libffi/configure.ac
+---- a/js/src/ctypes/libffi/configure.ac
+-+++ b/js/src/ctypes/libffi/configure.ac
+-@@ -70,17 +70,17 @@ case "$host" in
+-   cris-*-*)
+- 	TARGET=LIBFFI_CRIS; TARGETDIR=cris
+- 	;;
+- 
+-   frv-*-*)
+- 	TARGET=FRV; TARGETDIR=frv
+- 	;;
+- 
+--  hppa*-*-linux* | parisc*-*-linux*)
+-+  hppa*-*-linux* | hppa*-*-openbsd* | parisc*-*-linux*)
+- 	TARGET=PA_LINUX; TARGETDIR=pa
+- 	;;
+-   hppa*64-*-hpux*)
+- 	TARGET=PA64_HPUX; TARGETDIR=pa
+- 	;;
+-   hppa*-*-hpux*)
+- 	TARGET=PA_HPUX; TARGETDIR=pa
+- 	;;
+-@@ -113,17 +113,17 @@ case "$host" in
+- 
+-   m68k-*-*)
+- 	TARGET=M68K; TARGETDIR=m68k
+- 	;;
+- 
+-   mips-sgi-irix5.* | mips-sgi-irix6.*)
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+--  mips*-*linux*)
+-+  mips*-*linux* | mips*-*-openbsd*)
+- 	# Support 128-bit long double for NewABI.
+- 	HAVE_LONG_DOUBLE='defined(__mips64)'
+- 	TARGET=MIPS; TARGETDIR=mips
+- 	;;
+- 
+-   moxie-*-*)
+-         TARGET=MOXIE; TARGETDIR=moxie
+- 	;;
+-diff --git a/js/src/ctypes/libffi/src/mips/ffi.c b/js/src/ctypes/libffi/src/mips/ffi.c
+---- a/js/src/ctypes/libffi/src/mips/ffi.c
+-+++ b/js/src/ctypes/libffi/src/mips/ffi.c
+-@@ -32,17 +32,21 @@
+- 
+- #ifdef __GNUC__
+- #  if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))
+- #    define USE__BUILTIN___CLEAR_CACHE 1
+- #  endif
+- #endif
+- 
+- #ifndef USE__BUILTIN___CLEAR_CACHE
+--#include <sys/cachectl.h>
+-+#  if defined(__OpenBSD__)
+-+#    include <mips64/sysarch.h>
+-+#  else
+-+#    include <sys/cachectl.h>
+-+#  endif
+- #endif
+- 
+- #ifdef FFI_DEBUG
+- # define FFI_MIPS_STOP_HERE() ffi_stop_here()
+- #else
+- # define FFI_MIPS_STOP_HERE() do {} while(0)
+- #endif
+- 
+-diff --git a/js/src/ctypes/libffi/src/mips/ffitarget.h b/js/src/ctypes/libffi/src/mips/ffitarget.h
+---- a/js/src/ctypes/libffi/src/mips/ffitarget.h
+-+++ b/js/src/ctypes/libffi/src/mips/ffitarget.h
+-@@ -24,17 +24,17 @@
+- 
+-    ----------------------------------------------------------------------- */
+- 
+- #ifndef LIBFFI_TARGET_H
+- #define LIBFFI_TARGET_H
+- 
+- #ifdef linux
+- # include <asm/sgidefs.h>
+--#else
+-+#elif !defined(__OpenBSD__)
+- # include <sgidefs.h>
+- #endif
+- #  ifndef _ABIN32
+- #    define _ABIN32 _MIPS_SIM_NABI32
+- #  endif
+- #  ifndef _ABI64
+- #    define _ABI64 _MIPS_SIM_ABI64
+- #  endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-962488.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,80 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1393440196 18000
+# Node ID 6a46f53ad944b44385398822d7bcf7621a785d91
+# Parent  0aa56e2a5f816a30da48701f73d03060ee9692b2
+Bug 962488 - Update double-conversion for proper AArch64 support. r=froydnj
+
+Fix imported from upstream repository:
+https://code.google.com/p/double-conversion/source/detail?r=4e24bb31bcc76d6d218f3056b4c24a109d367561
+
+diff --git a/mfbt/double-conversion/fix-aarch64-macro.patch b/mfbt/double-conversion/fix-aarch64-macro.patch
+new file mode 100644
+--- /dev/null
++++ b/mfbt/double-conversion/fix-aarch64-macro.patch
+@@ -0,0 +1,23 @@
++Backport from upstream.
++
++https://code.google.com/p/double-conversion/source/detail?r=4e24bb31bcc76d6d218f3056b4c24a109d367561
++
++---
++ mfbt/double-conversion/utils.h |    2 +-
++ 1 file changed, 1 insertion(+), 1 deletion(-)
++
++--- a/mfbt/double-conversion/utils.h
+++++ b/mfbt/double-conversion/utils.h
++@@ -58,11 +58,11 @@
++     defined(__mips__) || \
++     defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
++     defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
++     defined(__SH4__) || defined(__alpha__) || \
++     defined(_MIPS_ARCH_MIPS32R2) || \
++-    defined(_AARCH64EL_)
+++    defined(__AARCH64EL__)
++ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
++ #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
++ #if defined(_WIN32)
++ // Windows uses a 64bit wide floating point stack.
++ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+diff --git a/mfbt/double-conversion/update.sh b/mfbt/double-conversion/update.sh
+--- a/mfbt/double-conversion/update.sh
++++ b/mfbt/double-conversion/update.sh
+@@ -15,9 +15,12 @@ cp $1/src/*.h ./
+ 
+ # Source
+ cp $1/src/*.cc ./
+ 
+ patch -p3 < add-mfbt-api-markers.patch
+ patch -p3 < use-StandardInteger.patch
+ patch -p3 < use-mozilla-assertions.patch
+ patch -p3 < use-static_assert.patch
+-patch -p3 < ToPrecision-exponential.patch
+\ No newline at end of file
++patch -p3 < ToPrecision-exponential.patch
++
++# Merged upstream, part of 2.0.1 version
++patch -p3 < fix-aarch64-macro.patch
+diff --git a/mfbt/double-conversion/utils.h b/mfbt/double-conversion/utils.h
+--- a/mfbt/double-conversion/utils.h
++++ b/mfbt/double-conversion/utils.h
+@@ -55,17 +55,17 @@
+ #if defined(_M_X64) || defined(__x86_64__) || \
+     defined(__ARMEL__) || defined(__avr32__) || \
+     defined(__hppa__) || defined(__ia64__) || \
+     defined(__mips__) || \
+     defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
+     defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
+     defined(__SH4__) || defined(__alpha__) || \
+     defined(_MIPS_ARCH_MIPS32R2) || \
+-    defined(_AARCH64EL_)
++    defined(__AARCH64EL__)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
+ #if defined(_WIN32)
+ // Windows uses a 64bit wide floating point stack.
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #else
+ #undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
+ #endif  // _WIN32
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963023.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,115 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1392217668 18000
+# Node ID 4e9b713f435ade266a68a8d7ba08aad65c3fa6c5
+# Parent  282b6e88f9d4c2367a72836f6f9efeab2aadaa58
+Bug 963023 - AArch64 support for libevent. r=froydnj
+
+diff --git a/ipc/chromium/src/third_party/libevent-use-non-deprecated-syscalls.patch b/ipc/chromium/src/third_party/libevent-use-non-deprecated-syscalls.patch
+new file mode 100644
+--- /dev/null
++++ b/ipc/chromium/src/third_party/libevent-use-non-deprecated-syscalls.patch
+@@ -0,0 +1,43 @@
++---
++ ipc/chromium/src/third_party/libevent/epoll_sub.c |   13 +++++++++++++
++ 1 file changed, 13 insertions(+)
++
++--- mozilla-central.orig/ipc/chromium/src/third_party/libevent/epoll_sub.c
+++++ mozilla-central/ipc/chromium/src/third_party/libevent/epoll_sub.c
++@@ -29,15 +29,24 @@
++ #include <sys/param.h>
++ #include <sys/types.h>
++ #include <sys/syscall.h>
++ #include <sys/epoll.h>
++ #include <unistd.h>
+++#include <errno.h>
++
++ int
++ epoll_create(int size)
++ {
+++#if !defined(__NR_epoll_create) && defined(__NR_epoll_create1)
+++	if (size <= 0) {
+++		errno = EINVAL;
+++		return -1;
+++	}
+++	return (syscall(__NR_epoll_create1, 0));
+++#else
++ 	return (syscall(__NR_epoll_create, size));
+++#endif
++ }
++
++ int
++ epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
++ {
++@@ -46,7 +55,11 @@ epoll_ctl(int epfd, int op, int fd, stru
++ }
++
++ int
++ epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
++ {
+++#if !defined(__NR_epoll_wait) && defined(__NR_epoll_pwait)
+++	return (syscall(__NR_epoll_pwait, epfd, events, maxevents, timeout, NULL, 0));
+++#else
++ 	return (syscall(__NR_epoll_wait, epfd, events, maxevents, timeout));
+++#endif
++ }
+diff --git a/ipc/chromium/src/third_party/libevent/README.mozilla b/ipc/chromium/src/third_party/libevent/README.mozilla
+--- a/ipc/chromium/src/third_party/libevent/README.mozilla
++++ b/ipc/chromium/src/third_party/libevent/README.mozilla
+@@ -8,8 +8,10 @@ android/event2/event-config.h
+ 
+ These files are taken from libevent-2.0.21-stable built on the development environment indicated by the first path component. You have to run "./configure" and "make" to get all of the pre-processing done. The file can then be found in "include/event2/".
+ 
+ 2. This is ugly, prepare yourself. OS X has a weird problem with how the "TAILQ_END(head)" is used, causing a linking error. Just replace all use of the "TAILQ_END(head)" macro with "NULL".
+ 
+ 3. Apply "add mac-arc4random-buf.patch", which removes some bad OS X compatibility code. This will allow libevent to compile on all supported versions of OS X.
+ 
+ 4. Apply "openbsd-no-arc4random_addrandom.patch", which fixes the build on OpenBSD (which doesnt provide arc4random_addrandom anymore, see #931354)
++
++5. Apply "libevent-use-non-deprecated-syscalls.patch", which fixes the build on AArch64 architecture (which does not provide deprecated syscalls)
+diff --git a/ipc/chromium/src/third_party/libevent/epoll_sub.c b/ipc/chromium/src/third_party/libevent/epoll_sub.c
+--- a/ipc/chromium/src/third_party/libevent/epoll_sub.c
++++ b/ipc/chromium/src/third_party/libevent/epoll_sub.c
+@@ -26,27 +26,40 @@
+  */
+ #include <stdint.h>
+ 
+ #include <sys/param.h>
+ #include <sys/types.h>
+ #include <sys/syscall.h>
+ #include <sys/epoll.h>
+ #include <unistd.h>
++#include <errno.h>
+ 
+ int
+ epoll_create(int size)
+ {
++#if !defined(__NR_epoll_create) && defined(__NR_epoll_create1)
++	if (size <= 0) {
++		errno = EINVAL;
++		return -1;
++	}
++	return (syscall(__NR_epoll_create1, 0));
++#else
+ 	return (syscall(__NR_epoll_create, size));
++#endif
+ }
+ 
+ int
+ epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
+ {
+ 
+ 	return (syscall(__NR_epoll_ctl, epfd, op, fd, event));
+ }
+ 
+ int
+ epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
+ {
++#if !defined(__NR_epoll_wait) && defined(__NR_epoll_pwait)
++	return (syscall(__NR_epoll_pwait, epfd, events, maxevents, timeout, NULL, 0));
++#else
+ 	return (syscall(__NR_epoll_wait, epfd, events, maxevents, timeout));
++#endif
+ }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963024.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,517 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1393440196 18000
+# Node ID d56b5c1a557348d4ac14a4d1ea7a5b5d240e3647
+# Parent  6a46f53ad944b44385398822d7bcf7621a785d91
+Bug 963024 - AArch64 support for XPCOM. r=froydnj
+
+diff --git a/xpcom/reflect/xptcall/src/md/unix/moz.build b/xpcom/reflect/xptcall/src/md/unix/moz.build
+--- a/xpcom/reflect/xptcall/src/md/unix/moz.build
++++ b/xpcom/reflect/xptcall/src/md/unix/moz.build
+@@ -144,16 +144,23 @@ if CONFIG['OS_ARCH'] == 'NetBSD':
+     if CONFIG['OS_TEST'] in ('amiga', 'atari', 'hp300', 'mac68k', 'mvme68k',
+                              'next68k', 'sun3', 'sun3x', 'x68k'):
+         SOURCES += [
+             'xptcinvoke_netbsd_m68k.cpp',
+             'xptcstubs_netbsd_m68k.cpp'
+         ]
+ 
+ if CONFIG['OS_ARCH'] == 'Linux':
++    if CONFIG['OS_TEST'] == 'aarch64':
++        SOURCES += [
++            'xptcinvoke_aarch64.cpp',
++            'xptcinvoke_asm_aarch64.s',
++            'xptcstubs_aarch64.cpp',
++            'xptcstubs_asm_aarch64.s',
++        ]
+     if CONFIG['OS_TEST'] == 'm68k':
+         SOURCES += [
+             'xptcinvoke_linux_m68k.cpp',
+             'xptcstubs_linux_m68k.cpp',
+         ]
+     if CONFIG['OS_TEST'].find('mips') != -1:
+         if CONFIG['OS_TEST'].find('mips64') != -1:
+             SOURCES += [
+diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_aarch64.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_aarch64.cpp
+new file mode 100644
+--- /dev/null
++++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_aarch64.cpp
+@@ -0,0 +1,136 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++
++#include "xptcprivate.h"
++
++#if !defined(__aarch64__)
++#error "This code is for Linux AArch64 only."
++#endif
++
++
++/* "Procedure Call Standard for the ARM 64-bit Architecture" document, sections
++ * "5.4 Parameter Passing" and "6.1.2 Procedure Calling" contain all the
++ * needed information.
++ *
++ * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf
++ */
++
++#ifndef __AARCH64EL__
++#error "Only little endian compatibility was tested"
++#endif
++
++/*
++ * Allocation of integer function arguments initially to registers r1-r7
++ * and then to stack. Handling of 'that' argument which goes to register r0
++ * is handled separately and does not belong here.
++ *
++ * 'ireg_args'  - pointer to the current position in the buffer,
++ *                corresponding to the register arguments
++ * 'stack_args' - pointer to the current position in the buffer,
++ *                corresponding to the arguments on stack
++ * 'end'        - pointer to the end of the registers argument
++ *                buffer.
++ */
++static inline void alloc_word(uint64_t* &ireg_args,
++                              uint64_t* &stack_args,
++                              uint64_t* end,
++                              uint64_t  data)
++{
++    if (ireg_args < end) {
++        *ireg_args = data;
++        ireg_args++;
++    } else {
++        *stack_args = data;
++        stack_args++;
++    }
++}
++
++static inline void alloc_double(double* &freg_args,
++                                uint64_t* &stack_args,
++                                double* end,
++                                double  data)
++{
++    if (freg_args < end) {
++        *freg_args = data;
++        freg_args++;
++    } else {
++        memcpy(stack_args, &data, sizeof(data));
++        stack_args++;
++    }
++}
++
++static inline void alloc_float(double* &freg_args,
++                               uint64_t* &stack_args,
++                               double* end,
++                               float  data)
++{
++    if (freg_args < end) {
++        memcpy(freg_args, &data, sizeof(data));
++        freg_args++;
++    } else {
++        memcpy(stack_args, &data, sizeof(data));
++        stack_args++;
++    }
++}
++
++
++extern "C" void
++invoke_copy_to_stack(uint64_t* stk, uint64_t *end,
++                     uint32_t paramCount, nsXPTCVariant* s)
++{
++    uint64_t *ireg_args = stk;
++    uint64_t *ireg_end  = ireg_args + 8;
++    double *freg_args = (double *)ireg_end;
++    double *freg_end  = freg_args + 8;
++    uint64_t *stack_args = (uint64_t *)freg_end;
++
++    // leave room for 'that' argument in x0
++    ++ireg_args;
++
++    for (uint32_t i = 0; i < paramCount; i++, s++) {
++        if (s->IsPtrData()) {
++            alloc_word(ireg_args, stack_args, ireg_end, (uint64_t)s->ptr);
++            continue;
++        }
++        // According to the ABI, integral types that are smaller than 8 bytes
++        // are to be passed in 8-byte registers or 8-byte stack slots.
++        switch (s->type) {
++            case nsXPTType::T_FLOAT:
++                alloc_float(freg_args, stack_args, freg_end, s->val.f);
++                break;
++            case nsXPTType::T_DOUBLE:
++                alloc_double(freg_args, stack_args, freg_end, s->val.d);
++                break;
++            case nsXPTType::T_I8:  alloc_word(ireg_args, stk, end, s->val.i8);   break;
++            case nsXPTType::T_I16: alloc_word(ireg_args, stk, end, s->val.i16);  break;
++            case nsXPTType::T_I32: alloc_word(ireg_args, stk, end, s->val.i32);  break;
++            case nsXPTType::T_I64: alloc_word(ireg_args, stk, end, s->val.i64);  break;
++            case nsXPTType::T_U8:  alloc_word(ireg_args, stk, end, s->val.u8);   break;
++            case nsXPTType::T_U16: alloc_word(ireg_args, stk, end, s->val.u16);  break;
++            case nsXPTType::T_U32: alloc_word(ireg_args, stk, end, s->val.u32);  break;
++            case nsXPTType::T_U64: alloc_word(ireg_args, stk, end, s->val.u64);  break;
++            case nsXPTType::T_BOOL: alloc_word(ireg_args, stk, end, s->val.b);   break;
++            case nsXPTType::T_CHAR: alloc_word(ireg_args, stk, end, s->val.c);   break;
++            case nsXPTType::T_WCHAR: alloc_word(ireg_args, stk, end, s->val.wc); break;
++            default:
++                // all the others are plain pointer types
++                alloc_word(ireg_args, stack_args, ireg_end,
++                           reinterpret_cast<uint64_t>(s->val.p));
++                break;
++        }
++    }
++}
++
++extern "C" nsresult _NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
++                                      uint32_t paramCount, nsXPTCVariant* params);
++
++EXPORT_XPCOM_API(nsresult)
++NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
++                 uint32_t paramCount, nsXPTCVariant* params)
++{
++    return _NS_InvokeByIndex(that, methodIndex, paramCount, params);
++}
+diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_aarch64.s b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_aarch64.s
+new file mode 100644
+--- /dev/null
++++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_aarch64.s
+@@ -0,0 +1,67 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++        .section ".text"
++            .globl _NS_InvokeByIndex
++            .type  _NS_InvokeByIndex,@function
++
++/*
++ * _NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
++ *                   uint32_t paramCount, nsXPTCVariant* params)
++ */
++
++_NS_InvokeByIndex:
++            # set up frame
++            stp         x29, x30, [sp,#-32]!
++            mov         x29, sp
++            stp         x19, x20, [sp,#16]
++
++            # save methodIndex across function calls
++            mov         w20, w1
++
++            # end of stack area passed to invoke_copy_to_stack
++            mov         x1, sp
++
++            # assume 8 bytes of stack for each argument with 16-byte alignment
++            add         w19, w2, #1
++            and         w19, w19, #0xfffffffe
++            sub         sp, sp, w19, uxth #3
++
++            # temporary place to store args passed in r0-r7,v0-v7
++            sub         sp, sp, #128
++
++            # save 'that' on stack
++            str         x0, [sp]
++
++            # start of stack area passed to invoke_copy_to_stack
++            mov         x0, sp
++            bl          invoke_copy_to_stack
++
++            # load arguments passed in r0-r7
++            ldp         x6, x7, [sp, #48]
++            ldp         x4, x5, [sp, #32]
++            ldp         x2, x3, [sp, #16]
++            ldp         x0, x1, [sp],#64
++
++            # load arguments passed in v0-v7
++            ldp         d6, d7, [sp, #48]
++            ldp         d4, d5, [sp, #32]
++            ldp         d2, d3, [sp, #16]
++            ldp         d0, d1, [sp],#64
++
++            # call the method
++            ldr         x16, [x0]
++            add         x16, x16, w20, uxth #3
++            ldr         x16, [x16]
++            blr         x16
++
++            add         sp, sp, w19, uxth #3
++            ldp         x19, x20, [sp,#16]
++            ldp         x29, x30, [sp],#32
++            ret
++
++            .size _NS_InvokeByIndex, . - _NS_InvokeByIndex
++
++
+diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_aarch64.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_aarch64.cpp
+new file mode 100644
+--- /dev/null
++++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_aarch64.cpp
+@@ -0,0 +1,219 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++#include "xptcprivate.h"
++#include "xptiprivate.h"
++
++#ifndef __AARCH64EL__
++#error "Only little endian compatibility was tested"
++#endif
++
++/*
++ * This is for AArch64 ABI
++ *
++ * When we're called, the "gp" registers are stored in gprData and
++ * the "fp" registers are stored in fprData. Each array has 8 regs
++ * but first reg in gprData is a placeholder for 'self'.
++ */
++extern "C" nsresult
++PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, uint64_t* args,
++                   uint64_t *gprData, double *fprData)
++{
++#define PARAM_BUFFER_COUNT        16
++#define PARAM_GPR_COUNT            8
++#define PARAM_FPR_COUNT            8
++
++    nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++    nsXPTCMiniVariant* dispatchParams = NULL;
++    const nsXPTMethodInfo* info;
++    nsresult result = NS_ERROR_FAILURE;
++
++    NS_ASSERTION(self,"no self");
++
++    self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info);
++    NS_ASSERTION(info,"no method info");
++
++    uint32_t paramCount = info->GetParamCount();
++
++    // setup variant array pointer
++    if (paramCount > PARAM_BUFFER_COUNT) {
++        dispatchParams = new nsXPTCMiniVariant[paramCount];
++    } else {
++        dispatchParams = paramBuffer;
++    }
++    NS_ASSERTION(dispatchParams,"no place for params");
++
++    uint64_t* ap = args;
++    uint32_t next_gpr = 1; // skip first arg which is 'self'
++    uint32_t next_fpr = 0;
++    for (uint32_t i = 0; i < paramCount; i++) {
++        const nsXPTParamInfo& param = info->GetParam(i);
++        const nsXPTType& type = param.GetType();
++        nsXPTCMiniVariant* dp = &dispatchParams[i];
++
++        if (param.IsOut() || !type.IsArithmetic()) {
++            if (next_gpr < PARAM_GPR_COUNT) {
++                dp->val.p = (void*)gprData[next_gpr++];
++            } else {
++                dp->val.p = (void*)*ap++;
++            }
++            continue;
++        }
++
++        switch (type) {
++            case nsXPTType::T_I8:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.i8  = (int8_t)gprData[next_gpr++];
++                } else {
++                    dp->val.i8  = (int8_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_I16:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.i16  = (int16_t)gprData[next_gpr++];
++                } else {
++                    dp->val.i16  = (int16_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_I32:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.i32  = (int32_t)gprData[next_gpr++];
++                } else {
++                    dp->val.i32  = (int32_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_I64:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.i64  = (int64_t)gprData[next_gpr++];
++                } else {
++                    dp->val.i64  = (int64_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_U8:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.u8  = (uint8_t)gprData[next_gpr++];
++                } else {
++                    dp->val.u8  = (uint8_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_U16:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.u16  = (uint16_t)gprData[next_gpr++];
++                } else {
++                    dp->val.u16  = (uint16_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_U32:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.u32  = (uint32_t)gprData[next_gpr++];
++                } else {
++                    dp->val.u32  = (uint32_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_U64:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.u64  = (uint64_t)gprData[next_gpr++];
++                } else {
++                    dp->val.u64  = (uint64_t)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_FLOAT:
++                if (next_fpr < PARAM_FPR_COUNT) {
++                    memcpy(&dp->val.f, &fprData[next_fpr++], sizeof(dp->val.f));
++                } else {
++                    memcpy(&dp->val.f, ap++, sizeof(dp->val.f));
++                }
++                break;
++
++            case nsXPTType::T_DOUBLE:
++                if (next_fpr < PARAM_FPR_COUNT) {
++                    memcpy(&dp->val.d, &fprData[next_fpr++], sizeof(dp->val.d));
++                } else {
++                    memcpy(&dp->val.d, ap++, sizeof(dp->val.d));
++                }
++                break;
++
++            case nsXPTType::T_BOOL:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.b  = (bool)gprData[next_gpr++];
++                } else {
++                    dp->val.b  = (bool)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_CHAR:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.c  = (char)gprData[next_gpr++];
++                } else {
++                    dp->val.c  = (char)*ap++;
++                }
++                break;
++
++            case nsXPTType::T_WCHAR:
++                if (next_gpr < PARAM_GPR_COUNT) {
++                    dp->val.wc  = (wchar_t)gprData[next_gpr++];
++                } else {
++                    dp->val.wc  = (wchar_t)*ap++;
++                }
++                break;
++
++            default:
++                NS_ASSERTION(0, "bad type");
++                break;
++        }
++    }
++
++    result = self->mOuter->CallMethod((uint16_t)methodIndex, info, dispatchParams);
++
++    if (dispatchParams != paramBuffer) {
++        delete [] dispatchParams;
++    }
++
++    return result;
++}
++
++// Load w17 with the constant 'n' and branch to SharedStub().
++# define STUB_ENTRY(n)                                                  \
++    __asm__ (                                                           \
++            ".section \".text\" \n\t"                                   \
++            ".align 2\n\t"                                              \
++            ".if "#n" < 10 \n\t"                                        \
++            ".globl  _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t"               \
++            ".hidden _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t"               \
++            ".type   _ZN14nsXPTCStubBase5Stub"#n"Ev,@function \n\n"     \
++            "_ZN14nsXPTCStubBase5Stub"#n"Ev: \n\t"                      \
++            ".elseif "#n" < 100 \n\t"                                   \
++            ".globl  _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t"               \
++            ".hidden _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t"               \
++            ".type   _ZN14nsXPTCStubBase6Stub"#n"Ev,@function \n\n"     \
++            "_ZN14nsXPTCStubBase6Stub"#n"Ev: \n\t"                      \
++            ".elseif "#n" < 1000 \n\t"                                  \
++            ".globl  _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t"               \
++            ".hidden _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t"               \
++            ".type   _ZN14nsXPTCStubBase7Stub"#n"Ev,@function \n\n"     \
++            "_ZN14nsXPTCStubBase7Stub"#n"Ev: \n\t"                      \
++            ".else  \n\t"                                               \
++            ".err   \"stub number "#n" >= 1000 not yet supported\"\n"   \
++            ".endif \n\t"                                               \
++            "mov    w17,#"#n" \n\t"                                     \
++            "b      SharedStub \n"                                      \
++);
++
++#define SENTINEL_ENTRY(n)                              \
++    nsresult nsXPTCStubBase::Sentinel##n()             \
++{                                                      \
++    NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++    return NS_ERROR_NOT_IMPLEMENTED;                   \
++}
++
++#include "xptcstubsdef.inc"
+diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_aarch64.s b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_aarch64.s
+new file mode 100644
+--- /dev/null
++++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_aarch64.s
+@@ -0,0 +1,39 @@
++# This Source Code Form is subject to the terms of the Mozilla Public
++# License, v. 2.0. If a copy of the MPL was not distributed with this
++# file, You can obtain one at http://mozilla.org/MPL/2.0/.
++
++            .set NGPREGS,8
++            .set NFPREGS,8
++
++            .section ".text"
++            .globl SharedStub
++            .hidden SharedStub
++            .type  SharedStub,@function
++SharedStub:
++            stp         x29, x30, [sp,#-16]!
++            mov         x29, sp
++
++            sub         sp, sp, #8*(NGPREGS+NFPREGS)
++            stp         x0, x1, [sp, #64+(0*8)]
++            stp         x2, x3, [sp, #64+(2*8)]
++            stp         x4, x5, [sp, #64+(4*8)]
++            stp         x6, x7, [sp, #64+(6*8)]
++            stp         d0, d1, [sp, #(0*8)]
++            stp         d2, d3, [sp, #(2*8)]
++            stp         d4, d5, [sp, #(4*8)]
++            stp         d6, d7, [sp, #(6*8)]
++
++            # methodIndex passed from stub
++            mov         w1, w17
++
++            add         x2, sp, #16+(8*(NGPREGS+NFPREGS))
++            add         x3, sp, #8*NFPREGS
++            add         x4, sp, #0
++
++            bl          PrepareAndDispatch
++
++            add         sp, sp, #8*(NGPREGS+NFPREGS)
++            ldp         x29, x30, [sp],#16
++            ret
++
++            .size SharedStub, . - SharedStub
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963027.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,29 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1392218661 18000
+# Node ID 38fca44b6b86e2f12535900e2084f0378217570f
+# Parent  8858624d813a6200b059590c146cf774fc16ff38
+Bug 963027 - AArch64 support for WebRTC. r=derf
+
+Index: mozilla/media/webrtc/trunk/webrtc/typedefs.h
+===================================================================
+--- mozilla.orig/media/webrtc/trunk/webrtc/typedefs.h
++++ mozilla/media/webrtc/trunk/webrtc/typedefs.h
+@@ -113,6 +113,16 @@
+ #define WEBRTC_ARCH_32_BITS 1
+ #define WEBRTC_ARCH_BIG_ENDIAN
+ #define WEBRTC_BIG_ENDIAN
++#elif defined(__aarch64__)
++#define WEBRTC_ARCH_AARCH64 1
++#define WEBRTC_ARCH_64_BITS 1
++#if defined(__AARCH64EL__)
++#define WEBRTC_ARCH_LITTLE_ENDIAN
++#define WEBRTC_LITTLE_ENDIAN
++#elif defined(__AARCH64EB__)
++#define WEBRTC_ARCH_BIG_ENDIAN
++#define WEBRTC_BIG_ENDIAN
++#endif
+ #elif defined(__alpha__)
+ #define WEBRTC_ARCH_ALPHA 1
+ #define WEBRTC_ARCH_64_BITS 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963028.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,54 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1390512871 18000
+# Node ID feaf8bd56a82749f5d0d8869b7c0a1c01e300362
+# Parent  2a082f03cd1d64c8bfff9641284f2dc23617f806
+Bug 963028 - AArch64 support for jemalloc. r=froydnj
+
+diff --git a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
+--- a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
++++ b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
+@@ -283,16 +283,19 @@ static const bool config_ivsalloc =
+ #    define LG_QUANTUM		4
+ #  endif
+ #  ifdef __SH4__
+ #    define LG_QUANTUM		4
+ #  endif
+ #  ifdef __tile__
+ #    define LG_QUANTUM		4
+ #  endif
++#  ifdef __aarch64__
++#    define LG_QUANTUM		4
++#  endif
+ #  ifndef LG_QUANTUM
+ #    error "No LG_QUANTUM definition for architecture; specify via CPPFLAGS"
+ #  endif
+ #endif
+ 
+ #define	QUANTUM			((size_t)(1U << LG_QUANTUM))
+ #define	QUANTUM_MASK		(QUANTUM - 1)
+ 
+diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
+--- a/memory/mozjemalloc/jemalloc.c
++++ b/memory/mozjemalloc/jemalloc.c
+@@ -1097,17 +1097,17 @@ static unsigned		ncpus;
+ /*
+  * VM page size. It must divide the runtime CPU page size or the code
+  * will abort.
+  * Platform specific page size conditions copied from js/public/HeapAPI.h
+  */
+ #if (defined(SOLARIS) || defined(__FreeBSD__)) && \
+     (defined(__sparc) || defined(__sparcv9) || defined(__ia64))
+ #define pagesize_2pow			((size_t) 13)
+-#elif defined(__powerpc64__)
++#elif defined(__powerpc64__) || defined(__aarch64__)
+ #define pagesize_2pow			((size_t) 16)
+ #else
+ #define pagesize_2pow			((size_t) 12)
+ #endif
+ #define pagesize			((size_t) 1 << pagesize_2pow)
+ #define pagesize_mask			(pagesize - 1)
+ 
+ /* Various quantum-related settings. */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963029.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,43 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1390512871 18000
+# Node ID 89e06a821ad5986035de99c8bc1f9d7a99541b2a
+# Parent  feaf8bd56a82749f5d0d8869b7c0a1c01e300362
+Bug 963029 - AArch64 support for MFBT. r=froydnj
+
+Index: mozilla/mfbt/Endian.h
+===================================================================
+--- mozilla.orig/mfbt/Endian.h
++++ mozilla/mfbt/Endian.h
+@@ -121,14 +121,14 @@
+ #elif defined(__sparc) || defined(__sparc__) || \
+       defined(_POWER) || defined(__hppa) || \
+       defined(_MIPSEB) || defined(__ARMEB__) || \
+-      defined(__s390__) || \
++      defined(__s390__) || defined(__AARCH64EB__) || \
+       (defined(__sh__) && defined(__LITTLE_ENDIAN__)) || \
+       (defined(__ia64) && defined(__BIG_ENDIAN__))
+ #  define MOZ_BIG_ENDIAN 1
+ #elif defined(__i386) || defined(__i386__) || \
+       defined(__x86_64) || defined(__x86_64__) || \
+       defined(_MIPSEL) || defined(__ARMEL__) || \
+-      defined(__alpha__) || \
++      defined(__alpha__) || defined(__AARCH64EL__) ||  \
+       (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
+       (defined(__ia64) && !defined(__BIG_ENDIAN__))
+ #  define MOZ_LITTLE_ENDIAN 1
+Index: mozilla/mfbt/tests/TestPoisonArea.cpp
+===================================================================
+--- mozilla.orig/mfbt/tests/TestPoisonArea.cpp
++++ mozilla/mfbt/tests/TestPoisonArea.cpp
+@@ -161,6 +161,9 @@
+ #elif defined __s390__
+ #define RETURN_INSTR 0x07fe0000 /* br %r14 */
+ 
++#elif defined __aarch64__
++#define RETURN_INSTR 0xd65f03c0 /* ret */
++
+ #elif defined __ia64
+ struct ia64_instr { uint32_t i[4]; };
+ static const ia64_instr _return_instr =
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963030.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,32 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1391033256 18000
+# Node ID 8a76622ce10d83a9dd070b968367efd8e73dc7cc
+# Parent  d890e603d751c465f2a0e2d2221e033b32afe4a9
+Bug 963030 - AArch64 support for IPC. r=bsmedberg
+
+diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h
+--- a/ipc/chromium/src/build/build_config.h
++++ b/ipc/chromium/src/build/build_config.h
+@@ -97,16 +97,19 @@
+ #define ARCH_CPU_S390X 1
+ #define ARCH_CPU_64_BITS 1
+ #elif defined(__s390__)
+ #define ARCH_CPU_S390 1
+ #define ARCH_CPU_32_BITS 1
+ #elif defined(__alpha__)
+ #define ARCH_CPU_ALPHA 1
+ #define ARCH_CPU_64_BITS 1
++#elif defined(__aarch64__)
++#define ARCH_CPU_AARCH64 1
++#define ARCH_CPU_64_BITS 1
+ #else
+ #error Please add support for your architecture in build/build_config.h
+ #endif
+ 
+ // Type detection for wchar_t.
+ #if defined(OS_WIN)
+ #define WCHAR_T_IS_UTF16
+ #else
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-aarch64-bmo-963031.patch	Sun Apr 13 16:54:09 2014 +0200
@@ -0,0 +1,30 @@
+
+# HG changeset patch
+# User Marcin Juszkiewicz <mjuszkiewicz@redhat.com>
+# Date 1390828707 18000
+# Node ID 01c406c513473eef5c98940ba8d3040c456044d8
+# Parent  b781647898f4a82e6cdeeb907ebbc402545698db
+Bug 963031 - AArch support for Graphics. r=doublec
+
+diff --git a/gfx/ycbcr/chromium_types.h b/gfx/ycbcr/chromium_types.h
+--- a/gfx/ycbcr/chromium_types.h
++++ b/gfx/ycbcr/chromium_types.h
+@@ -41,13 +41,17 @@ typedef uint32_t uint32;
+ #elif defined(__sparc)
+ #define ARCH_CPU_SPARC_FAMILY 1
+ #define ARCH_CPU_SPARC 1
+ #define ARCH_CPU_32_BITS 1
+ #elif defined(__sparcv9)
+ #define ARCH_CPU_SPARC_FAMILY 1
+ #define ARCH_CPU_SPARC 1
+ #define ARCH_CPU_64_BITS 1
++#elif defined(__aarch64__)
++#define ARCH_CPU_AARCH64_FAMILY 1
++#define ARCH_CPU_AARCH64 1
++#define ARCH_CPU_64_BITS 1
+ #else
+ #warning Please add support for your architecture in chromium_types.h
+ #endif
+ 
+ #endif // GFX_CHROMIUMTYPES_H
+
--- a/series	Wed Apr 09 08:22:02 2014 +0200
+++ b/series	Sun Apr 13 16:54:09 2014 +0200
@@ -24,6 +24,16 @@
 mozilla-ppc64le-webrtc.patch
 mozilla-ppc64le-xpcom.patch
 mozilla-ppc64-xpcom.patch
+mozilla-aarch64-bmo-963031.patch
+mozilla-aarch64-bmo-963024.patch
+mozilla-aarch64-bmo-963023.patch
+mozilla-aarch64-bmo-963029.patch
+mozilla-aarch64-bmo-963028.patch
+mozilla-aarch64-bmo-963027.patch
+mozilla-aarch64-bmo-963030.patch
+mozilla-aarch64-bmo-962488.patch
+mozilla-aarch64-bmo-810631.patch
+mozilla-aarch64-599882cfb998.diff
 
 # Firefox patches
 firefox-browser-css.patch