pub struct DescriptorFlags(/* private fields */);
Expand description
Flags for a GDT descriptor. Not all flags are valid for all descriptor types.
Implementations§
Source§impl DescriptorFlags
impl DescriptorFlags
Sourcepub const ACCESSED: Self = _
pub const ACCESSED: Self = _
Set by the processor if this segment has been accessed. Only cleared by software. Setting this bit in software prevents GDT writes on first use.
Sourcepub const WRITABLE: Self = _
pub const WRITABLE: Self = _
For 32-bit data segments, sets the segment as writable. For 32-bit code segments, sets the segment as readable. In 64-bit mode, ignored for all segments.
Sourcepub const CONFORMING: Self = _
pub const CONFORMING: Self = _
For code segments, sets the segment as “conforming”, influencing the privilege checks that occur on control transfers. For 32-bit data segments, sets the segment as “expand down”. In 64-bit mode, ignored for data segments.
Sourcepub const EXECUTABLE: Self = _
pub const EXECUTABLE: Self = _
This flag must be set for code segments and unset for data segments.
Sourcepub const USER_SEGMENT: Self = _
pub const USER_SEGMENT: Self = _
This flag must be set for user segments (in contrast to system segments).
Sourcepub const DPL_RING_3: Self = _
pub const DPL_RING_3: Self = _
These two bits encode the Descriptor Privilege Level (DPL) for this descriptor. If both bits are set, the DPL is Ring 3, if both are unset, the DPL is Ring 0.
Sourcepub const PRESENT: Self = _
pub const PRESENT: Self = _
Must be set for any segment, causes a segment not present exception if not set.
Sourcepub const DEFAULT_SIZE: Self = _
pub const DEFAULT_SIZE: Self = _
Use 32-bit (as opposed to 16-bit) operands. If LONG_MODE
is set,
this must be unset. In 64-bit mode, ignored for data segments.
Sourcepub const GRANULARITY: Self = _
pub const GRANULARITY: Self = _
Limit field is scaled by 4096 bytes. In 64-bit mode, ignored for all segments.
Sourcepub const LIMIT_0_15: Self = _
pub const LIMIT_0_15: Self = _
Bits 0..=15
of the limit field (ignored in 64-bit mode)
Sourcepub const LIMIT_16_19: Self = _
pub const LIMIT_16_19: Self = _
Bits 16..=19
of the limit field (ignored in 64-bit mode)
Sourcepub const BASE_0_23: Self = _
pub const BASE_0_23: Self = _
Bits 0..=23
of the base field (ignored in 64-bit mode, except for fs and gs)
Sourcepub const BASE_24_31: Self = _
pub const BASE_24_31: Self = _
Bits 24..=31
of the base field (ignored in 64-bit mode, except for fs and gs)
Source§impl DescriptorFlags
impl DescriptorFlags
Sourcepub const fn bits(&self) -> u64
pub const fn bits(&self) -> u64
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
Sourcepub const fn from_bits(bits: u64) -> Option<Self>
pub const fn from_bits(bits: u64) -> Option<Self>
Convert from a bits value.
This method will return None
if any unknown bits are set.
Sourcepub const fn from_bits_truncate(bits: u64) -> Self
pub const fn from_bits_truncate(bits: u64) -> Self
Convert from a bits value, unsetting any unknown bits.
Sourcepub const fn from_bits_retain(bits: u64) -> Self
pub const fn from_bits_retain(bits: u64) -> Self
Convert from a bits value exactly.
Sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get a flags value with the bits of a flag with the given name set.
This method will return None
if name
is empty or doesn’t
correspond to any named flag.
Sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Whether any set bits in a source flags value are also set in a target flags value.
Sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Whether all set bits in a source flags value are also set in a target flags value.
Sourcepub fn remove(&mut self, other: Self)
pub fn remove(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
remove
won’t truncate other
, but the !
operator will.
Sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^
) of the bits in two flags values.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert
when value
is true
or remove
when value
is false
.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&
) of the bits in two flags values.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|
) of the bits in two flags values.
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
difference
won’t truncate other
, but the !
operator will.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^
) of the bits in two flags values.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!
) of the bits in a flags value, truncating the result.
Source§impl DescriptorFlags
impl DescriptorFlags
Sourcepub const fn iter(&self) -> Iter<DescriptorFlags>
pub const fn iter(&self) -> Iter<DescriptorFlags>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
Sourcepub const fn iter_names(&self) -> IterNames<DescriptorFlags>
pub const fn iter_names(&self) -> IterNames<DescriptorFlags>
Yield a set of contained named flags values.
This method is like iter
, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Source§impl DescriptorFlags
impl DescriptorFlags
The following constants define default values for common GDT entries. They
are all “flat” segments, meaning they can access the entire address space.
These values all set WRITABLE
and
ACCESSED
. They also match the values loaded
by the syscall
/sysret
and sysenter
/sysexit
instructions.
In short, these values disable segmentation, permission checks, and access tracking at the GDT level. Kernels using these values should use paging to implement this functionality.
Sourcepub const KERNEL_DATA: Self = _
pub const KERNEL_DATA: Self = _
A kernel data segment (64-bit or flat 32-bit)
Sourcepub const KERNEL_CODE32: Self = _
pub const KERNEL_CODE32: Self = _
A flat 32-bit kernel code segment
Sourcepub const KERNEL_CODE64: Self = _
pub const KERNEL_CODE64: Self = _
A 64-bit kernel code segment
Sourcepub const USER_CODE32: Self = _
pub const USER_CODE32: Self = _
A flat 32-bit user code segment
Sourcepub const USER_CODE64: Self = _
pub const USER_CODE64: Self = _
A 64-bit user code segment
Trait Implementations§
Source§impl Binary for DescriptorFlags
impl Binary for DescriptorFlags
Source§impl BitAnd for DescriptorFlags
impl BitAnd for DescriptorFlags
Source§impl BitAndAssign for DescriptorFlags
impl BitAndAssign for DescriptorFlags
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&
) of the bits in two flags values.
Source§impl BitOr for DescriptorFlags
impl BitOr for DescriptorFlags
Source§fn bitor(self, other: DescriptorFlags) -> Self
fn bitor(self, other: DescriptorFlags) -> Self
The bitwise or (|
) of the bits in two flags values.
Source§type Output = DescriptorFlags
type Output = DescriptorFlags
|
operator.Source§impl BitOrAssign for DescriptorFlags
impl BitOrAssign for DescriptorFlags
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|
) of the bits in two flags values.
Source§impl BitXor for DescriptorFlags
impl BitXor for DescriptorFlags
Source§impl BitXorAssign for DescriptorFlags
impl BitXorAssign for DescriptorFlags
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^
) of the bits in two flags values.
Source§impl Clone for DescriptorFlags
impl Clone for DescriptorFlags
Source§fn clone(&self) -> DescriptorFlags
fn clone(&self) -> DescriptorFlags
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for DescriptorFlags
impl Debug for DescriptorFlags
Source§impl Extend<DescriptorFlags> for DescriptorFlags
impl Extend<DescriptorFlags> for DescriptorFlags
Source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
The bitwise or (|
) of the bits in each flags value.
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl Flags for DescriptorFlags
impl Flags for DescriptorFlags
Source§const FLAGS: &'static [Flag<DescriptorFlags>] = _
const FLAGS: &'static [Flag<DescriptorFlags>] = _
Source§fn from_bits_retain(bits: u64) -> DescriptorFlags
fn from_bits_retain(bits: u64) -> DescriptorFlags
Source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
Source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
Source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
Source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|
) of the bits in two flags values.Source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!
). Read moreSource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^
) of the bits in two flags values.Source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&
) of the bits in two flags values.Source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!
). Read moreSource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^
) of the bits in two flags values.Source§fn complement(self) -> Self
fn complement(self) -> Self
!
) of the bits in a flags value, truncating the result.Source§impl FromIterator<DescriptorFlags> for DescriptorFlags
impl FromIterator<DescriptorFlags> for DescriptorFlags
Source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
The bitwise or (|
) of the bits in each flags value.
Source§impl Hash for DescriptorFlags
impl Hash for DescriptorFlags
Source§impl IntoIterator for DescriptorFlags
impl IntoIterator for DescriptorFlags
Source§impl LowerHex for DescriptorFlags
impl LowerHex for DescriptorFlags
Source§impl Not for DescriptorFlags
impl Not for DescriptorFlags
Source§impl Octal for DescriptorFlags
impl Octal for DescriptorFlags
Source§impl Ord for DescriptorFlags
impl Ord for DescriptorFlags
Source§fn cmp(&self, other: &DescriptorFlags) -> Ordering
fn cmp(&self, other: &DescriptorFlags) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for DescriptorFlags
impl PartialEq for DescriptorFlags
Source§impl PartialOrd for DescriptorFlags
impl PartialOrd for DescriptorFlags
Source§impl PublicFlags for DescriptorFlags
impl PublicFlags for DescriptorFlags
Source§impl Sub for DescriptorFlags
impl Sub for DescriptorFlags
Source§fn sub(self, other: Self) -> Self
fn sub(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
difference
won’t truncate other
, but the !
operator will.
Source§type Output = DescriptorFlags
type Output = DescriptorFlags
-
operator.Source§impl SubAssign for DescriptorFlags
impl SubAssign for DescriptorFlags
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
difference
won’t truncate other
, but the !
operator will.