On Tue, Jul 24, 2018 at 05:27:05AM -0500, Tamar Christina wrote:
> Hi All,
> 
> This patch is a cascade update from having to re-spin the configure patch 
> (no# 4 in the series).
> 
> This patch enforces that the default guard size for stack-clash protection for
> AArch64 be 64KB unless the user has overriden it via configure in which case
> the user value is used as long as that value is within the valid range.
> 
> It also does some basic validation to ensure that the guard size is only 4KB 
> or
> 64KB and also enforces that for aarch64 the stack-clash probing interval is
> equal to the guard size.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
> Target was tested with stack clash on and off by default.
> 
> Ok for trunk?

This is OK with the style changes below.

Thanks,
James

> gcc/
> 2018-07-24  Tamar Christina  <tamar.christ...@arm.com>
> 
>       PR target/86486
>       * config/aarch64/aarch64.c (aarch64_override_options_internal):
>       Add validation for stack-clash parameters and set defaults.
> 
> > -----Original Message-----
> > From: Tamar Christina <tamar.christ...@arm.com>
> > Sent: Wednesday, July 11, 2018 12:23
> > To: gcc-patches@gcc.gnu.org
> > Cc: nd <n...@arm.com>; James Greenhalgh <james.greenha...@arm.com>;
> > Richard Earnshaw <richard.earns...@arm.com>; Marcus Shawcroft
> > <marcus.shawcr...@arm.com>
> > Subject: [PATCH][GCC][AArch64] Set default values for stack-clash and do
> > basic validation in back-end. [Patch (5/6)]
> > 
> > Hi All,
> > 
> > This patch enforces that the default guard size for stack-clash protection 
> > for
> > AArch64 be 64KB unless the user has overriden it via configure in which case
> > the user value is used as long as that value is within the valid range.
> > 
> > It also does some basic validation to ensure that the guard size is only 
> > 4KB or
> > 64KB and also enforces that for aarch64 the stack-clash probing interval is
> > equal to the guard size.
> > 
> > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
> > Target was tested with stack clash on and off by default.
> > 
> > Ok for trunk?
> > 
> > Thanks,
> > Tamar
> > 
> > gcc/
> > 2018-07-11  Tamar Christina  <tamar.christ...@arm.com>
> > 
> >     PR target/86486
> >     * config/aarch64/aarch64.c (aarch64_override_options_internal):
> >     Add validation for stack-clash parameters.
> > 
> > --

> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index 
> e2c34cdfc96a1d3f99f7e4834c66a7551464a518..30c62c406e10793fe041d54c73316a6c8d7c229f
>  100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -10916,6 +10916,37 @@ aarch64_override_options_internal (struct 
> gcc_options *opts)
>                        opts->x_param_values,
>                        global_options_set.x_param_values);
>  
> +  /* If the user hasn't change it via configure then set the default to 64 KB

s/change/changed/

> +     for the backend.  */
> +  maybe_set_param_value (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
> +                      DEFAULT_STK_CLASH_GUARD_SIZE == 0
> +                        ? 16 : DEFAULT_STK_CLASH_GUARD_SIZE,
> +                      opts->x_param_values,
> +                      global_options_set.x_param_values);
> +
> +  /* Validate the guard size.  */
> +  int guard_size = PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE);
> +  if (guard_size != 12 && guard_size != 16)
> +      error ("only values 12 (4 KB) and 16 (64 KB) are supported for guard "

Formatting is wrong, two spaces to indent error.

> +          "size.  Given value %d (%llu KB) is out of range.\n",

No \n on errors. s/out of range/invalid/

> +          guard_size, (1ULL << guard_size) / 1024ULL);
> +
> +  /* Enforce that interval is the same size as size so the mid-end does the
> +     right thing.  */
> +  maybe_set_param_value (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL,
> +                      guard_size,
> +                      opts->x_param_values,
> +                      global_options_set.x_param_values);
> +
> +  /* The maybe_set calls won't update the value if the user has explicitly 
> set
> +     one.  Which means we need to validate that probing interval and guard 
> size
> +     are equal.  */
> +  int probe_interval
> +    = PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL);
> +  if (guard_size != probe_interval)
> +    error ("stack clash guard size '%d' must be equal to probing interval "
> +        "'%d'\n", guard_size, probe_interval);

No \n on errors.

> +
>    /* Enable sw prefetching at specified optimization level for
>       CPUS that have prefetch.  Lower optimization level threshold by 1
>       when profiling is enabled.  */
> 

Reply via email to