diff --git a/cranelift/codegen/src/context.rs b/cranelift/codegen/src/context.rs index 107e740535..67fc48d77c 100644 --- a/cranelift/codegen/src/context.rs +++ b/cranelift/codegen/src/context.rs @@ -241,10 +241,9 @@ impl Context { &self, isa: &dyn TargetIsa, ) -> CodegenResult> { - let backend = isa.get_mach_backend(); let unwind_info_kind = isa.unwind_info_kind(); let result = self.mach_compile_result.as_ref().unwrap(); - backend.emit_unwind_info(result, unwind_info_kind) + isa.emit_unwind_info(result, unwind_info_kind) } /// Run the verifier on the function. diff --git a/cranelift/codegen/src/isa/mod.rs b/cranelift/codegen/src/isa/mod.rs index 7e52515915..6e9c682661 100644 --- a/cranelift/codegen/src/isa/mod.rs +++ b/cranelift/codegen/src/isa/mod.rs @@ -244,6 +244,16 @@ pub trait TargetIsa: fmt::Display + Send + Sync { /// IntCC condition for Unsigned Addition Overflow (Carry). fn unsigned_add_overflow_condition(&self) -> ir::condcodes::IntCC; + /// Creates unwind information for the function. + /// + /// Returns `None` if there is no unwind information for the function. + #[cfg(feature = "unwind")] + fn emit_unwind_info( + &self, + result: &MachCompileResult, + kind: UnwindInfoKind, + ) -> CodegenResult>; + /// Creates a new System V Common Information Entry for the ISA. /// /// Returns `None` if the ISA does not support System V unwind information. diff --git a/cranelift/codegen/src/machinst/adapter.rs b/cranelift/codegen/src/machinst/adapter.rs index b26abb19ff..e97be9a4cd 100644 --- a/cranelift/codegen/src/machinst/adapter.rs +++ b/cranelift/codegen/src/machinst/adapter.rs @@ -68,6 +68,15 @@ impl TargetIsa for TargetIsaAdapter { self.backend.unsigned_add_overflow_condition() } + #[cfg(feature = "unwind")] + fn emit_unwind_info( + &self, + result: &MachCompileResult, + kind: UnwindInfoKind, + ) -> CodegenResult> { + self.backend.emit_unwind_info(result, kind) + } + #[cfg(feature = "unwind")] fn create_systemv_cie(&self) -> Option { self.backend.create_systemv_cie()