]> andersk Git - openssh.git/commitdiff
- (dtucker) [configure.ac] It turns out gcc's -fstack-protector-all doesn't
authordtucker <dtucker>
Sun, 9 Mar 2008 00:34:23 +0000 (00:34 +0000)
committerdtucker <dtucker>
Sun, 9 Mar 2008 00:34:23 +0000 (00:34 +0000)
   always work for all platforms and versions, so test what we can and
   add a configure flag to turn it of if needed.  ok djm@

ChangeLog
configure.ac

index 12578545cc61a7eb8c529909162f76afb19ca2be..549ef8029e94832b6dc732999d7fa9e5710de65c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+20080309
+ - (dtucker) [configure.ac] It turns out gcc's -fstack-protector-all doesn't
+   always work for all platforms and versions, so test what we can and
+   add a configure flag to turn it of if needed.  ok djm@
+
 20080307
  - (djm) OpenBSD CVS Sync
    - jmc@cvs.openbsd.org 2008/02/11 07:58:28
index b2b764f2ea35c0cc5cabe9065d1eac51f47e1758..45ef53c46c04daceb87e01b5771d77cf5a6ae8fc 100644 (file)
@@ -90,6 +90,13 @@ AC_C_INLINE
 
 AC_CHECK_DECL(LLONG_MAX, have_llong_max=1, , [#include <limits.h>])
 
+use_stack_protector=1
+AC_ARG_WITH(stackprotect,
+    [  --without-stackprotect Don't use compiler's stack protection], [
+    if test "x$withval" = "xno"; then
+       use_stack_protector=0
+    fi ])
+
 if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
        CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wuninitialized"
        GCC_VER=`$CC -v 2>&1 | $AWK '/gcc version /{print $3}'`
@@ -105,18 +112,36 @@ if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
                *) ;;
        esac
 
-       AC_MSG_CHECKING(if $CC understands -fstack-protector-all)
-       saved_CFLAGS="$CFLAGS"
-       saved_LDFLAGS="$LDFLAGS"
-       CFLAGS="$CFLAGS -fstack-protector-all"
-       LDFLAGS="$LDFLAGS -fstack-protector-all"
-       AC_TRY_LINK([], [ int main(void){return 0;} ],
-           [ AC_MSG_RESULT(yes) ],
-           [ AC_MSG_RESULT(no)
-             CFLAGS="$saved_CFLAGS"
-             LDFLAGS="$saved_LDFLAGS"
-            ]
-       )
+       # -fstack-protector-all doesn't always work for some GCC versions
+       # and/or platforms, so we test if we can.
+       if test "x$use_stack_protector" = "x1"; then
+           for t in -fstack-protector-all -fstack-protector; do
+               AC_MSG_CHECKING(if $CC understands $t)
+               saved_CFLAGS="$CFLAGS"
+               saved_LDFLAGS="$LDFLAGS"
+               CFLAGS="$CFLAGS $t"
+               LDFLAGS="$LDFLAGS $t"
+               AC_TRY_LINK([], [ int main(void){return 0;} ],
+                   [ AC_MSG_RESULT(yes)
+                     AC_MSG_CHECKING(if $t works)
+                     AC_RUN_IFELSE(
+                       [AC_LANG_SOURCE([
+#include <stdlib.h>
+int main(void){exit(0);}
+                       ])],
+                       [ AC_MSG_RESULT(yes)
+                         break ],
+                       [ AC_MSG_RESULT(no) ],
+                       [ AC_MSG_WARN([cross compiling: cannot test])
+                         break ]
+                   )
+                   ],
+                   [ AC_MSG_RESULT(no) ]
+               )
+               CFLAGS="$saved_CFLAGS"
+               LDFLAGS="$saved_LDFLAGS"
+           done
+       fi
 
        if test -z "$have_llong_max"; then
                # retry LLONG_MAX with -std=gnu99, needed on some Linuxes
This page took 0.111894 seconds and 5 git commands to generate.