On 07/11/2018 05:20 AM, Tamar Christina wrote:
> Hi All,
> 
> This patch implements the use of the stack clash mitigation for aarch64.
> In Aarch64 we expect both the probing interval and the guard size to be 64KB
> and we enforce them to always be equal.
> 
> We also probe up by 1024 bytes in the general case when a probe is required.
> 
> AArch64 has the following probing conditions:
> 
>  1) Any allocation less than 63KB requires no probing.  An ABI defined safe
>     buffer of 1Kbytes is used and a page size of 64k is assumed.
> 
>  2) Any allocations larger than 1 page size, is done in increments of page 
> size
>     and probed up by 1KB leaving the residuals.
> 
>  3a) Any residual for local arguments that is less than 63KB requires no 
> probing.
>      Essentially this is a sliding window.  The probing range determines the 
> ABI
>      safe buffer, and the amount to be probed up.
> 
>   b) Any residual for outgoing arguments that is less than 1KB requires no 
> probing,
>      However to maintain our invariant, anything above or equal to 1KB 
> requires a probe.
> 
> Incrementally allocating less than the probing thresholds, e.g. recursive 
> functions will
> not be an issue as the storing of LR counts as a probe.
> 
> 
>                             +-------------------+                             
>        
>                             |  ABI SAFE REGION  |                             
>        
>                   +------------------------------                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>  maximum amount   |         |                   |                             
>        
>  not needing a    |         |                   |                             
>        
>  probe            |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |                             
>        
>                   |         |                   |        Probe offset when    
>        
>                   |         ---------------------------- probe is required    
>        
>                   |         |                   |                             
>        
>                   +-------- +-------------------+ --------  Point of first 
> probe     
>                             |  ABI SAFE REGION  |                             
>        
>                             ---------------------                             
>        
>                             |                   |                             
>        
>                             |                   |                             
>        
>                             |                   |                             
>             
> 
> 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  Jeff Law  <l...@redhat.com>
>           Richard Sandiford <richard.sandif...@linaro.org>
>           Tamar Christina  <tamar.christ...@arm.com>
> 
>       PR target/86486
>       * config/aarch64/aarch64.md (cmp<mode>,
>       probe_stack_range): Add k (SP) constraint.
>       * config/aarch64/aarch64.h (STACK_CLASH_CALLER_GUARD,
>       STACK_CLASH_MAX_UNROLL_PAGES): New.
>       * config/aarch64/aarch64.c (aarch64_output_probe_stack_range): Emit
>       stack probes for stack clash.
>       (aarch64_allocate_and_probe_stack_space): New.
>       (aarch64_expand_prologue): Use it.
>       (aarch64_expand_epilogue): Likewise and update IP regs re-use criteria.
>       (aarch64_sub_sp): Add emit_move_imm optional param.
[ ... ]
I'm going to let the aarch64 maintainers ack/nack the aarch64 specific
bits.  I'll review them to see if there's anything obvious (since I am
familiar with the core issues and the original implementation).

I'm happy to own review work on the target independent chunks.

jeff

Reply via email to