pub enum UnwindRuleAarch64 {
NoOp,
NoOpIfFirstFrameOtherwiseFp,
OffsetSp {
sp_offset_by_16: u16,
},
OffsetSpIfFirstFrameOtherwiseStackEndsHere {
sp_offset_by_16: u16,
},
OffsetSpAndRestoreLr {
sp_offset_by_16: u16,
lr_storage_offset_from_sp_by_8: i16,
},
OffsetSpAndRestoreFpAndLr {
sp_offset_by_16: u16,
fp_storage_offset_from_sp_by_8: i16,
lr_storage_offset_from_sp_by_8: i16,
},
UseFramePointer,
UseFramepointerWithOffsets {
sp_offset_from_fp_by_8: u16,
fp_storage_offset_from_fp_by_8: i16,
lr_storage_offset_from_fp_by_8: i16,
},
}
Variants§
NoOp
(sp, fp, lr) = (sp, fp, lr) Only possible for the first frame. Subsequent frames must get the return address from somewhere other than the lr register to avoid infinite loops.
NoOpIfFirstFrameOtherwiseFp
(sp, fp, lr) = if is_first_frame (sp, fp, lr) else (fp + 16, *fp, *(fp + 8)) Used as a fallback rule.
OffsetSp
(sp, fp, lr) = (sp + 16x, fp, lr) Only possible for the first frame. Subsequent frames must get the return address from somewhere other than the lr register to avoid infinite loops.
OffsetSpIfFirstFrameOtherwiseStackEndsHere
(sp, fp, lr) = (sp + 16x, fp, lr) if is_first_frame This rule reflects an ambiguity in DWARF CFI information. When the return address is “undefined” because it was omitted, it could mean “same value”, but this is only allowed for the first frame.
OffsetSpAndRestoreLr
(sp, fp, lr) = (sp + 16x, fp, *(sp + 8y))
OffsetSpAndRestoreFpAndLr
(sp, fp, lr) = (sp + 16x, *(sp + 8y), *(sp + 8z))
UseFramePointer
(sp, fp, lr) = (fp + 16, *fp, *(fp + 8))
UseFramepointerWithOffsets
(sp, fp, lr) = (fp + 8x, *(fp + 8y), *(fp + 8z))
Trait Implementations§
Source§impl Clone for UnwindRuleAarch64
impl Clone for UnwindRuleAarch64
Source§fn clone(&self) -> UnwindRuleAarch64
fn clone(&self) -> UnwindRuleAarch64
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more