Enum symbolic_common::CpuFamily [−][src]
Represents a family of CPUs.
This is strongly connected to the Arch
type, but reduces the selection to a range of
families with distinct properties, such as a generally common instruction set and pointer size.
This enumeration is represented as u32
for C-bindings and lowlevel APIs.
Variants (Non-exhaustive)
Any other CPU family that is not explicitly supported.
32-bit little-endian CPUs using the Intel 8086 instruction set, also known as x86
.
64-bit little-endian, also known as x86_64
, now widely used by Intel and AMD.
32-bit ARM.
64-bit ARM (e.g. ARMv8-A).
32-bit big-endian PowerPC.
64-bit big-endian PowerPC.
32-bit MIPS.
64-bit MIPS.
ILP32 ABI on 64-bit ARM.
Virtual WASM 32-bit architecture.
Implementations
impl CpuFamily
[src]
pub fn pointer_size(self) -> Option<usize>
[src]
Returns the native pointer size.
This commonly defines the size of CPU registers including the instruction pointer, and the size of all pointers on the platform.
This function returns None
if the CPU family is unknown.
Examples
use symbolic_common::CpuFamily; assert_eq!(CpuFamily::Amd64.pointer_size(), Some(8)); assert_eq!(CpuFamily::Intel32.pointer_size(), Some(4));
pub fn instruction_alignment(self) -> Option<u64>
[src]
Returns instruction alignment if fixed.
Some instruction sets, such as Intel’s x86, use variable length instruction encoding.
Others, such as ARM, have fixed length instructions. This method returns Some
for fixed
size instructions and None
for variable-length instruction sizes.
Examples
use symbolic_common::CpuFamily; // variable length on x86_64: assert_eq!(CpuFamily::Amd64.instruction_alignment(), None); // 4-byte alignment on all 64-bit ARM variants: assert_eq!(CpuFamily::Arm64.instruction_alignment(), Some(4));
pub fn ip_register_name(self) -> Option<&'static str>
[src]
Returns the name of the instruction pointer register.
The instruction pointer register holds a pointer to currrent code execution at all times.
This is a differrent register on each CPU family. The size of the value in this register is
specified by pointer_size
.
Returns None
if the CPU family is unknown.
Examples
use symbolic_common::CpuFamily; assert_eq!(CpuFamily::Amd64.ip_register_name(), Some("rip"));
pub fn cfi_register_name(self, register: u16) -> Option<&'static str>
[src]
Returns the name of a register in a given architecture used in CFI programs.
Each CPU family specifies its own register sets, wherer the registers are numbered. This
resolves the name of the register for the given family, if defined. Returns None
if the
CPU family is unknown, or the register is not defined for the family.
Note: The CFI register name differs from ip_register_name
. For instance, on x86-64
the instruction pointer is returned as $rip
instead of just rip
. This differentiation is
made to be compatible with the Google Breakpad library.
Examples
use symbolic_common::CpuFamily; // 16 is the instruction pointer register: assert_eq!(CpuFamily::Amd64.cfi_register_name(16), Some("$rip"));
Trait Implementations
impl Clone for CpuFamily
[src]
impl Copy for CpuFamily
[src]
impl Debug for CpuFamily
[src]
impl Default for CpuFamily
[src]
impl Eq for CpuFamily
[src]
impl Hash for CpuFamily
[src]
fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl Ord for CpuFamily
[src]
fn cmp(&self, other: &CpuFamily) -> Ordering
[src]
#[must_use]pub fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn clamp(self, min: Self, max: Self) -> Self
1.50.0[src]
impl PartialEq<CpuFamily> for CpuFamily
[src]
fn eq(&self, other: &CpuFamily) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl PartialOrd<CpuFamily> for CpuFamily
[src]
fn partial_cmp(&self, other: &CpuFamily) -> Option<Ordering>
[src]
#[must_use]pub fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl StructuralEq for CpuFamily
[src]
impl StructuralPartialEq for CpuFamily
[src]
Auto Trait Implementations
impl RefUnwindSafe for CpuFamily
impl Send for CpuFamily
impl Sync for CpuFamily
impl Unpin for CpuFamily
impl UnwindSafe for CpuFamily
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src]
V: MultiLane<T>,