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