aboutsummaryrefslogtreecommitdiff
path: root/gcc/configure.ac
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-07-02 10:52:21 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-07-02 10:52:21 +0200
commit77008252819720c987f11b3dade670e2b3ba09b8 (patch)
tree1cb854702400de0149fb900c82b137e5603e222b /gcc/configure.ac
parentf60d648137b2d2cda1c598996b9598d559715117 (diff)
downloadgcc-77008252819720c987f11b3dade670e2b3ba09b8.zip
gcc-77008252819720c987f11b3dade670e2b3ba09b8.tar.gz
gcc-77008252819720c987f11b3dade670e2b3ba09b8.tar.bz2
Makefile.def (target_modules): Add libssp.
* Makefile.def (target_modules): Add libssp. * configure.in (target_libraries): Add target-libssp. * configure: Rebuilt. * Makefile.in: Rebuilt. gcc/ * gcc.c (LINK_SSP_SPEC): Define. (link_ssp_spec): New variable. (LINK_COMMAND_SPEC): Add %(link_ssp). (static_specs): Add link_ssp_spec. * configure.ac (TARGET_LIBC_PROVIDES_SSP): New test. * configure: Rebuilt. * config.in: Rebuilt. * config/rs6000/linux.h (TARGET_THREAD_SSP_OFFSET): Define. * config/rs6000/linux64.h (TARGET_THREAD_SSP_OFFSET): Likewise. * config/i386/linux.h (TARGET_THREAD_SSP_OFFSET): Likewise. * config/i386/linux64.h (TARGET_THREAD_SSP_OFFSET): Likewise. * config/rs6000/rs6000.md (stack_protect_set, stack_protect_test): If TARGET_THREAD_SSP_OFFSET is defined, use -0x7010(13) resp. -0x7008(2) instead of reading __stack_chk_guard variable. * config/i386/i386.md (UNSPEC_SP_SET, UNSPEC_SP_TEST): Change number. (UNSPEC_SP_TLS_SET, UNSPEC_SP_TLS_TEST): New constants. (stack_protect_set, stack_protect_test): Use *_tls* patterns if TARGET_THREAD_SSP_OFFSET is defined. (stack_tls_protect_set_si, stack_tls_protect_set_di, stack_tls_protect_test_si, stack_tls_protect_test_di): New insns. Revert: 2005-06-27 Richard Henderson <rth@redhat.com> * libgcc-std.ver (GCC_4.1.0): New. * libgcc.h (__stack_chk_guard): Declare. (__stack_chk_fail, __stack_chk_fail_local): Declare. * libgcc2.c (L_stack_chk, L_stack_chk_local): New. * mklibgcc.in (lib2funcs): Add them. From-SVN: r101531
Diffstat (limited to 'gcc/configure.ac')
-rw-r--r--gcc/configure.ac39
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/configure.ac b/gcc/configure.ac
index f93d8a3..945162c 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2972,6 +2972,45 @@ if test x$with_sysroot = x && test x$host = x$target \
[Define to PREFIX/include if cpp should also search that directory.])
fi
+# Test for stack protector support in target C library.
+case "$target" in
+ *-*-linux*)
+ AC_CACHE_CHECK(__stack_chk_fail in target GNU C library,
+ gcc_cv_libc_provides_ssp,
+ [gcc_cv_libc_provides_ssp=no
+ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+ if test "x$with_sysroot" = x; then
+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_sysroot" = xyes; then
+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
+ else
+ glibc_header_dir="${with_sysroot}/usr/include"
+ fi
+ else
+ glibc_header_dir=/usr/include
+ fi
+ # glibc 2.4 and later provides __stack_chk_fail and
+ # either __stack_chk_guard, or TLS access to stack guard canary.
+ if test -f $glibc_header_dir/features.h \
+ && $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GNU_LIBRARY__[ ]+([1-9][0-9]|[6-9])' \
+ $glibc_header_dir/features.h > /dev/null; then
+ if $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC__[ ]+([1-9][0-9]|[3-9])' \
+ $glibc_header_dir/features.h > /dev/null; then
+ gcc_cv_libc_provides_ssp=yes
+ elif $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC__[ ]+2' \
+ $glibc_header_dir/features.h > /dev/null \
+ && $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC_MINOR__[ ]+([1-9][0-9]|[4-9])' \
+ $glibc_header_dir/features.h > /dev/null; then
+ gcc_cv_libc_provides_ssp=yes
+ fi
+ fi]) ;;
+ *) gcc_cv_libc_provides_ssp=no ;;
+esac
+if test x$gcc_cv_libc_provides_ssp = xyes; then
+ AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
+ [Define if your target C library provides stack protector support])
+fi
+
# Find out what GC implementation we want, or may, use.
AC_ARG_WITH(gc,
[ --with-gc={page,zone} choose the garbage collection mechanism to use