Hi All, Here's an updated patch with documentation.
Ok for trunk? Thanks, Tamar gcc/ 2018-07-24 Tamar Christina <tamar.christ...@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. * configure: Regenerate. The 07/24/2018 11:34, Joseph Myers wrote: > On Tue, 24 Jul 2018, tamar.christ...@arm.com wrote: > > > This patch defines a configure option to allow the setting of the default > > guard size via configure flags when building the target. > > If you add a configure option, you must also add documentation for it in > install.texi. > > -- > Joseph S. Myers > jos...@codesourcery.com --
diff --git a/gcc/config.in b/gcc/config.in index 2856e72d627df537a301a6c7ab6b5bbb75f6b43f..e853adc9aed366fe7bbc0f598e9f7137d68d7c02 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -55,6 +55,12 @@ #endif +/* Define to larger than zero set to the default stack clash protector size. */ +#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 diff --git a/gcc/configure b/gcc/configure index 60d373982fd38fe51c285e2b02941754d1b833d6..513a8eada59af8314732d744b673e807829bad77 100755 --- a/gcc/configure +++ b/gcc/configure @@ -905,6 +905,7 @@ enable_valgrind_annotations with_stabs enable_multilib enable_multiarch +with_stack_clash_protection_guard_size enable___cxa_atexit enable_decimal_float enable_fixed_point @@ -1724,6 +1725,9 @@ Optional Packages: --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. --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" @@ -7436,6 +7440,35 @@ $as_echo "$enable_multiarch$ma_msg_suffix" >&6; } +# default stack clash protection guard size +# Please keep these in sync with params.def. +stk_clash_min=12 +stk_clash_max=30 +stk_clash_default=12 + +# 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 : @@ -18448,7 +18481,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18451 "configure" +#line 18484 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18554,7 +18587,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18557 "configure" +#line 18590 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index 010ecd2ccf609ded1f4d2849a2acc13aba43b55b..e839445c1aea7dc9c5a5ee8dab8191eae5298bc2 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -811,6 +811,30 @@ AC_MSG_RESULT($enable_multiarch$ma_msg_suffix) AC_SUBST(with_cpu) AC_SUBST(with_float) +# default stack clash protection guard size +# Please keep these in sync with params.def. +stk_clash_min=12 +stk_clash_max=30 +stk_clash_default=12 + +# 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.])], +[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++])], diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 7c5cdc762d3ecca2b37c1ebc8caf99d22ff351b9..c4590110de500a04d6ed6fdb7e69c2a69a381537 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1410,6 +1410,11 @@ These features are extensions to the traditional 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. 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. diff --git a/gcc/params.def b/gcc/params.def index a3906c268814bdc3a813416a60b9f666d1568f0a..b968a3fdbb7aef5074a15c3da8613679825aba2f 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -213,6 +213,7 @@ DEFPARAM(PARAM_STACK_FRAME_GROWTH, "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.",