Enum gimli::read::CallFrameInstruction
source · #[non_exhaustive]pub enum CallFrameInstruction<T: ReaderOffset> {
Show 23 variants
SetLoc {
address: u64,
},
AdvanceLoc {
delta: u32,
},
DefCfa {
register: Register,
offset: u64,
},
DefCfaSf {
register: Register,
factored_offset: i64,
},
DefCfaRegister {
register: Register,
},
DefCfaOffset {
offset: u64,
},
DefCfaOffsetSf {
factored_offset: i64,
},
DefCfaExpression {
expression: UnwindExpression<T>,
},
Undefined {
register: Register,
},
SameValue {
register: Register,
},
Offset {
register: Register,
factored_offset: u64,
},
OffsetExtendedSf {
register: Register,
factored_offset: i64,
},
ValOffset {
register: Register,
factored_offset: u64,
},
ValOffsetSf {
register: Register,
factored_offset: i64,
},
Register {
dest_register: Register,
src_register: Register,
},
Expression {
register: Register,
expression: UnwindExpression<T>,
},
ValExpression {
register: Register,
expression: UnwindExpression<T>,
},
Restore {
register: Register,
},
RememberState,
RestoreState,
ArgsSize {
size: u64,
},
NegateRaState,
Nop,
}
Expand description
A parsed call frame instruction.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
SetLoc
- DW_CFA_set_loc
The DW_CFA_set_loc instruction takes a single operand that represents a target address. The required action is to create a new table row using the specified address as the location. All other values in the new row are initially identical to the current row. The new location value is always greater than the current one. If the segment_size field of this FDE’s CIE is non- zero, the initial location is preceded by a segment selector of the given length.
AdvanceLoc
The AdvanceLoc
instruction is used for all of DW_CFA_advance_loc
and
DW_CFA_advance_loc{1,2,4}
.
- DW_CFA_advance_loc
The DW_CFA_advance instruction takes a single operand (encoded with the opcode) that represents a constant delta. The required action is to create a new table row with a location value that is computed by taking the current entry’s location value and adding the value of delta * code_alignment_factor. All other values in the new row are initially identical to the current row.
DefCfa
- DW_CFA_def_cfa
The DW_CFA_def_cfa instruction takes two unsigned LEB128 operands representing a register number and a (non-factored) offset. The required action is to define the current CFA rule to use the provided register and offset.
DefCfaSf
- DW_CFA_def_cfa_sf
The DW_CFA_def_cfa_sf instruction takes two operands: an unsigned LEB128 value representing a register number and a signed LEB128 factored offset. This instruction is identical to DW_CFA_def_cfa except that the second operand is signed and factored. The resulting offset is factored_offset * data_alignment_factor.
DefCfaRegister
- DW_CFA_def_cfa_register
The DW_CFA_def_cfa_register instruction takes a single unsigned LEB128 operand representing a register number. The required action is to define the current CFA rule to use the provided register (but to keep the old offset). This operation is valid only if the current CFA rule is defined to use a register and offset.
DefCfaOffset
- DW_CFA_def_cfa_offset
The DW_CFA_def_cfa_offset instruction takes a single unsigned LEB128 operand representing a (non-factored) offset. The required action is to define the current CFA rule to use the provided offset (but to keep the old register). This operation is valid only if the current CFA rule is defined to use a register and offset.
DefCfaOffsetSf
- DW_CFA_def_cfa_offset_sf
The DW_CFA_def_cfa_offset_sf instruction takes a signed LEB128 operand representing a factored offset. This instruction is identical to DW_CFA_def_cfa_offset except that the operand is signed and factored. The resulting offset is factored_offset * data_alignment_factor. This operation is valid only if the current CFA rule is defined to use a register and offset.
DefCfaExpression
- DW_CFA_def_cfa_expression
The DW_CFA_def_cfa_expression instruction takes a single operand encoded as a DW_FORM_exprloc value representing a DWARF expression. The required action is to establish that expression as the means by which the current CFA is computed.
Fields
expression: UnwindExpression<T>
The location of the DWARF expression.
Undefined
- DW_CFA_undefined
The DW_CFA_undefined instruction takes a single unsigned LEB128 operand that represents a register number. The required action is to set the rule for the specified register to “undefined.”
SameValue
- DW_CFA_same_value
The DW_CFA_same_value instruction takes a single unsigned LEB128 operand that represents a register number. The required action is to set the rule for the specified register to “same value.”
Offset
The Offset
instruction represents both DW_CFA_offset
and
DW_CFA_offset_extended
.
- DW_CFA_offset
The DW_CFA_offset instruction takes two operands: a register number (encoded with the opcode) and an unsigned LEB128 constant representing a factored offset. The required action is to change the rule for the register indicated by the register number to be an offset(N) rule where the value of N is factored offset * data_alignment_factor.
OffsetExtendedSf
- DW_CFA_offset_extended_sf
The DW_CFA_offset_extended_sf instruction takes two operands: an unsigned LEB128 value representing a register number and a signed LEB128 factored offset. This instruction is identical to DW_CFA_offset_extended except that the second operand is signed and factored. The resulting offset is factored_offset * data_alignment_factor.
ValOffset
- DW_CFA_val_offset
The DW_CFA_val_offset instruction takes two unsigned LEB128 operands representing a register number and a factored offset. The required action is to change the rule for the register indicated by the register number to be a val_offset(N) rule where the value of N is factored_offset * data_alignment_factor.
ValOffsetSf
- DW_CFA_val_offset_sf
The DW_CFA_val_offset_sf instruction takes two operands: an unsigned LEB128 value representing a register number and a signed LEB128 factored offset. This instruction is identical to DW_CFA_val_offset except that the second operand is signed and factored. The resulting offset is factored_offset * data_alignment_factor.
Register
- DW_CFA_register
The DW_CFA_register instruction takes two unsigned LEB128 operands representing register numbers. The required action is to set the rule for the first register to be register(R) where R is the second register.
Fields
Expression
- DW_CFA_expression
The DW_CFA_expression instruction takes two operands: an unsigned LEB128 value representing a register number, and a DW_FORM_block value representing a DWARF expression. The required action is to change the rule for the register indicated by the register number to be an expression(E) rule where E is the DWARF expression. That is, the DWARF expression computes the address. The value of the CFA is pushed on the DWARF evaluation stack prior to execution of the DWARF expression.
Fields
expression: UnwindExpression<T>
The location of the DWARF expression.
ValExpression
- DW_CFA_val_expression
The DW_CFA_val_expression instruction takes two operands: an unsigned LEB128 value representing a register number, and a DW_FORM_block value representing a DWARF expression. The required action is to change the rule for the register indicated by the register number to be a val_expression(E) rule where E is the DWARF expression. That is, the DWARF expression computes the value of the given register. The value of the CFA is pushed on the DWARF evaluation stack prior to execution of the DWARF expression.
Fields
expression: UnwindExpression<T>
The location of the DWARF expression.
Restore
The Restore
instruction represents both DW_CFA_restore
and
DW_CFA_restore_extended
.
- DW_CFA_restore
The DW_CFA_restore instruction takes a single operand (encoded with the opcode) that represents a register number. The required action is to change the rule for the indicated register to the rule assigned it by the initial_instructions in the CIE.
RememberState
- DW_CFA_remember_state
The DW_CFA_remember_state instruction takes no operands. The required action is to push the set of rules for every register onto an implicit stack.
RestoreState
- DW_CFA_restore_state
The DW_CFA_restore_state instruction takes no operands. The required action is to pop the set of rules off the implicit stack and place them in the current row.
ArgsSize
DW_CFA_GNU_args_size
GNU Extension
The DW_CFA_GNU_args_size instruction takes an unsigned LEB128 operand representing an argument size. This instruction specifies the total of the size of the arguments which have been pushed onto the stack.
NegateRaState
DW_CFA_AARCH64_negate_ra_state
AArch64 Extension
The DW_CFA_AARCH64_negate_ra_state operation negates bit 0 of the RA_SIGN_STATE pseudo-register. It does not take any operands. The DW_CFA_AARCH64_negate_ra_state must not be mixed with other DWARF Register Rule Instructions on the RA_SIGN_STATE pseudo-register in one Common Information Entry (CIE) and Frame Descriptor Entry (FDE) program sequence.
Nop
- DW_CFA_nop
The DW_CFA_nop instruction has no operands and no required actions. It is used as padding to make a CIE or FDE an appropriate size.
Implementations§
source§impl<T: ReaderOffset> CallFrameInstruction<T>
impl<T: ReaderOffset> CallFrameInstruction<T>
fn parse<R: Reader<Offset = T>>( input: &mut R, address_encoding: Option<DwEhPe>, parameters: &PointerEncodingParameters<'_, R>, vendor: Vendor, ) -> Result<CallFrameInstruction<T>>
Trait Implementations§
source§impl<T: Clone + ReaderOffset> Clone for CallFrameInstruction<T>
impl<T: Clone + ReaderOffset> Clone for CallFrameInstruction<T>
source§fn clone(&self) -> CallFrameInstruction<T>
fn clone(&self) -> CallFrameInstruction<T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<T: Debug + ReaderOffset> Debug for CallFrameInstruction<T>
impl<T: Debug + ReaderOffset> Debug for CallFrameInstruction<T>
source§impl<T: PartialEq + ReaderOffset> PartialEq for CallFrameInstruction<T>
impl<T: PartialEq + ReaderOffset> PartialEq for CallFrameInstruction<T>
source§fn eq(&self, other: &CallFrameInstruction<T>) -> bool
fn eq(&self, other: &CallFrameInstruction<T>) -> bool
self
and other
values to be equal, and is used
by ==
.