Allow unwind support to work without a frame pointer
The patch extends the unwinder to support targets that do not need to use a dedicated frame pointer register. Specifically, the changes include: - Change the "fp" routine in the RegisterMapper to return an *optional* frame pointer regsiter via Option<Register>. - On targets that choose to not define a FP register via the above routine, the UnwindInst::DefineNewFrame operation no longer switches the CFA to be defined in terms of the FP. (The operation still can be used to define the location of the clobber area.) - In addition, on targets that choose not to define a FP register, the UnwindInst::PushFrameRegs operation is not supported. - There is a new operation UnwindInst::StackAlloc that needs to be called on targets without FP whenever the stack pointer is updated. This caused the CFA offset to be adjusted accordingly. (On targets with FP this operation is a no-op.)
This commit is contained in:
@@ -225,6 +225,11 @@ pub enum UnwindInst {
|
||||
/// the clobber area.
|
||||
offset_downward_to_clobbers: u32,
|
||||
},
|
||||
/// The stack pointer was adjusted to allocate the stack.
|
||||
StackAlloc {
|
||||
/// Size to allocate.
|
||||
size: u32,
|
||||
},
|
||||
/// The stack slot at the given offset from the clobber-area base has been
|
||||
/// used to save the given register.
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user