pub enum Value {
Generic(u64),
I8(i8),
U8(u8),
I16(i16),
U16(u16),
I32(i32),
U32(u32),
I64(i64),
U64(u64),
F32(f32),
F64(f64),
}
Expand description
The value of an entry on the DWARF stack.
Variants§
Generic(u64)
A generic value, which is address-sized and of unspecified sign.
I8(i8)
A signed 8-bit integer value.
U8(u8)
An unsigned 8-bit integer value.
I16(i16)
A signed 16-bit integer value.
U16(u16)
An unsigned 16-bit integer value.
I32(i32)
A signed 32-bit integer value.
U32(u32)
An unsigned 32-bit integer value.
I64(i64)
A signed 64-bit integer value.
U64(u64)
An unsigned 64-bit integer value.
F32(f32)
A 32-bit floating point value.
F64(f64)
A 64-bit floating point value.
Implementations§
source§impl Value
impl Value
sourcepub fn value_type(&self) -> ValueType
pub fn value_type(&self) -> ValueType
Return the ValueType
corresponding to this Value
.
sourcepub fn parse<R: Reader>(value_type: ValueType, bytes: R) -> Result<Value>
pub fn parse<R: Reader>(value_type: ValueType, bytes: R) -> Result<Value>
Read a Value
with the given value_type
from a Reader
.
sourcepub fn to_u64(self, addr_mask: u64) -> Result<u64>
pub fn to_u64(self, addr_mask: u64) -> Result<u64>
Convert a Value
to a u64
.
The ValueType
of self
must be integral.
Values are sign extended if the source value is signed.
sourcepub fn from_u64(value_type: ValueType, value: u64) -> Result<Value>
pub fn from_u64(value_type: ValueType, value: u64) -> Result<Value>
Create a Value
with the given value_type
from a u64
value.
The value_type
may be integral or floating point.
The result is truncated if the u64
value does
not fit the bounds of the value_type
.
sourcefn from_f32(value_type: ValueType, value: f32) -> Result<Value>
fn from_f32(value_type: ValueType, value: f32) -> Result<Value>
Create a Value
with the given value_type
from a f32
value.
The value_type
may be integral or floating point.
The result is not defined if the f32
value does
not fit the bounds of the value_type
.
sourcefn from_f64(value_type: ValueType, value: f64) -> Result<Value>
fn from_f64(value_type: ValueType, value: f64) -> Result<Value>
Create a Value
with the given value_type
from a f64
value.
The value_type
may be integral or floating point.
The result is not defined if the f64
value does
not fit the bounds of the value_type
.
sourcepub fn convert(self, value_type: ValueType, addr_mask: u64) -> Result<Value>
pub fn convert(self, value_type: ValueType, addr_mask: u64) -> Result<Value>
Convert a Value
to the given value_type
.
When converting between integral types, the result is truncated
if the source value does not fit the bounds of the value_type
.
When converting from floating point types, the result is not defined
if the source value does not fit the bounds of the value_type
.
This corresponds to the DWARF DW_OP_convert
operation.
sourcepub fn reinterpret(self, value_type: ValueType, addr_mask: u64) -> Result<Value>
pub fn reinterpret(self, value_type: ValueType, addr_mask: u64) -> Result<Value>
Reinterpret the bits in a Value
as the given value_type
.
The source and result value types must have equal sizes.
This corresponds to the DWARF DW_OP_reinterpret
operation.
sourcepub fn abs(self, addr_mask: u64) -> Result<Value>
pub fn abs(self, addr_mask: u64) -> Result<Value>
Perform an absolute value operation.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_abs
operation.
sourcepub fn neg(self, addr_mask: u64) -> Result<Value>
pub fn neg(self, addr_mask: u64) -> Result<Value>
Perform a negation operation.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_neg
operation.
sourcepub fn add(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn add(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform an addition operation.
This operation requires matching types.
This corresponds to the DWARF DW_OP_plus
operation.
sourcepub fn sub(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn sub(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a subtraction operation.
This operation requires matching types.
This corresponds to the DWARF DW_OP_minus
operation.
sourcepub fn mul(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn mul(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a multiplication operation.
This operation requires matching types.
This corresponds to the DWARF DW_OP_mul
operation.
sourcepub fn div(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn div(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a division operation.
This operation requires matching types.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_div
operation.
sourcepub fn rem(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn rem(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a remainder operation.
This operation requires matching integral types.
If the value type is Generic
, then it is interpreted as an unsigned value.
This corresponds to the DWARF DW_OP_mod
operation.
sourcepub fn not(self, addr_mask: u64) -> Result<Value>
pub fn not(self, addr_mask: u64) -> Result<Value>
Perform a bitwise not operation.
This operation requires matching integral types.
This corresponds to the DWARF DW_OP_not
operation.
sourcepub fn and(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn and(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a bitwise and operation.
This operation requires matching integral types.
This corresponds to the DWARF DW_OP_and
operation.
sourcepub fn or(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn or(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a bitwise or operation.
This operation requires matching integral types.
This corresponds to the DWARF DW_OP_or
operation.
sourcepub fn xor(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn xor(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a bitwise exclusive-or operation.
This operation requires matching integral types.
This corresponds to the DWARF DW_OP_xor
operation.
sourcefn shift_length(self) -> Result<u64>
fn shift_length(self) -> Result<u64>
Convert value to bit length suitable for a shift operation.
If the value is negative then an error is returned.
sourcepub fn shl(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn shl(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a shift left operation.
This operation requires integral types. If the shift length exceeds the type size, then 0 is returned. If the shift length is negative then an error is returned.
This corresponds to the DWARF DW_OP_shl
operation.
sourcepub fn shr(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn shr(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform a logical shift right operation.
This operation requires an unsigned integral type for the value.
If the value type is Generic
, then it is interpreted as an unsigned value.
This operation requires an integral type for the shift length. If the shift length exceeds the type size, then 0 is returned. If the shift length is negative then an error is returned.
This corresponds to the DWARF DW_OP_shr
operation.
sourcepub fn shra(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn shra(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform an arithmetic shift right operation.
This operation requires a signed integral type for the value.
If the value type is Generic
, then it is interpreted as a signed value.
This operation requires an integral type for the shift length. If the shift length exceeds the type size, then 0 is returned for positive values, and -1 is returned for negative values. If the shift length is negative then an error is returned.
This corresponds to the DWARF DW_OP_shra
operation.
sourcepub fn eq(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn eq(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform the ==
relational operation.
This operation requires matching integral types.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_eq
operation.
sourcepub fn ge(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn ge(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform the >=
relational operation.
This operation requires matching integral types.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_ge
operation.
sourcepub fn gt(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn gt(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform the >
relational operation.
This operation requires matching integral types.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_gt
operation.
sourcepub fn le(self, rhs: Value, addr_mask: u64) -> Result<Value>
pub fn le(self, rhs: Value, addr_mask: u64) -> Result<Value>
Perform the `<= relational operation.
This operation requires matching integral types.
If the value type is Generic
, then it is interpreted as a signed value.
This corresponds to the DWARF DW_OP_le
operation.