machinst aarch64: New backend unwind (#2313)

* Unwind information for aarch64 backend.
This commit is contained in:
Yury Delendik
2020-11-06 08:02:45 -06:00
committed by GitHub
parent f60c0f3ec3
commit b2b7bc10e2
5 changed files with 381 additions and 17 deletions

View File

@@ -64,6 +64,7 @@ impl MachBackend for AArch64Backend {
let buffer = vcode.emit();
let frame_size = vcode.frame_size();
let unwind_info = vcode.unwind_info()?;
let disasm = if want_disasm {
Some(vcode.show_rru(Some(&create_reg_universe(flags))))
@@ -77,7 +78,7 @@ impl MachBackend for AArch64Backend {
buffer,
frame_size,
disasm,
unwind_info: None,
unwind_info,
})
}
@@ -109,6 +110,31 @@ impl MachBackend for AArch64Backend {
// opposite of x86).
IntCC::UnsignedLessThan
}
#[cfg(feature = "unwind")]
fn emit_unwind_info(
&self,
result: &MachCompileResult,
kind: crate::machinst::UnwindInfoKind,
) -> CodegenResult<Option<crate::isa::unwind::UnwindInfo>> {
use crate::isa::unwind::UnwindInfo;
use crate::machinst::UnwindInfoKind;
Ok(match (result.unwind_info.as_ref(), kind) {
(Some(info), UnwindInfoKind::SystemV) => {
inst::unwind::systemv::create_unwind_info(info.clone())?.map(UnwindInfo::SystemV)
}
(Some(_info), UnwindInfoKind::Windows) => {
// TODO: support Windows unwind info on AArch64
None
}
_ => None,
})
}
#[cfg(feature = "unwind")]
fn create_systemv_cie(&self) -> Option<gimli::write::CommonInformationEntry> {
Some(inst::unwind::systemv::create_cie())
}
}
/// Create a new `isa::Builder`.