Cranelift: refactoring of unwind info (#2289)
* factor common code * move fde/unwind emit to more abstract level * code_len -> function_size * speedup block scanning * better function_size calciulation * Rename UnwindCode enums
This commit is contained in:
@@ -14,3 +14,55 @@ pub enum UnwindInfo {
|
||||
/// System V ABI unwind information.
|
||||
SystemV(systemv::UnwindInfo),
|
||||
}
|
||||
|
||||
pub(crate) mod input {
|
||||
use crate::binemit::CodeOffset;
|
||||
use alloc::vec::Vec;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
pub(crate) enum UnwindCode<Reg> {
|
||||
SaveRegister {
|
||||
offset: CodeOffset,
|
||||
reg: Reg,
|
||||
},
|
||||
RestoreRegister {
|
||||
offset: CodeOffset,
|
||||
reg: Reg,
|
||||
},
|
||||
SaveXmmRegister {
|
||||
offset: CodeOffset,
|
||||
reg: Reg,
|
||||
stack_offset: u32,
|
||||
},
|
||||
StackAlloc {
|
||||
offset: CodeOffset,
|
||||
size: u32,
|
||||
},
|
||||
StackDealloc {
|
||||
offset: CodeOffset,
|
||||
size: u32,
|
||||
},
|
||||
SetFramePointer {
|
||||
offset: CodeOffset,
|
||||
reg: Reg,
|
||||
},
|
||||
RememberState {
|
||||
offset: CodeOffset,
|
||||
},
|
||||
RestoreState {
|
||||
offset: CodeOffset,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
pub struct UnwindInfo<Reg> {
|
||||
pub(crate) prologue_size: CodeOffset,
|
||||
pub(crate) prologue_unwind_codes: Vec<UnwindCode<Reg>>,
|
||||
pub(crate) epilogues_unwind_codes: Vec<Vec<UnwindCode<Reg>>>,
|
||||
pub(crate) function_size: CodeOffset,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user