Commit 76d19d004e36e99d261ee78261e2f52cea5e4ab1

Anthony Green 2014-03-14T16:54:31

Ensure the linker supports @unwind sections in libffi.

diff --git a/ChangeLog b/ChangeLog
index 138b5af..1b3c6e4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,16 @@
+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
diff --git a/Makefile.in b/Makefile.in
index 70d9bb7..08f6620 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -646,39 +646,39 @@ info_TEXINFOS = doc/libffi.texi
 # 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)
diff --git a/configure b/configure
index 06268ec..eb7262b 100755
--- a/configure
+++ b/configure
@@ -13584,7 +13584,7 @@ case "$host" in
   mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*)
 	TARGET=MIPS; TARGETDIR=mips
 	;;
-  mips*-*-linux* | mips*-*-openbsd*)
+  mips*-*linux* | mips*-*-openbsd*)
 	# Support 128-bit long double for NewABI.
 	HAVE_LONG_DOUBLE='defined(__mips64)'
 	TARGET=MIPS; TARGETDIR=mips
@@ -14884,16 +14884,32 @@ fi
 
 
 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 ${libffi_cv_as_x86_64_unwind_section_type+:} false; 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
diff --git a/configure.ac b/configure.ac
index bf003fa..90a11f6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -460,12 +460,28 @@ 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([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