[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[patches] Use a compile-time test for -fstack-protector



Hello!

Currently a link-time test is done for checking whether -fstack-protector
works.  In general, this is correct as using this compiler flag might
indeed involve link-time adjustments: in the case that the host's libc
doesn't provide the __stack_chk_fail etc. symbols, but they are instead
provided by GCC's own libssp.

However, in this specific case that glibc itself is being built, we know
that the glibc-provided programs will always be linked against the
then-built libc, so glibc-internal definitions of these SSP symbols will
be used (cf. csu/libc-start.c:__stack_chk_guard,
debug/stack_chk_fail*.c).  So, I'd say that in fact this link-time test
is wrong, as we're no going to link against what we're testing here.

As for testing -fstack-protector being accepted by the compiler driver,
indeed a compile-time test is enough.  (And there's no need to create a
temporary .c, and .o file, by the way.)

Testing: still the same content (especially have-ssp = yes) of
configure-generated files on x86_64-unknown-linux-gnu, GCC 4.3.2;
likewise (have-ssp = no) on hppa2.0-unknown-linux-gnu, GCC 4.4.1;
functionality now detected correctly when the target libc is not yet
present (have-ssp = no changed to yes) on arm-eglibc-linux-gnueabi, GCC
4.3.3.


2009-11-08  Thomas Schwinge  <thomas@xxxxxxxxxxxxxxxx>

	* configure.in (libc_cv_ssp): Make this a compile-time check.  Avoid
	creating temporary files.

Index: configure.in
===================================================================
--- configure.in	(revision 9207)
+++ configure.in	(working copy)
@@ -1741,18 +1741,13 @@
 AC_SUBST(fno_unit_at_a_time)
 
 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
-cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Werror -fstack-protector
-			    -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
+			    -o /dev/null -c -x c /dev/null 1>&AS_MESSAGE_LOG_FD])
 then
   libc_cv_ssp=yes
 else
   libc_cv_ssp=no
-fi
-rm -f conftest*])
+fi])
 AC_SUBST(libc_cv_ssp)
 
 AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl


Regards,
 Thomas

Attachment: pgpB9jCiE8PXr.pgp
Description: PGP signature