summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2019-01-10 12:47:01 +1000
committerAllan McRae <allan@archlinux.org>2019-01-10 14:14:04 +1000
commit9b2a90cfb1910b5092ffec3375177229101323e4 (patch)
tree677a31308c45343d17caa23cf92d132902f5a7b8
parent9b637cc27aba561e5270862a1a3eb515e4f3f744 (diff)
downloadpacman-9b2a90cfb1910b5092ffec3375177229101323e4.tar.xz
Add -fstack-clash-protection to CFLAGS in debug builds if available
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--configure.ac1
-rw-r--r--m4/acinclude.m419
2 files changed, 20 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index ba54c2dd..6f336022 100644
--- a/configure.ac
+++ b/configure.ac
@@ -443,6 +443,7 @@ if test "x$debug" = "xyes" ; then
# Check for -fstack-protector availability
GCC_STACK_PROTECT_LIB
GCC_STACK_PROTECT_CC
+ GCC_STACK_CLASH_PROTECTION
GCC_FORTIFY_SOURCE_CC
WARNING_CFLAGS="-g -Wall -Werror"
else
diff --git a/m4/acinclude.m4 b/m4/acinclude.m4
index 15bb31e8..845c8286 100644
--- a/m4/acinclude.m4
+++ b/m4/acinclude.m4
@@ -38,6 +38,25 @@ AC_DEFUN([GCC_STACK_PROTECT_CC],[
fi
])
+dnl GCC_STACK_CLASH_PROTECTION
+dnl check -fstack-clash-protection with the C compiler, if it exists then
+dnl updates CFLAGS
+AC_DEFUN([GCC_STACK_CLASH_PROTECTION],[
+ AC_LANG_ASSERT(C)
+ if test "X$CC" != "X"; then
+ AC_CACHE_CHECK([whether ${CC} accepts -fstack-clash-protection],
+ scp_cv_cc,
+ [scp_old_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -fstack-clash-protection"
+ AC_TRY_COMPILE(,, scp_cv_cc=yes, scp_cv_cc=no)
+ CFLAGS="$scp_old_cflags"
+ ])
+ if test $scp_cv_cc = yes; then
+ CFLAGS="$CFLAGS -fstack-clash-protection"
+ fi
+ fi
+])
+
dnl GCC_FORTIFY_SOURCE_CC
dnl checks -D_FORTIFY_SOURCE with the C compiler, if it exists then updates
dnl CPPFLAGS