pub struct Selector(/* private fields */);
Expand description

A segment selector.

These values are stored in a segmentation register (ss, cs, ds, es, gs, or fs) to select the current segment in that register. A selector consists of two bits indicating the privilege ring of that segment, a bit indicating whether it selects a GDT or LDT, and a 5-bit index into GDT or LDT indicating which segment is selected.

Refer to sections 3.4.3 and 3.4.4 in Vol. 3A of the Intel® 64 and IA-32 Architectures Developer’s Manual for details.

Implementations§

source§

impl Selector

source

pub const fn from_bits(bits: u16) -> Self

Constructs a new instance of Self from the provided raw bits.

source

pub const fn new() -> Self

Constructs a new instance of Self with all bits set to 0.

source

pub const fn bits(self) -> u16

Returns the raw bit representatiion of self as an integer.

source

pub fn with<T>(self, field: Pack16<T, Self>, value: T) -> Self
where T: FromBits<u16>,

Packs the bit representation of value into self at the bit range designated by field, returning a new bitfield.

source

pub fn set<T>(&mut self, field: Pack16<T, Self>, value: T) -> &mut Self
where T: FromBits<u16>,

Packs the bit representation of value into self at the range designated by field, mutating self in place.

source

pub fn get<T>(self, field: Pack16<T, Self>) -> T
where T: FromBits<u16>,

Unpacks the bit range represented by field from self, and converts it into a T-typed value.

Panics

This method panics if self does not contain a valid bit pattern for a T-typed value, as determined by T’s FromBits::try_from_bits implementation.

source

pub fn try_get<T>(self, field: Pack16<T, Self>) -> Result<T, T::Error>
where T: FromBits<u16>,

Unpacks the bit range represented by field from self and attempts to convert it into a T-typed value.

Returns
  • Ok(T) if a T-typed value could be constructed from the bits in src
  • Err(T::Error) if src does not contain a valid bit pattern for a T-typed value, as determined by T’s [FromBits::try_from_bits implementation.
source

pub fn assert_valid()

Asserts that all the packing specs for this type are valid.

This is intended to be used in unit tests.

source

pub fn display_ascii(&self) -> impl Display

Returns a value that formats this bitfield in a multi-line format, using only ASCII characters.

This is equivalent to formatting this bitfield using a {} display specifier, but will never use Unicode box-drawing characters, even when an upstream formatter uses the {:#} fmt::Display specifier. This is intended for use on platforms where Unicode box drawing characters are never available.

source

pub fn display_unicode(&self) -> impl Display

Returns a value that formats this bitfield in a multi-line format, always using Unicode box-drawing characters.

This is equivalent to formatting this bitfield using a {:#} format specifier, but will always use Unicode box-drawing characters, even when an upstream formatter uses the {} fmt::Display specifier.

source§

impl Selector

source

pub const fn null() -> Self

source

pub const fn from_index(u: u16) -> Self

source

pub const fn from_raw(u: u16) -> Self

source

pub fn ring(self) -> Ring

source

pub fn table(&self) -> DescriptorTable

Returns which descriptor table (GDT or LDT) this selector references.

Note

This will never return cpu::DescriptorTable::Idt, as a segment selector only references segmentation table descriptors.

source

pub fn is_ldt(&self) -> bool

Returns true if this is an LDT segment selector.

source

pub fn is_gdt(&self) -> bool

Returns true if this is a GDT segment selector.

source

pub const fn index(&self) -> u16

Returns the index into the LDT or GDT this selector refers to.

source

pub fn set_gdt(&mut self) -> &mut Self

source

pub fn set_ldt(&mut self) -> &mut Self

source

pub fn set_ring(&mut self, ring: Ring) -> &mut Self

source

pub fn set_index(&mut self, index: u16) -> &mut Self

source

pub fn current_cs() -> Self

Returns the current selector in the cs (code segment) register

source

pub unsafe fn set_cs(self)

Sets self as the current code segment selector in the cs register.

Notes

In 64-bit long mode, the code segment selector must have a base address of 0 and limit 2^64.

Safety

lol

source

pub unsafe fn set_ss(self)

Sets self as the current stack segment selector in the ss register.

Notes

In 64-bit long mode, the stack segment selector must have a base address of 0 and limit 2^64.

Safety

lol

source

pub unsafe fn set_ds(self)

Sets self as the current data segment selector in the ds register.

Notes

In 64-bit long mode, the data segment selector must have a base address of 0 and limit 2^64.

Safety

lol

source

pub unsafe fn set_es(self)

Sets self as the current segment in the general-purpose data segment register es (“Extra Segment”).

Notes

In 64-bit long mode, the extra segment selector must have a base address of 0 and limit 2^64.

Safety

lol

source

pub unsafe fn set_fs(self)

Sets self as the current segment in the general-purpose data segment register fs (“File Segment”).

Notes

Unlike the cs, ss, ds, and es registers, the fs register need not be zeroed in long mode, and can be used by the operating system. In particular, the gs and fs registers may be useful for storing thread- or CPU-local data.

Safety

lol

source

pub unsafe fn set_gs(self)

Sets self as the current segment in the general-purpose data segment register gs (“G Segment”).

Notes

Unlike the cs, ss, ds, and es registers, the gs register need not be zeroed in long mode, and can be used by the operating system. In particular, the gs and fs registers may be useful for storing thread- or CPU-local data.

Safety

lol

Trait Implementations§

source§

impl Binary for Selector

source§

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

Formats the value using the given formatter.
source§

impl Clone for Selector

source§

fn clone(&self) -> Selector

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 Selector

source§

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

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

impl Display for Selector

source§

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

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

impl From<Selector> for u16

source§

fn from(Selector: Selector) -> Self

Converts to this type from the input type.
source§

impl From<u16> for Selector

source§

fn from(val: u16) -> Self

Converts to this type from the input type.
source§

impl LowerHex for Selector

source§

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

Formats the value using the given formatter.
source§

impl PartialEq for Selector

source§

fn eq(&self, other: &Selector) -> 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 UpperHex for Selector

source§

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

Formats the value using the given formatter.
source§

impl Copy for Selector

source§

impl Eq for Selector

source§

impl StructuralEq for Selector

source§

impl StructuralPartialEq for Selector

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Az for T

source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

source§

fn cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> CheckedAs for T

source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where 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> OverflowingAs for T

source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
source§

impl<T> SaturatingAs for T

source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> ToOwned for T
where 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> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
source§

impl<T> UnwrappedAs for T

source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WrappingAs for T

source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.