Implement stack limit checks for AArch64 (#1573)

This commit implements the stack limit checks in cranelift for the
AArch64 backend. This gets the `stack_limit` argument purpose as well as
a function's global `stack_limit` directive working for the AArch64
backend. I've tested this locally on some hardware and in an emulator
and it looks to be working for basic tests, but I've never really done
AArch64 before so some scrutiny on the instructions would be most
welcome!
This commit is contained in:
Alex Crichton
2020-04-24 15:01:57 -05:00
committed by GitHub
parent c756078987
commit 74eda8090c
11 changed files with 490 additions and 42 deletions

View File

@@ -94,7 +94,11 @@ impl GlobalFrameInfo {
// the function, because otherwise something is buggy along the way and
// not accounting for all the instructions. This isn't super critical
// though so we can omit this check in release mode.
debug_assert!(pos.is_some(), "failed to find instruction for {:x}", pc);
//
// FIXME(#1521) aarch64 instruction info isn't quite up-to-par yet.
if !cfg!(target_arch = "aarch64") {
debug_assert!(pos.is_some(), "failed to find instruction for {:x}", pc);
}
let instr = match pos {
Some(pos) => func.instr_map.instructions[pos].srcloc,