Set -fno-stack-protector in extra-gcc-opts; fixes #4206
authorIan Lynagh <igloo@earth.li>
Wed, 28 Jul 2010 16:19:57 +0000 (16:19 +0000)
committerIan Lynagh <igloo@earth.li>
Wed, 28 Jul 2010 16:19:57 +0000 (16:19 +0000)
We were using it only when building the RTS, and only on certain
platforms. However, some versions of OS X need the flag, while others
don't support it, so we now test for it properly.

aclocal.m4
rts/ghc.mk

index 53bd165..5358cc2 100644 (file)
@@ -962,6 +962,9 @@ AC_SUBST([GhcPkgCmd])
 # reordering things in the module and confusing the manger and/or splitter.
 # (eg. Trac #1427)
 #
+# If gcc knows about the stack protector, turn it off.
+# Otherwise the stack-smash handler gets triggered.
+#
 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
 [AC_REQUIRE([FP_HAVE_GCC])
 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
@@ -987,6 +990,12 @@ AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_
       [])
   ;;
  esac
+ echo 'int main(void) {return 0;}' > conftest.c
+ if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
+ then
+     fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-stack-protector"
+ fi
+ rm conftest.c conftest.o
 ])
 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
 ])
index 8b6ecb1..ca68b55 100644 (file)
@@ -252,11 +252,6 @@ rts_CC_OPTS += $(MACOSX_DEPLOYMENT_CC_OPTS)
 rts_HC_OPTS += $(addprefix -optc, $(MACOSX_DEPLOYMENT_CC_OPTS))
 rts_LD_OPTS += $(addprefix -optl, $(MACOSX_DEPLOYMENT_LD_OPTS))
 
-# Otherwise the stack-smash handler gets triggered.
-ifneq "$(findstring $(TargetOS_CPP), darwin openbsd)" ""
-rts_HC_OPTS += -optc-fno-stack-protector
-endif
-
 # We *want* type-checking of hand-written cmm.
 rts_HC_OPTS += -dcmm-lint