#[non_exhaustive]
#[repr(u32)]
pub enum CpuFamily { Unknown = 0, Intel32 = 1, Amd64 = 2, Arm32 = 3, Arm64 = 4, Ppc32 = 5, Ppc64 = 6, Mips32 = 7, Mips64 = 8, Arm64_32 = 9, Wasm32 = 10, }
Expand description

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)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Unknown = 0

Any other CPU family that is not explicitly supported.

§

Intel32 = 1

32-bit little-endian CPUs using the Intel 8086 instruction set, also known as x86.

§

Amd64 = 2

64-bit little-endian, also known as x86_64, now widely used by Intel and AMD.

§

Arm32 = 3

32-bit ARM.

§

Arm64 = 4

64-bit ARM (e.g. ARMv8-A).

§

Ppc32 = 5

32-bit big-endian PowerPC.

§

Ppc64 = 6

64-bit big-endian PowerPC.

§

Mips32 = 7

32-bit MIPS.

§

Mips64 = 8

64-bit MIPS.

§

Arm64_32 = 9

ILP32 ABI on 64-bit ARM.

§

Wasm32 = 10

Virtual WASM 32-bit architecture.

Implementations§

source§

impl CpuFamily

source

pub fn pointer_size(self) -> Option<usize>

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));
source

pub fn instruction_alignment(self) -> Option<u64>

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));
source

pub fn ip_register_name(self) -> Option<&'static str>

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"));

Trait Implementations§

source§

impl Clone for CpuFamily

source§

fn clone(&self) -> CpuFamily

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CpuFamily

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for CpuFamily

source§

fn default() -> CpuFamily

Returns the “default value” for a type. Read more
source§

impl Hash for CpuFamily

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for CpuFamily

source§

fn cmp(&self, other: &CpuFamily) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for CpuFamily

source§

fn eq(&self, other: &CpuFamily) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CpuFamily

source§

fn partial_cmp(&self, other: &CpuFamily) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Copy for CpuFamily

source§

impl Eq for CpuFamily

source§

impl StructuralEq for CpuFamily

source§

impl StructuralPartialEq for CpuFamily

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.