summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2018-02-22 14:51:52 -0500
committerJean-Marc Valin <jmvalin@jmvalin.ca>2018-02-22 15:51:25 -0500
commit76d966f4361f5d7417ca40481ca53ca6fe6d4cb5 (patch)
treeaaab64a8ff1006bd4e45e0f12a15a09b26979777 /configure.ac
parente3e1f89029a997e1b58f03c38f43352a85861c6a (diff)
downloadopus-76d966f4361f5d7417ca40481ca53ca6fe6d4cb5.tar.gz
Enable -fstack-protector-strong by default on x86
The size overhead seems to be about 1% and the speed overhead is "in the noise" (<2%). The automake code is copied from opus-tools
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac31
1 files changed, 31 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index fc80275a..cd5cc899 100644
--- a/configure.ac
+++ b/configure.ac
@@ -822,6 +822,37 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
CFLAGS="$saved_CFLAGS"
])
+on_x86=no
+case "$host_cpu" in
+i[[3456]]86 | x86_64)
+ on_x86=yes
+ ;;
+esac
+
+dnl Enable stack-protector-all only on x86 where it's well supported.
+dnl on some platforms it causes crashes. Hopefully the OS's default's
+dnl include this on platforms that work but have been missed here.
+AC_ARG_ENABLE([stack-protector],
+ [AS_HELP_STRING([--disable-stack-protector],[Disable compiler stack hardening])],,
+ [
+ AS_IF([test "$ac_cv_c_compiler_gnu" = "yes" && test "$on_x86" = "yes"],
+ [enable_stack_protector=yes],[enable_stack_protector=no])
+ ])
+
+AS_IF([test "$enable_stack_protector" = "yes"],
+ [
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fstack-protector-strong"
+ AC_MSG_CHECKING([if ${CC} supports -fstack-protector-strong])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[[char foo;]])],
+ [ AC_MSG_RESULT([yes]) ],
+ [
+ AC_MSG_RESULT([no])
+ enable_stack_protector=no
+ CFLAGS="$saved_CFLAGS"
+ ])
+ ])
+
CFLAGS="$CFLAGS -W"
warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"