On 22/06/17 16:30, Jeff Law wrote: > It just happens to be the case that x86 hits *sp when it stores the > return pointer and that ppc always stores the backchain into *sp when it > allocates additional stack space. As a result on those targets we know > the offset between the stack pointer and the most recent probe is zero > at the start of the callee's prologue. That allows us to avoid the vast > majority of explicit probes. > > aarch64's ABI and ISA don't provide us with any such guarantees and we > have to make very conservative assumptions which leads to much more > explicit probing.
i think the aarch64 abi does not disallow access by the caller to *sp so i don't see the problem. the caller can give various guarantees about how far back the last stack access was relative to the sp at entry to a function, but this does not have to be abi! the abi is not a hard guarantee anyway, asm code can always do tricks that is not abi clean but happens to work in practice, so in that sense relying on *sp 'was written' is incorrect assumption even on ppc/x86, in fact it would not work with the llvm 'safe stack' runtime as a probe, the stack clash would happen on the un-safe stack in that case not where the return address is stored.
