[PATCH][GCC][AArch64] Updated stack-clash implementation supporting 64k probes. [patch (1/6)]
Jeff Law
law@redhat.com
Wed Jul 11 17:00:00 GMT 2018
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 <law@redhat.com>
> Richard Sandiford <richard.sandiford@linaro.org>
> Tamar Christina <tamar.christina@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
More information about the Gcc-patches
mailing list