+2018-10-01 Tamar Christina <tamar.christina@arm.com>
+
+ PR target/86486
+ * configure.ac: Add stack-clash-protection-guard-size.
+ * doc/install.texi: Document it.
+ * config.in (DEFAULT_STK_CLASH_GUARD_SIZE): New.
+ * params.def: Update comment for guard-size.
+ (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
+ PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL): Update description.
+ * configure: Regenerate.
+
2018-10-01 Tamar Christina <tamar.christina@arm.com>
PR target/86486
#endif
+/* Define to larger than zero set to the default stack clash protector size as
+ a power of two in bytes. */
+#ifndef USED_FOR_TARGET
+#undef DEFAULT_STK_CLASH_GUARD_SIZE
+#endif
+
+
/* Define if you want to use __cxa_atexit, rather than atexit, to register C++
destructors for local statics and global objects. This is essential for
fully standards-compliant handling of destructors, but requires
with_stabs
enable_multilib
enable_multiarch
+with_stack_clash_protection_guard_size
enable___cxa_atexit
enable_decimal_float
enable_fixed_point
--with-gnu-as arrange to work with GNU as
--with-as arrange to use the specified as (full pathname)
--with-stabs arrange to use stabs instead of host debug format
+ --with-stack-clash-protection-guard-size=size
+ Set the default stack clash protection guard size
+ for specific targets as a power of two in bytes.
--with-dwarf2 force the default debug format to be DWARF 2
--with-specs=SPECS add SPECS to driver command-line processing
--with-pkgversion=PKG Use PKG in the version string in place of "GCC"
+# default stack clash protection guard size as power of twos in bytes.
+# Please keep these in sync with params.def.
+stk_clash_min=12
+stk_clash_max=30
+
+# Keep the default value when the option is not used to 0, this allows us to
+# distinguish between the cases where the user specifially set a value via
+# configure and when the normal default value is used.
+
+# Check whether --with-stack-clash-protection-guard-size was given.
+if test "${with_stack_clash_protection_guard_size+set}" = set; then :
+ withval=$with_stack_clash_protection_guard_size; DEFAULT_STK_CLASH_GUARD_SIZE="$with_stack_clash_protection_guard_size"
+else
+ DEFAULT_STK_CLASH_GUARD_SIZE=0
+fi
+
+if test $DEFAULT_STK_CLASH_GUARD_SIZE -ne 0 \
+ && (test $DEFAULT_STK_CLASH_GUARD_SIZE -lt $stk_clash_min \
+ || test $DEFAULT_STK_CLASH_GUARD_SIZE -gt $stk_clash_max); then
+ as_fn_error "Invalid value $DEFAULT_STK_CLASH_GUARD_SIZE for --with-stack-clash-protection-guard-size. Must be between $stk_clash_min and $stk_clash_max." "$LINENO" 5
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_STK_CLASH_GUARD_SIZE $DEFAULT_STK_CLASH_GUARD_SIZE
+_ACEOF
+
+
# Enable __cxa_atexit for C++.
# Check whether --enable-__cxa_atexit was given.
if test "${enable___cxa_atexit+set}" = set; then :
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 18466 "configure"
+#line 18498 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 18572 "configure"
+#line 18604 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
AC_SUBST(with_cpu)
AC_SUBST(with_float)
+# default stack clash protection guard size as power of twos in bytes.
+# Please keep these in sync with params.def.
+stk_clash_min=12
+stk_clash_max=30
+
+# Keep the default value when the option is not used to 0, this allows us to
+# distinguish between the cases where the user specifially set a value via
+# configure and when the normal default value is used.
+AC_ARG_WITH(stack-clash-protection-guard-size,
+[AS_HELP_STRING([--with-stack-clash-protection-guard-size=size],
+[Set the default stack clash protection guard size for specific targets as a power of two in bytes.])],
+[DEFAULT_STK_CLASH_GUARD_SIZE="$with_stack_clash_protection_guard_size"], [DEFAULT_STK_CLASH_GUARD_SIZE=0])
+if test $DEFAULT_STK_CLASH_GUARD_SIZE -ne 0 \
+ && (test $DEFAULT_STK_CLASH_GUARD_SIZE -lt $stk_clash_min \
+ || test $DEFAULT_STK_CLASH_GUARD_SIZE -gt $stk_clash_max); then
+ AC_MSG_ERROR(m4_normalize([
+ Invalid value $DEFAULT_STK_CLASH_GUARD_SIZE for --with-stack-clash-protection-guard-size. \
+ Must be between $stk_clash_min and $stk_clash_max.]))
+fi
+
+AC_DEFINE_UNQUOTED(DEFAULT_STK_CLASH_GUARD_SIZE, $DEFAULT_STK_CLASH_GUARD_SIZE,
+ [Define to larger than zero set the default stack clash protector size.])
+
# Enable __cxa_atexit for C++.
AC_ARG_ENABLE(__cxa_atexit,
[AS_HELP_STRING([--enable-__cxa_atexit], [enable __cxa_atexit for C++])],
SVR4-based MIPS ABIs and require support from GNU binutils
and the runtime C library.
+@item --with-stack-clash-protection-guard-size=@var{size}
+On certain targets this option sets the default stack clash protection guard
+size as a power of two in bytes. On AArch64 @var{size} is required to be either
+12 (4KB) or 16 (64KB).
+
@item --enable-__cxa_atexit
Define if you want to use __cxa_atexit, rather than atexit, to
register C++ destructors for local statics and global objects.
"Maximal stack frame growth due to inlining (in percent).",
1000, 0, 0)
+/* Keep these up to date with those in configure.ac. */
DEFPARAM(PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
"stack-clash-protection-guard-size",
- "Size of the stack guard expressed as a power of two.",
+ "Size of the stack guard expressed as a power of two in bytes.",
12, 12, 30)
DEFPARAM(PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL,
"stack-clash-protection-probe-interval",
- "Interval in which to probe the stack expressed as a power of two.",
+ "Interval in which to probe the stack expressed as a power of two in bytes.",
12, 10, 16)
/* The GCSE optimization will be disabled if it would require