diff --git a/doc/app_io/trait.ImmutableRead.html b/doc/app_io/trait.ImmutableRead.html index 8ecda03aba..7c19ff32a6 100644 --- a/doc/app_io/trait.ImmutableRead.html +++ b/doc/app_io/trait.ImmutableRead.html @@ -1,4 +1,4 @@ ImmutableRead in app_io - Rust

Trait app_io::ImmutableRead

source ·
pub trait ImmutableRead: Send + Sync + 'static {
     // Required method
     fn read(&self, buf: &mut [u8]) -> Result<usize>;
-}

Required Methods§

source

fn read(&self, buf: &mut [u8]) -> Result<usize>

Implementations on Foreign Types§

source§

impl ImmutableRead for Slave

source§

fn read(&self, buf: &mut [u8]) -> Result<usize>

source§

impl ImmutableRead for StdioReader

source§

fn read(&self, buf: &mut [u8]) -> Result<usize>

Implementors§

\ No newline at end of file +}

Required Methods§

source

fn read(&self, buf: &mut [u8]) -> Result<usize>

Implementations on Foreign Types§

source§

impl ImmutableRead for StdioReader

source§

fn read(&self, buf: &mut [u8]) -> Result<usize>

source§

impl ImmutableRead for Slave

source§

fn read(&self, buf: &mut [u8]) -> Result<usize>

Implementors§

\ No newline at end of file diff --git a/doc/ata/struct.AtaError.html b/doc/ata/struct.AtaError.html index 9a6ae65207..1ccefdbb79 100644 --- a/doc/ata/struct.AtaError.html +++ b/doc/ata/struct.AtaError.html @@ -57,16 +57,16 @@
Safety
between Self::all() and self (e.g. Self::all() - self)

This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

-

Trait Implementations§

source§

impl Binary for AtaError

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<AtaError> for AtaError

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

-
§

type Output = AtaError

The resulting type after applying the & operator.
source§

impl BitAndAssign<AtaError> for AtaError

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

+

Trait Implementations§

source§

impl Binary for AtaError

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<AtaError> for AtaError

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

+
§

type Output = AtaError

The resulting type after applying the & operator.
source§

impl BitAndAssign<AtaError> for AtaError

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

source§

impl BitOr<AtaError> for AtaError

source§

fn bitor(self, other: AtaError) -> Self

Returns the union of the two sets of flags.

-
§

type Output = AtaError

The resulting type after applying the | operator.
source§

impl BitOrAssign<AtaError> for AtaError

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

+
§

type Output = AtaError

The resulting type after applying the | operator.
source§

impl BitOrAssign<AtaError> for AtaError

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

source§

impl BitXor<AtaError> for AtaError

source§

fn bitxor(self, other: Self) -> Self

Returns the left flags, but with all the right flags toggled.

-
§

type Output = AtaError

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<AtaError> for AtaError

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

-
source§

impl Clone for AtaError

source§

fn clone(&self) -> AtaError

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 AtaError

source§

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

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

impl Extend<AtaError> for AtaError

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl FromIterator<AtaError> for AtaError

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for AtaError

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 +

§

type Output = AtaError

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<AtaError> for AtaError

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

+
source§

impl Clone for AtaError

source§

fn clone(&self) -> AtaError

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 AtaError

source§

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

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

impl Extend<AtaError> for AtaError

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl FromIterator<AtaError> for AtaError

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for AtaError

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 LowerHex for AtaError

source§

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

Formats the value using the given formatter.
source§

impl Not for AtaError

source§

fn not(self) -> Self

Returns the complement of this set of flags.

-
§

type Output = AtaError

The resulting type after applying the ! operator.
source§

impl Octal for AtaError

source§

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

Formats the value using the given formatter.
source§

impl Ord for AtaError

source§

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

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

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

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

impl LowerHex for AtaError

source§

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

Formats the value using the given formatter.
source§

impl Not for AtaError

source§

fn not(self) -> Self

Returns the complement of this set of flags.

+
§

type Output = AtaError

The resulting type after applying the ! operator.
source§

impl Octal for AtaError

source§

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

Formats the value using the given formatter.
source§

impl Ord for AtaError

source§

fn cmp(&self, other: &AtaError) -> 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<Self>,

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

impl PartialEq<AtaError> for AtaError

source§

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

This method tests for self and other values to be equal, and is used @@ -75,7 +75,7 @@
Safety
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 Sub<AtaError> for AtaError

source§

fn sub(self, other: Self) -> Self

Returns the set difference of the two sets of flags.

§

type Output = AtaError

The resulting type after applying the - operator.
source§

impl SubAssign<AtaError> for AtaError

source§

fn sub_assign(&mut self, other: Self)

Disables all flags enabled in the set.

-
source§

impl UpperHex for AtaError

source§

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

Formats the value using the given formatter.
source§

impl Copy for AtaError

source§

impl Eq for AtaError

source§

impl StructuralEq for AtaError

source§

impl StructuralPartialEq for AtaError

Auto Trait Implementations§

§

impl RefUnwindSafe for AtaError

§

impl Send for AtaError

§

impl Sync for AtaError

§

impl Unpin for AtaError

§

impl UnwindSafe for AtaError

Blanket Implementations§

source§

impl<T> Any for Twhere +

source§

impl UpperHex for AtaError

source§

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

Formats the value using the given formatter.
source§

impl Copy for AtaError

source§

impl Eq for AtaError

source§

impl StructuralEq for AtaError

source§

impl StructuralPartialEq for AtaError

Auto Trait Implementations§

§

impl RefUnwindSafe for AtaError

§

impl Send for AtaError

§

impl Sync for AtaError

§

impl Unpin for AtaError

§

impl UnwindSafe for AtaError

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
§

impl<T> CallHasher for Twhere diff --git a/doc/ata/struct.AtaStatus.html b/doc/ata/struct.AtaStatus.html index ab8180f3ac..076fd0b593 100644 --- a/doc/ata/struct.AtaStatus.html +++ b/doc/ata/struct.AtaStatus.html @@ -61,16 +61,16 @@
Safety
between Self::all() and self (e.g. Self::all() - self)

This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

-

Trait Implementations§

source§

impl Binary for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<AtaStatus> for AtaStatus

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

-
§

type Output = AtaStatus

The resulting type after applying the & operator.
source§

impl BitAndAssign<AtaStatus> for AtaStatus

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

+

Trait Implementations§

source§

impl Binary for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<AtaStatus> for AtaStatus

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

+
§

type Output = AtaStatus

The resulting type after applying the & operator.
source§

impl BitAndAssign<AtaStatus> for AtaStatus

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

source§

impl BitOr<AtaStatus> for AtaStatus

source§

fn bitor(self, other: AtaStatus) -> Self

Returns the union of the two sets of flags.

-
§

type Output = AtaStatus

The resulting type after applying the | operator.
source§

impl BitOrAssign<AtaStatus> for AtaStatus

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

+
§

type Output = AtaStatus

The resulting type after applying the | operator.
source§

impl BitOrAssign<AtaStatus> for AtaStatus

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

source§

impl BitXor<AtaStatus> for AtaStatus

source§

fn bitxor(self, other: Self) -> Self

Returns the left flags, but with all the right flags toggled.

-
§

type Output = AtaStatus

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<AtaStatus> for AtaStatus

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

-
source§

impl Clone for AtaStatus

source§

fn clone(&self) -> AtaStatus

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 AtaStatus

source§

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

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

impl Extend<AtaStatus> for AtaStatus

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl FromIterator<AtaStatus> for AtaStatus

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for AtaStatus

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 +

§

type Output = AtaStatus

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<AtaStatus> for AtaStatus

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

+
source§

impl Clone for AtaStatus

source§

fn clone(&self) -> AtaStatus

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 AtaStatus

source§

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

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

impl Extend<AtaStatus> for AtaStatus

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl FromIterator<AtaStatus> for AtaStatus

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for AtaStatus

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 LowerHex for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl Not for AtaStatus

source§

fn not(self) -> Self

Returns the complement of this set of flags.

-
§

type Output = AtaStatus

The resulting type after applying the ! operator.
source§

impl Octal for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl Ord for AtaStatus

source§

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

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

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

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

impl LowerHex for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl Not for AtaStatus

source§

fn not(self) -> Self

Returns the complement of this set of flags.

+
§

type Output = AtaStatus

The resulting type after applying the ! operator.
source§

impl Octal for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl Ord for AtaStatus

source§

fn cmp(&self, other: &AtaStatus) -> 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<Self>,

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

impl PartialEq<AtaStatus> for AtaStatus

source§

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

This method tests for self and other values to be equal, and is used @@ -79,7 +79,7 @@
Safety
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 Sub<AtaStatus> for AtaStatus

source§

fn sub(self, other: Self) -> Self

Returns the set difference of the two sets of flags.

§

type Output = AtaStatus

The resulting type after applying the - operator.
source§

impl SubAssign<AtaStatus> for AtaStatus

source§

fn sub_assign(&mut self, other: Self)

Disables all flags enabled in the set.

-
source§

impl UpperHex for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl Copy for AtaStatus

source§

impl Eq for AtaStatus

source§

impl StructuralEq for AtaStatus

source§

impl StructuralPartialEq for AtaStatus

Auto Trait Implementations§

§

impl RefUnwindSafe for AtaStatus

§

impl Send for AtaStatus

§

impl Sync for AtaStatus

§

impl Unpin for AtaStatus

§

impl UnwindSafe for AtaStatus

Blanket Implementations§

source§

impl<T> Any for Twhere +

source§

impl UpperHex for AtaStatus

source§

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

Formats the value using the given formatter.
source§

impl Copy for AtaStatus

source§

impl Eq for AtaStatus

source§

impl StructuralEq for AtaStatus

source§

impl StructuralPartialEq for AtaStatus

Auto Trait Implementations§

§

impl RefUnwindSafe for AtaStatus

§

impl Send for AtaStatus

§

impl Sync for AtaStatus

§

impl Unpin for AtaStatus

§

impl UnwindSafe for AtaStatus

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
§

impl<T> CallHasher for Twhere diff --git a/doc/cls/attr.cpu_local.html b/doc/cls/attr.cpu_local.html index 52fd721269..a0f8054c73 100644 --- a/doc/cls/attr.cpu_local.html +++ b/doc/cls/attr.cpu_local.html @@ -1,4 +1,4 @@ -cpu_local in cls - Rust

Attribute Macro cls::cpu_local

source ·
#[cpu_local]
Expand description

A macro for declaring CPU-local variables.

+cpu_local in cls - Rust

Attribute Macro cls::cpu_local

source ·
#[cpu_local]
Expand description

A macro for declaring CPU-local variables.

Variables must be an unsigned integer, bar u128.

The initialisation expression has no effect; to set the initial value, per_cpu::PerCpuData::new must be modified.

diff --git a/doc/cls/index.html b/doc/cls/index.html index 5757172237..91412f5a1c 100644 --- a/doc/cls/index.html +++ b/doc/cls/index.html @@ -1,4 +1,101 @@ -cls - Rust

Crate cls

source ·
Expand description

A library for defining CPU-local variables.

-

See cpu_local for more details.

+cls - Rust

Crate cls

source ·
Expand description

A library for defining CPU-local variables.

+

See cpu_local for more details on how to define a CPU-local variable; the information below +is not required.

+

Implementation

+

There are two ways in which a crate can be linked:

+
    +
  • Statically, meaning it is linked at compile-time by an external linker.
  • +
  • Dynamically, meaning it is linked at runtime by mod_mgmt.
  • +
+

Since we have little control over the external linker, we are forced to write CLS code +that works with the external linker, despite the linker having no understanding of CLS. +This lack of understanding results in significant complexity in calculating the offset +of a CLS symbol.

+

Also there is no way to tell whether code was statically or dynamically linked, and so the same +CLS code must work with both static and dynamic linking. This results in additional complexity +in mod_mgmt because it must interface with this generic CLS code.

+

x86-64

Static linking

+

On x86_64, a TLS data image looks like

+
                       fs
+                        V
++-----------------------+--------------+------------------------+
+| statically linked TLS | TLS self ptr | dynamically linked TLS |
++-----------------------+--------------+------------------------+
+
+

where statically linked TLS is accessed using a negative offset from the fs +register.

+

Now with the way CLS works on Theseus, when we statically link CLS, the +linker believes we are prepending the cls section to the tls section like

+ +
                       gs                            fs
+                        V                             V
++-----------------------+-----+-----------------------+
+| statically linked cls | 000 | statically linked TLS |
++-----------------------+-----+-----------------------+
+

where 000 are padding bytes to align the start of the statically linked +TLS to a page boundary. So the linker will write negative offsets to CLS +relocations based on their distance from the end of the statically linked +TLS.

+

However, in reality we have a completely separate data image for CLS, and +so we need to figure out the negative offset from the gs register based on +the negative offset from the fs register, the CLS size, the TLS size, and +the fact that the start of the TLS section is on the next page boundary after +the end of the CLS section.

+
from_cls_start
+   +-----+
+   |     |
+   |     |        -{cls}@TPOFF
+   |     +------------------------------+
+   |     |                              |
+   |     |  -offset                     |
+   |     +----------+                   |
+   |     |          |                   |
+   V     V          V                   V
+   +----------------+-----+-------------+
+   |      .cls      | 000 | .tls/.tdata |
+   +----------------+-----+-------------+
+   ^                ^     ^             ^
+   |                |     |             |
+   |                gs    |            fs
+   |                |     |             |
+   +----------------+     +-------------+
+   |    cls_size          |   tls_size
+   |                      |
+  a*4kb                  b*4kb
+   |                      |
+   +----------------------+
+    cls_start_to_tls_start
+
+

where a*4kb means that the address is a multiple of 4kb i.e. +page-aligned.

+

Dynamic linking

+

When a crate is dynamically linked on x86_64, mod_mgmt will set __THESEUS_CLS_SIZE +and __THESEUS_TLS_SIZE to usize::MAX. Prior to calculating the offset, the CLS +access code will check if the variables are set to their sentinel values and if so, +it will simply use the provided offset since mod_mgmt would have computed it +correctly, unlike the external linker.

+

aarch64

+

Unlike x86_64, aarch64 doesn’t have different branches for statically linked, and +dynamically linked variables. This is because on aarch64, there are no negative +offset shenanigans. A TLS data image looks like

+ +
fs
+V
++-----------------------+------------------------+
+| statically linked TLS | dynamically linked TLS |
++-----------------------+------------------------+
+

Unlike x86_64, the .cls section is located after .tls in a binary and so the +linker thinks the data image looks like

+ +
fs
+V
++-----------------------+-----+-----------------------+------------------------+
+| statically linked TLS | 000 | statically linked CLS | dynamically linked TLS |
++-----------------------+-----+-----------------------+------------------------+
+

where 000 are padding bytes to align the start of the statically linked CLS to +a page boundary.

+

Hence, CLS symbols have an offset that is incorrect by +tls_size.next_multiple_of(0x1000), or 0 if there is not TLS section. So, when +loading CLS symbols on aarch64, mod_mgmt simply sets __THESEUS_TLS_SIZE to 0.

Traits

  • A trait abstracting over guards that ensure atomicity with respect to the current CPU.

Attribute Macros

  • A macro for declaring CPU-local variables.
\ No newline at end of file diff --git a/doc/cls/trait.CpuAtomicGuard.html b/doc/cls/trait.CpuAtomicGuard.html index 7802a74c77..b403e721c7 100644 --- a/doc/cls/trait.CpuAtomicGuard.html +++ b/doc/cls/trait.CpuAtomicGuard.html @@ -1,5 +1,5 @@ -CpuAtomicGuard in cls - Rust

Trait cls::CpuAtomicGuard

source ·
pub trait CpuAtomicGuard: Sealed { }
Expand description

A trait abstracting over guards that ensure atomicity with respect to the +CpuAtomicGuard in cls - Rust

Trait cls::CpuAtomicGuard

source ·
pub trait CpuAtomicGuard: Sealed { }
Expand description

A trait abstracting over guards that ensure atomicity with respect to the current CPU.

This trait is “sealed” and cannot be implemented by anything outside this crate.

-

Implementations on Foreign Types§

source§

impl CpuAtomicGuard for HeldInterrupts

source§

impl CpuAtomicGuard for PreemptionGuard

Implementors§

\ No newline at end of file +

Implementations on Foreign Types§

source§

impl CpuAtomicGuard for HeldInterrupts

source§

impl CpuAtomicGuard for PreemptionGuard

Implementors§

\ No newline at end of file diff --git a/doc/cls_allocator/all.html b/doc/cls_allocator/all.html new file mode 100644 index 0000000000..fe61711904 --- /dev/null +++ b/doc/cls_allocator/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/doc/cls_allocator/fn.add_dynamic_section.html b/doc/cls_allocator/fn.add_dynamic_section.html new file mode 100644 index 0000000000..ddedccf87b --- /dev/null +++ b/doc/cls_allocator/fn.add_dynamic_section.html @@ -0,0 +1,7 @@ +add_dynamic_section in cls_allocator - Rust
pub fn add_dynamic_section(
+    section: LoadedSection,
+    alignment: usize
+) -> Result<(usize, Arc<LoadedSection>), LocalStorageInitializerError>
Expand description

Adds a dynamic CLS section to the global CLS initializer.

+

The CLS register will not be updated until either reload or +reload_current_cpu is called.

+
\ No newline at end of file diff --git a/doc/cls_allocator/fn.add_static_section.html b/doc/cls_allocator/fn.add_static_section.html new file mode 100644 index 0000000000..c184ab0830 --- /dev/null +++ b/doc/cls_allocator/fn.add_static_section.html @@ -0,0 +1,9 @@ +add_static_section in cls_allocator - Rust
pub fn add_static_section(
+    section: LoadedSection,
+    offset: usize,
+    total_static_storage_size: usize
+) -> Result<StrongSectionRef, LocalStorageInitializerError>
Expand description

Adds a CLS section with a pre-determined offset to the global CLS +initializer.

+

The CLS register will not be updated until either reload or +reload_current_cpu is called.

+
\ No newline at end of file diff --git a/doc/cls_allocator/fn.reload.html b/doc/cls_allocator/fn.reload.html new file mode 100644 index 0000000000..596313f5f5 --- /dev/null +++ b/doc/cls_allocator/fn.reload.html @@ -0,0 +1 @@ +reload in cls_allocator - Rust

Function cls_allocator::reload

source ·
pub fn reload()
\ No newline at end of file diff --git a/doc/cls_allocator/fn.reload_current_cpu.html b/doc/cls_allocator/fn.reload_current_cpu.html new file mode 100644 index 0000000000..473b2ca358 --- /dev/null +++ b/doc/cls_allocator/fn.reload_current_cpu.html @@ -0,0 +1,3 @@ +reload_current_cpu in cls_allocator - Rust
pub fn reload_current_cpu()
Expand description

Generates a new data image for the current CPU and sets the CLS register +accordingly.

+
\ No newline at end of file diff --git a/doc/cls_allocator/index.html b/doc/cls_allocator/index.html new file mode 100644 index 0000000000..cb50accb40 --- /dev/null +++ b/doc/cls_allocator/index.html @@ -0,0 +1,3 @@ +cls_allocator - Rust

Crate cls_allocator

source ·

Functions

\ No newline at end of file diff --git a/doc/cls_allocator/sidebar-items.js b/doc/cls_allocator/sidebar-items.js new file mode 100644 index 0000000000..c735aa6474 --- /dev/null +++ b/doc/cls_allocator/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["add_dynamic_section","add_static_section","reload","reload_current_cpu"]}; \ No newline at end of file diff --git a/doc/cls_macros/attr.cpu_local.html b/doc/cls_macros/attr.cpu_local.html index 0d7042cb81..d9c5652fb9 100644 --- a/doc/cls_macros/attr.cpu_local.html +++ b/doc/cls_macros/attr.cpu_local.html @@ -1,4 +1,4 @@ -cpu_local in cls_macros - Rust

Attribute Macro cls_macros::cpu_local

source ·
#[cpu_local]
Expand description

A macro for declaring CPU-local variables.

+cpu_local in cls_macros - Rust

Attribute Macro cls_macros::cpu_local

source ·
#[cpu_local]
Expand description

A macro for declaring CPU-local variables.

Variables must be an unsigned integer, bar u128.

The initialisation expression has no effect; to set the initial value, per_cpu::PerCpuData::new must be modified.

diff --git a/doc/cls_macros/index.html b/doc/cls_macros/index.html index 9338d9fb5e..cfcae280df 100644 --- a/doc/cls_macros/index.html +++ b/doc/cls_macros/index.html @@ -1,2 +1,2 @@ -cls_macros - Rust

Crate cls_macros

source ·
Expand description

Exports the [cpu_local] macro.

+cls_macros - Rust

Crate cls_macros

source ·
Expand description

Exports the cpu_local macro.

Attribute Macros

  • A macro for declaring CPU-local variables.
\ No newline at end of file diff --git a/doc/compositor/trait.CompositableRegion.html b/doc/compositor/trait.CompositableRegion.html index c62dc234c8..d39215c90f 100644 --- a/doc/compositor/trait.CompositableRegion.html +++ b/doc/compositor/trait.CompositableRegion.html @@ -31,16 +31,16 @@ The dest_coord is the coordinate in the destination buffer (relative to its top-left corner) where the src_fb will be composited (starting at the src_fb’s top-left corner). src_fb_row_range is the index range of rows in the source framebuffer to blend.

-

Implementations on Foreign Types§

source§

impl CompositableRegion for Rectangle

source§

fn row_range(&self) -> Range<isize>

source§

fn size(&self) -> usize

source§

fn blend_buffers<P: Pixel>( +

Implementations on Foreign Types§

source§

impl CompositableRegion for Coord

source§

fn row_range(&self) -> Range<isize>

source§

fn size(&self) -> usize

source§

fn blend_buffers<P: Pixel>( &self, src_fb: &Framebuffer<P>, dest_fb: &mut Framebuffer<P>, dest_coord: Coord, - src_fb_row_range: Range<usize> -) -> Result<(), &'static str>

source§

impl CompositableRegion for Coord

source§

fn row_range(&self) -> Range<isize>

source§

fn size(&self) -> usize

source§

fn blend_buffers<P: Pixel>( + _src_fb_row_range: Range<usize> +) -> Result<(), &'static str>

source§

impl CompositableRegion for Rectangle

source§

fn row_range(&self) -> Range<isize>

source§

fn size(&self) -> usize

source§

fn blend_buffers<P: Pixel>( &self, src_fb: &Framebuffer<P>, dest_fb: &mut Framebuffer<P>, dest_coord: Coord, - _src_fb_row_range: Range<usize> + src_fb_row_range: Range<usize> ) -> Result<(), &'static str>

Implementors§

\ No newline at end of file diff --git a/doc/cpu_local/all.html b/doc/cpu_local/all.html deleted file mode 100644 index da8a19ac01..0000000000 --- a/doc/cpu_local/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Functions

\ No newline at end of file diff --git a/doc/cpu_local/enum.PerCpuField.html b/doc/cpu_local/enum.PerCpuField.html deleted file mode 100644 index e7a8234710..0000000000 --- a/doc/cpu_local/enum.PerCpuField.html +++ /dev/null @@ -1,20 +0,0 @@ -PerCpuField in cpu_local - Rust
pub enum PerCpuField {
-    CpuId,
-    PreemptionCount,
-    TaskSwitchPreemptionGuard,
-    DropAfterTaskSwitch,
-}
Expand description

The available CPU-local variables, i.e., fields in per_cpu::PerCpuData struct.

-

Variants§

§

CpuId

§

PreemptionCount

§

TaskSwitchPreemptionGuard

§

DropAfterTaskSwitch

Implementations§

source§

impl PerCpuField

source

pub const fn offset(&self) -> usize

Returns the offset of this field in the per_cpu::PerCpuData struct.

-

Trait Implementations§

source§

impl PartialEq<PerCpuField> for PerCpuField

source§

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

source§

impl StructuralEq for PerCpuField

source§

impl StructuralPartialEq for PerCpuField

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, 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.
\ No newline at end of file diff --git a/doc/cpu_local/fn.init.html b/doc/cpu_local/fn.init.html deleted file mode 100644 index 44b4605916..0000000000 --- a/doc/cpu_local/fn.init.html +++ /dev/null @@ -1,8 +0,0 @@ -init in cpu_local - Rust

Function cpu_local::init

source ·
pub fn init<P>(
-    cpu_id: u32,
-    size_of_per_cpu_data: usize,
-    per_cpu_data_initializer: impl FnOnce(usize) -> P
-) -> Result<(), &'static str>
Expand description

Initializes the CPU-local data region for this CPU.

-

Note: this is invoked by the per_cpu crate; -other crates do not need to invoke this.

-
\ No newline at end of file diff --git a/doc/cpu_local/index.html b/doc/cpu_local/index.html deleted file mode 100644 index aac381786c..0000000000 --- a/doc/cpu_local/index.html +++ /dev/null @@ -1,10 +0,0 @@ -cpu_local - Rust

Crate cpu_local

source ·
Expand description

Offers types and macros to declare and access CPU-local storage (per-CPU variables).

-

CPU-local variables cannot be used until after a given CPU has been initialized, -i.e., its Local APIC (on x86_64) has been discovered and properly configured. -Currently, the init() routine in this crate should be invoked by -another init routine from the per_cpu crate.

-

Note that Rust offers the #[thread_local] attribute for thread-local storage (TLS), -but there is no equivalent for CPU-local storage. -On x86_64, TLS areas use the fs segment register for the TLS base, -and this crate uses the gs segment register for the CPU-local base.

-

Structs

  • A reference to a CPU-local variable.

Enums

  • The available CPU-local variables, i.e., fields in per_cpu::PerCpuData struct.

Traits

  • This trait must be implemented for each field in per_cpu::PerCpuData.

Functions

  • Initializes the CPU-local data region for this CPU.
\ No newline at end of file diff --git a/doc/cpu_local/sidebar-items.js b/doc/cpu_local/sidebar-items.js deleted file mode 100644 index 3bf1b67786..0000000000 --- a/doc/cpu_local/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["PerCpuField"],"fn":["init"],"struct":["CpuLocal"],"trait":["CpuLocalField"]}; \ No newline at end of file diff --git a/doc/cpu_local/struct.CpuLocal.html b/doc/cpu_local/struct.CpuLocal.html deleted file mode 100644 index a34b5e93a3..0000000000 --- a/doc/cpu_local/struct.CpuLocal.html +++ /dev/null @@ -1,58 +0,0 @@ -CpuLocal in cpu_local - Rust

Struct cpu_local::CpuLocal

source ·
pub struct CpuLocal<T: CpuLocalField>(_);
Expand description

A reference to a CPU-local variable.

-

Usage Notes

-
    -
  • This does not currently permit or handle usage of CpuLocal::with_mut() -from within an interrupt handler context. -
      -
    • Interrupt handler contexts should only access a CpuLocal immutably.
    • -
    • If you need to mutate/modify a CPU-local variable from within an -interrupt handler, please file an issue to alert the Theseus developers.
    • -
    -
  • -
  • This struct does not contain an instance of the type T. -Thus, dropping it has no effect.
  • -
-

Implementations§

source§

impl<T: CpuLocalField> CpuLocal<T>

source

pub const fn new(field: PerCpuField) -> Self

Creates a new reference to a predefined CPU-local variable.

-
Arguments
-
    -
  • field: the field in the per_cpu::PerCpuData struct that -you wish to access via the returned CpuLocal object.
  • -
-

The type T: CpuLocalField must be specified with the turbofish operator:

- -
static CPU_ID: CpuLocal<CpuLocalCpuId> = CpuId::new(PerCpuField::CpuId);
-
source

pub fn with<F, R>(&self, func: F) -> Rwhere - F: FnOnce(&T) -> R,

Invokes the given func with an immutable reference to this CpuLocal variable.

-

Preemption will be disabled for the duration of this function -in order to ensure that this task cannot be switched away from -or migrated to another CPU.

-

If the caller has already disabled preemption, it is more efficient to -use the [with_preempt()] function, which allows the caller to pass in -an existing preemption guard to prove that preemption is already disabled.

-
source

pub fn with_preempt<F, R>(&self, _guard: &PreemptionGuard, func: F) -> Rwhere - F: FnOnce(&T) -> R,

Invokes the given func with an immutable reference to this CpuLocal variable.

-

This function accepts an existing preemption guard, which efficiently proves -that preemption has already been disabled on this CPU.

-
source

pub fn with_mut<F, R>(&self, func: F) -> Rwhere - F: FnOnce(&mut T) -> R,

Invokes the given func with a mutable reference to this CpuLocal variable.

-

Interrupts will be disabled for the duration of this function -in order to ensure atomicity while this per-CPU state is being modified.

-
source§

impl<T> CpuLocal<T>where - T: Copy + CpuLocalField,

source

pub fn get(&self) -> T

Returns a copy of this CpuLocal’s inner value of type T.

-

This is a convenience function only available for types where T: Copy.

-

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for CpuLocal<T>where - T: RefUnwindSafe,

§

impl<T> Send for CpuLocal<T>where - T: Send,

§

impl<T> Sync for CpuLocal<T>where - T: Sync,

§

impl<T> Unpin for CpuLocal<T>where - T: Unpin,

§

impl<T> UnwindSafe for CpuLocal<T>where - T: UnwindSafe,

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, 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.
\ No newline at end of file diff --git a/doc/cpu_local/trait.CpuLocalField.html b/doc/cpu_local/trait.CpuLocalField.html deleted file mode 100644 index 40d8b496a3..0000000000 --- a/doc/cpu_local/trait.CpuLocalField.html +++ /dev/null @@ -1,12 +0,0 @@ -CpuLocalField in cpu_local - Rust
pub unsafe trait CpuLocalField: Sized {
-    const FIELD: PerCpuField;
-}
Expand description

This trait must be implemented for each field in per_cpu::PerCpuData.

-

Safety

-

This is marked unsafe because the implementor must guarantee -that the associated FIELD constant is correctly specified.

-
    -
  • For example, the implementation of this trait for CpuId must specify -the FIELD const as PerCpuField::CpuId, -but we cannot verify that here due to cyclic dependency issues.
  • -
-

Required Associated Constants§

Implementors§

\ No newline at end of file diff --git a/doc/crate_metadata/enum.SectionType.html b/doc/crate_metadata/enum.SectionType.html index 03da2a5084..8c43dd6d4f 100644 --- a/doc/crate_metadata/enum.SectionType.html +++ b/doc/crate_metadata/enum.SectionType.html @@ -1,10 +1,11 @@ -SectionType in crate_metadata - Rust
pub enum SectionType {
+SectionType in crate_metadata - Rust
pub enum SectionType {
     Text,
     Rodata,
     Data,
     Bss,
     TlsData,
     TlsBss,
+    Cls,
     GccExceptTable,
     EhFrame,
 }
Expand description

The possible types of sections that can be loaded from a crate object file.

@@ -16,6 +17,8 @@ for a thread-local storage (TLS) area.

§

TlsBss

A .tbss section is a read-only section that holds all-zero data for a thread-local storage (TLS) area. This is is effectively an empty placeholder: the all-zero data section doesn’t actually exist in memory.

+
§

Cls

A .cls section is a read-only section that holds the initial data “image” for a CPU-local +(CLS) area.

§

GccExceptTable

A .gcc_except_table section contains landing pads for exception handling, comprising the LSDA (Language Specific Data Area), which is effectively used to determine when we should stop the stack unwinding process diff --git a/doc/crate_metadata/fn.section_name_str_ref.html b/doc/crate_metadata/fn.section_name_str_ref.html index b83c5d305c..673f4251fb 100644 --- a/doc/crate_metadata/fn.section_name_str_ref.html +++ b/doc/crate_metadata/fn.section_name_str_ref.html @@ -1,4 +1,4 @@ -section_name_str_ref in crate_metadata - Rust

pub fn section_name_str_ref(section_type: &SectionType) -> StrRef
Expand description

Returns the default name for the given SectionType as a StrRef.

+section_name_str_ref in crate_metadata - Rust
pub fn section_name_str_ref(section_type: &SectionType) -> StrRef
Expand description

Returns the default name for the given SectionType as a StrRef.

This is useful for deduplicating section name strings in memory, as the returned StrRef will point back to a single instance of that section name string that can be shared across the system.

diff --git a/doc/crate_metadata/fn.write_relocation.html b/doc/crate_metadata/fn.write_relocation.html index ba9dba672d..37e00ea3d7 100644 --- a/doc/crate_metadata/fn.write_relocation.html +++ b/doc/crate_metadata/fn.write_relocation.html @@ -1,4 +1,4 @@ -write_relocation in crate_metadata - Rust
pub fn write_relocation(
+write_relocation in crate_metadata - Rust
pub fn write_relocation(
     relocation_entry: RelocationEntry,
     target_sec_slice: &mut [u8],
     target_sec_offset: usize,
diff --git a/doc/crate_metadata/index.html b/doc/crate_metadata/index.html
index 138192e847..4865c1689f 100644
--- a/doc/crate_metadata/index.html
+++ b/doc/crate_metadata/index.html
@@ -1,4 +1,4 @@
-crate_metadata - Rust

Crate crate_metadata

source ·
Expand description

Defines types that contain metadata about crates loaded in Theseus and their dependencies.

+crate_metadata - Rust

Crate crate_metadata

source ·
Expand description

Defines types that contain metadata about crates loaded in Theseus and their dependencies.

Representing dependencies between sections

If one section A references or uses another section B, then we colloquially say that A depends on B.

diff --git a/doc/crate_metadata/struct.LoadedCrate.html b/doc/crate_metadata/struct.LoadedCrate.html index da585af066..509b0c3ee1 100644 --- a/doc/crate_metadata/struct.LoadedCrate.html +++ b/doc/crate_metadata/struct.LoadedCrate.html @@ -1,4 +1,4 @@ -LoadedCrate in crate_metadata - Rust
pub struct LoadedCrate {
+LoadedCrate in crate_metadata - Rust
pub struct LoadedCrate {
     pub crate_name: StrRef,
     pub object_file: FileRef,
     pub debug_symbols_file: WeakFileRef,
@@ -8,6 +8,7 @@
     pub data_pages: Option<(Arc<Mutex<MappedPages>>, Range<VirtualAddress>)>,
     pub global_sections: BTreeSet<Shndx>,
     pub tls_sections: BTreeSet<Shndx>,
+    pub cls_sections: BTreeSet<Shndx>,
     pub data_sections: BTreeSet<Shndx>,
     pub reexported_symbols: BTreeSet<StrRef>,
 }
Expand description

Represents a single crate whose object file has been @@ -54,6 +55,7 @@

§tls_sections: BTreeSet<Shndx>

The set of thread-local storage (TLS) symbols in this crate. The Shndx values in this set are the section index (shndx) numbers, which can be used as the key to look up the actual LoadedSection in the sections list above.

+
§cls_sections: BTreeSet<Shndx>

The set of CPU-local storage (CLS) symbols in this crate.

§data_sections: BTreeSet<Shndx>

The set of .data and .bss sections in this crate. The Shndx values in this set are the section index (shndx) numbers, which can be used as the key to look up the actual LoadedSection in the sections list above.

@@ -69,31 +71,31 @@ then keyboard::init::h123 will be added to this set.

When a crate is first loaded, this will be empty by default, because this crate will only have populated its global_sections set during loading.

-

Implementations§

source§

impl LoadedCrate

source

pub fn get_function_section(&self, func_name: &str) -> Option<&StrongSectionRef>

Returns the LoadedSection of type SectionType::Text that matches the requested function name, if it exists in this LoadedCrate. +

Implementations§

source§

impl LoadedCrate

source

pub fn get_function_section(&self, func_name: &str) -> Option<&StrongSectionRef>

Returns the LoadedSection of type SectionType::Text that matches the requested function name, if it exists in this LoadedCrate. Only matches demangled names, e.g., “my_crate::foo”.

-
source

pub fn data_sections_iter(&self) -> impl Iterator<Item = &StrongSectionRef>

A convenience function to iterate over only the data (.data or .bss) sections in this crate.

-
source

pub fn global_sections_iter(&self) -> impl Iterator<Item = &StrongSectionRef>

A convenience function to iterate over only the global (public) sections in this crate.

-
source

pub fn find_section<F>(&self, predicate: F) -> Option<&StrongSectionRef>where +

source

pub fn data_sections_iter(&self) -> impl Iterator<Item = &StrongSectionRef>

A convenience function to iterate over only the data (.data or .bss) sections in this crate.

+
source

pub fn global_sections_iter(&self) -> impl Iterator<Item = &StrongSectionRef>

A convenience function to iterate over only the global (public) sections in this crate.

+
source

pub fn find_section<F>(&self, predicate: F) -> Option<&StrongSectionRef>where F: Fn(&LoadedSection) -> bool,

Returns the first LoadedSection that matches the given predicate, i.e., for which the predicate closure returns true.

If you need to check for multiple matches, then it’s best to iterate over the sections in this crate yourself.

-
source

pub fn crate_name_without_hash(&self) -> &str

Returns the substring of this crate’s name that excludes the trailing hash. +

source

pub fn crate_name_without_hash(&self) -> &str

Returns the substring of this crate’s name that excludes the trailing hash. If there is no hash, then it returns the entire name.

-
source

pub fn crate_name_as_prefix(&self) -> String

Returns this crate name as a symbol prefix, including a trailing “::”. +

source

pub fn crate_name_as_prefix(&self) -> String

Returns this crate name as a symbol prefix, including a trailing “::”. If there is no hash, then it returns the entire name with a trailing “::”.

Example
  • Crate name: “device_manager-e3769b63863a4030”, return value: “device_manager::
  • Crate name: “hello return value: "hello::`“
-
source

pub fn crates_dependent_on_me(&self) -> Vec<WeakCrateRef>

Currently may contain duplicates!

-
source

pub fn crates_i_depend_on(&self) -> Vec<WeakCrateRef>

Returns the set of crates that this crate depends on. +

source

pub fn crates_dependent_on_me(&self) -> Vec<WeakCrateRef>

Currently may contain duplicates!

+
source

pub fn crates_i_depend_on(&self) -> Vec<WeakCrateRef>

Returns the set of crates that this crate depends on. Only includes direct dependencies “one hop” away, not recursive dependencies “multiples hops” away.

Currently, the list may include duplicates. The caller is responsible for filtering out duplicates when using the list.

-

Trait Implementations§

source§

impl Debug for LoadedCrate

source§

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

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

impl Drop for LoadedCrate

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +

Trait Implementations§

source§

impl Debug for LoadedCrate

source§

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

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

impl Drop for LoadedCrate

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

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.

diff --git a/doc/crate_metadata/struct.LoadedSection.html b/doc/crate_metadata/struct.LoadedSection.html index 7adf67256e..aad4315187 100644 --- a/doc/crate_metadata/struct.LoadedSection.html +++ b/doc/crate_metadata/struct.LoadedSection.html @@ -1,4 +1,4 @@ -LoadedSection in crate_metadata - Rust
#[non_exhaustive]
pub struct LoadedSection { +LoadedSection in crate_metadata - Rust
#[non_exhaustive]
pub struct LoadedSection { pub name: StrRef, pub typ: SectionType, pub global: bool, @@ -34,7 +34,7 @@

Examples

§parent_crate: WeakCrateRef

The LoadedCrate object that contains/owns this section

§inner: RwLock<LoadedSectionInner>

The inner contents of a section that could possibly change after the section was initially loaded and linked.

-

Implementations§

source§

impl LoadedSection

source

pub fn new( +

Implementations§

source§

impl LoadedSection

source

pub fn new( typ: SectionType, name: StrRef, mapped_pages: Arc<Mutex<MappedPages>>, @@ -44,7 +44,7 @@

Examples

global: bool, parent_crate: WeakCrateRef ) -> LoadedSection

Create a new LoadedSection, with an empty dependencies list.

-
source

pub fn with_dependencies( +

source

pub fn with_dependencies( typ: SectionType, name: StrRef, mapped_pages: Arc<Mutex<MappedPages>>, @@ -56,20 +56,20 @@

Examples

sections_i_depend_on: Vec<StrongDependency>, sections_dependent_on_me: Vec<WeakDependent> ) -> LoadedSection

Same as [new()](#method.new), but uses the given dependencies` instead of the default empty list.

-
source

pub fn name_without_hash(&self) -> &str

Returns the substring of this section’s name that excludes the trailing hash.

+
source

pub fn name_without_hash(&self) -> &str

Returns the substring of this section’s name that excludes the trailing hash.

See the identical associated function section_name_without_hash() for more.

-
source

pub fn section_name_without_hash(sec_name: &str) -> &str

Returns the substring of the given section’s name that excludes the trailing hash, +

source

pub fn section_name_without_hash(sec_name: &str) -> &str

Returns the substring of the given section’s name that excludes the trailing hash, but includes the hash delimiter “::h”. If there is no hash, then it returns the full section name unchanged.

Examples

name: “keyboard_new::init::h832430094f98e56b”, return value: “keyboard_new::init::h” name: “start_me”, return value: “start_me

-
source

pub fn find_weak_dependent( +

source

pub fn find_weak_dependent( &self, matching_section: &StrongSectionRef ) -> Option<usize>

Returns the index of the first WeakDependent object in this LoadedSection’s sections_dependent_on_me list in which the section matches the given matching_section

-
source

pub fn copy_section_data_to( +

source

pub fn copy_section_data_to( &self, destination_section: &LoadedSection ) -> Result<(), &'static str>

Copies the actual data contents of this LoadedSection to the given destination_section. @@ -80,7 +80,7 @@

Examples
  • The given destination_section must be mapped as writable, basically, it must be a .data or .bss section.
  • -
    source

    pub unsafe fn as_func<F>(&self) -> Result<&F, &'static str>

    Reinterprets this section’s underlying MappedPages memory region as an executable function.

    +
    source

    pub unsafe fn as_func<F>(&self) -> Result<&F, &'static str>

    Reinterprets this section’s underlying MappedPages memory region as an executable function.

    The generic F parameter is the function type signature itself, e.g., fn(String) -> u8.

    Returns a reference to the function that is formed from the underlying memory region, with a lifetime dependent upon the lifetime of this section.

    @@ -101,7 +101,7 @@
    Examples
    let section = mod_mgmt::get_symbol_starting_with("my_crate::print::").upgrade().unwrap(); let print_func: &MyPrintFuncSignature = unsafe { section.as_func() }.unwrap(); print_func("hello there");
    -

    Trait Implementations§

    source§

    impl Debug for LoadedSection

    source§

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

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

    impl Display for LoadedSection

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl !RefUnwindSafe for LoadedSection

    §

    impl Send for LoadedSection

    §

    impl Sync for LoadedSection

    §

    impl Unpin for LoadedSection

    §

    impl !UnwindSafe for LoadedSection

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for LoadedSection

    source§

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

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

    impl Display for LoadedSection

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl !RefUnwindSafe for LoadedSection

    §

    impl Send for LoadedSection

    §

    impl Sync for LoadedSection

    §

    impl Unpin for LoadedSection

    §

    impl !UnwindSafe for LoadedSection

    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.

    diff --git a/doc/crate_metadata/struct.LoadedSectionInner.html b/doc/crate_metadata/struct.LoadedSectionInner.html index e44d7f6a2b..ebfc997f43 100644 --- a/doc/crate_metadata/struct.LoadedSectionInner.html +++ b/doc/crate_metadata/struct.LoadedSectionInner.html @@ -1,4 +1,4 @@ -LoadedSectionInner in crate_metadata - Rust
    #[non_exhaustive]
    pub struct LoadedSectionInner { +LoadedSectionInner in crate_metadata - Rust
    #[non_exhaustive]
    pub struct LoadedSectionInner { pub sections_i_depend_on: Vec<StrongDependency>, pub sections_dependent_on_me: Vec<WeakDependent>, }
    Expand description

    The parts of a LoadedSection that may be mutable, i.e., @@ -11,7 +11,7 @@ that are dependent upon this one before we remove this one. If we kept strong references to the sections dependent on this one, then we wouldn’t be able to remove/delete those sections before deleting this one.

    -

    Trait Implementations§

    source§

    impl Default for LoadedSectionInner

    source§

    fn default() -> LoadedSectionInner

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

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Default for LoadedSectionInner

    source§

    fn default() -> LoadedSectionInner

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

    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.

    diff --git a/doc/crate_metadata/struct.RelocationEntry.html b/doc/crate_metadata/struct.RelocationEntry.html index d8844d058b..4acc8503da 100644 --- a/doc/crate_metadata/struct.RelocationEntry.html +++ b/doc/crate_metadata/struct.RelocationEntry.html @@ -1,4 +1,4 @@ -RelocationEntry in crate_metadata - Rust
    pub struct RelocationEntry {
    +RelocationEntry in crate_metadata - Rust
    pub struct RelocationEntry {
         pub typ: u32,
         pub addend: usize,
         pub offset: usize,
    @@ -11,13 +11,13 @@
     when performing the calculation of the source value that is written to the target section.

    §offset: usize

    The offset from the starting virtual address of the target section that specifies where the relocation value should be written.

    -

    Implementations§

    source§

    impl RelocationEntry

    source

    pub fn from_elf_relocation(rela_entry: &Rela<u64>) -> RelocationEntry

    source

    pub fn is_absolute(&self) -> bool

    Returns true if the relocation type results in a relocation calculation +

    Implementations§

    source§

    impl RelocationEntry

    source

    pub fn from_elf_relocation(rela_entry: &Rela<u64>) -> RelocationEntry

    source

    pub fn is_absolute(&self) -> bool

    Returns true if the relocation type results in a relocation calculation in which the source value written into the target section does NOT depend on the target section’s address itself in any way (i.e., it only depends on the source section)

    -

    Trait Implementations§

    source§

    impl Clone for RelocationEntry

    source§

    fn clone(&self) -> RelocationEntry

    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 RelocationEntry

    source§

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

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

    impl PartialEq<RelocationEntry> for RelocationEntry

    source§

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

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for RelocationEntry

    source§

    fn clone(&self) -> RelocationEntry

    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 RelocationEntry

    source§

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

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

    impl PartialEq<RelocationEntry> for RelocationEntry

    source§

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

    source§

    impl Eq for RelocationEntry

    source§

    impl StructuralEq for RelocationEntry

    source§

    impl StructuralPartialEq for RelocationEntry

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

    source§

    impl Copy for RelocationEntry

    source§

    impl Eq for RelocationEntry

    source§

    impl StructuralEq for RelocationEntry

    source§

    impl StructuralPartialEq for RelocationEntry

    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.

    diff --git a/doc/crate_metadata/struct.StrongDependency.html b/doc/crate_metadata/struct.StrongDependency.html index fba4497b11..5d9d48d79d 100644 --- a/doc/crate_metadata/struct.StrongDependency.html +++ b/doc/crate_metadata/struct.StrongDependency.html @@ -1,4 +1,4 @@ -StrongDependency in crate_metadata - Rust
    pub struct StrongDependency {
    +StrongDependency in crate_metadata - Rust
    pub struct StrongDependency {
         pub section: StrongSectionRef,
         pub relocation: RelocationEntry,
     }
    Expand description

    A representation that the owner A of (a LoadedSection object containing) this struct @@ -10,7 +10,7 @@

    This is the inverse of the WeakDependency type.

    Fields§

    §section: StrongSectionRef

    A strong reference to the LoadedSection B that the owner of this struct (A) depends on.

    §relocation: RelocationEntry

    The details of the relocation action that was performed.

    -

    Trait Implementations§

    source§

    impl Clone for StrongDependency

    source§

    fn clone(&self) -> StrongDependency

    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 StrongDependency

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Clone for StrongDependency

    source§

    fn clone(&self) -> StrongDependency

    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 StrongDependency

    source§

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

    Formats the value using the given formatter. Read more

    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.

    diff --git a/doc/crate_metadata/struct.WeakDependent.html b/doc/crate_metadata/struct.WeakDependent.html index 089f059281..9bbe2a8d0d 100644 --- a/doc/crate_metadata/struct.WeakDependent.html +++ b/doc/crate_metadata/struct.WeakDependent.html @@ -1,4 +1,4 @@ -WeakDependent in crate_metadata - Rust
    pub struct WeakDependent {
    +WeakDependent in crate_metadata - Rust
    pub struct WeakDependent {
         pub section: WeakSectionRef,
         pub relocation: RelocationEntry,
     }
    Expand description

    A representation that the section A in this struct @@ -12,7 +12,7 @@

    This is the inverse of the StrongDependency type.

    Fields§

    §section: WeakSectionRef

    A weak reference to the LoadedSection A that depends on the owner B of this struct.

    §relocation: RelocationEntry

    The details of the relocation action that was performed.

    -

    Trait Implementations§

    source§

    impl Clone for WeakDependent

    source§

    fn clone(&self) -> WeakDependent

    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 WeakDependent

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Clone for WeakDependent

    source§

    fn clone(&self) -> WeakDependent

    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 WeakDependent

    source§

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

    Formats the value using the given formatter. Read more

    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.

    diff --git a/doc/crate_metadata_serde/all.html b/doc/crate_metadata_serde/all.html index 751802c946..2216fc7498 100644 --- a/doc/crate_metadata_serde/all.html +++ b/doc/crate_metadata_serde/all.html @@ -1 +1 @@ -List of all items in this crate
    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.BSS_SECTION_NAME.html b/doc/crate_metadata_serde/constant.BSS_SECTION_NAME.html index 6d51268dd0..e04c34222c 100644 --- a/doc/crate_metadata_serde/constant.BSS_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.BSS_SECTION_NAME.html @@ -1 +1 @@ -BSS_SECTION_NAME in crate_metadata_serde - Rust
    pub const BSS_SECTION_NAME: &str = ".bss";
    \ No newline at end of file +BSS_SECTION_NAME in crate_metadata_serde - Rust
    pub const BSS_SECTION_NAME: &str = ".bss";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.CLS_SECTION_FLAG.html b/doc/crate_metadata_serde/constant.CLS_SECTION_FLAG.html new file mode 100644 index 0000000000..3ff78fe029 --- /dev/null +++ b/doc/crate_metadata_serde/constant.CLS_SECTION_FLAG.html @@ -0,0 +1,2 @@ +CLS_SECTION_FLAG in crate_metadata_serde - Rust
    pub const CLS_SECTION_FLAG: u64 = 0x100000;
    Expand description

    The flag identifying CLS sections.

    +
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.CLS_SECTION_NAME.html b/doc/crate_metadata_serde/constant.CLS_SECTION_NAME.html new file mode 100644 index 0000000000..51df7f3d65 --- /dev/null +++ b/doc/crate_metadata_serde/constant.CLS_SECTION_NAME.html @@ -0,0 +1 @@ +CLS_SECTION_NAME in crate_metadata_serde - Rust
    pub const CLS_SECTION_NAME: &str = ".cls";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.CLS_SYMBOL_TYPE.html b/doc/crate_metadata_serde/constant.CLS_SYMBOL_TYPE.html new file mode 100644 index 0000000000..b8a75344d6 --- /dev/null +++ b/doc/crate_metadata_serde/constant.CLS_SYMBOL_TYPE.html @@ -0,0 +1,2 @@ +CLS_SYMBOL_TYPE in crate_metadata_serde - Rust
    pub const CLS_SYMBOL_TYPE: u8 = 0xa;
    Expand description

    The type identifying CLS symbols.

    +
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.DATA_SECTION_NAME.html b/doc/crate_metadata_serde/constant.DATA_SECTION_NAME.html index ae8699254d..3795694dfd 100644 --- a/doc/crate_metadata_serde/constant.DATA_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.DATA_SECTION_NAME.html @@ -1 +1 @@ -DATA_SECTION_NAME in crate_metadata_serde - Rust
    pub const DATA_SECTION_NAME: &str = ".data";
    \ No newline at end of file +DATA_SECTION_NAME in crate_metadata_serde - Rust
    pub const DATA_SECTION_NAME: &str = ".data";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.EH_FRAME_SECTION_NAME.html b/doc/crate_metadata_serde/constant.EH_FRAME_SECTION_NAME.html index 05b059102b..fe043a3504 100644 --- a/doc/crate_metadata_serde/constant.EH_FRAME_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.EH_FRAME_SECTION_NAME.html @@ -1 +1 @@ -EH_FRAME_SECTION_NAME in crate_metadata_serde - Rust
    pub const EH_FRAME_SECTION_NAME: &str = ".eh_frame";
    \ No newline at end of file +EH_FRAME_SECTION_NAME in crate_metadata_serde - Rust
    pub const EH_FRAME_SECTION_NAME: &str = ".eh_frame";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.GCC_EXCEPT_TABLE_SECTION_NAME.html b/doc/crate_metadata_serde/constant.GCC_EXCEPT_TABLE_SECTION_NAME.html index 2c3eb24a81..c7b8d14e9d 100644 --- a/doc/crate_metadata_serde/constant.GCC_EXCEPT_TABLE_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.GCC_EXCEPT_TABLE_SECTION_NAME.html @@ -1 +1 @@ -GCC_EXCEPT_TABLE_SECTION_NAME in crate_metadata_serde - Rust
    pub const GCC_EXCEPT_TABLE_SECTION_NAME: &str = ".gcc_except_table";
    \ No newline at end of file +GCC_EXCEPT_TABLE_SECTION_NAME in crate_metadata_serde - Rust
    pub const GCC_EXCEPT_TABLE_SECTION_NAME: &str = ".gcc_except_table";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.RODATA_SECTION_NAME.html b/doc/crate_metadata_serde/constant.RODATA_SECTION_NAME.html index 96f14486c7..69c2c6b4bf 100644 --- a/doc/crate_metadata_serde/constant.RODATA_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.RODATA_SECTION_NAME.html @@ -1 +1 @@ -RODATA_SECTION_NAME in crate_metadata_serde - Rust
    pub const RODATA_SECTION_NAME: &str = ".rodata";
    \ No newline at end of file +RODATA_SECTION_NAME in crate_metadata_serde - Rust
    pub const RODATA_SECTION_NAME: &str = ".rodata";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.TEXT_SECTION_NAME.html b/doc/crate_metadata_serde/constant.TEXT_SECTION_NAME.html index a5af7aca77..68fe74565d 100644 --- a/doc/crate_metadata_serde/constant.TEXT_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.TEXT_SECTION_NAME.html @@ -1 +1 @@ -TEXT_SECTION_NAME in crate_metadata_serde - Rust
    pub const TEXT_SECTION_NAME: &str = ".text";
    \ No newline at end of file +TEXT_SECTION_NAME in crate_metadata_serde - Rust
    pub const TEXT_SECTION_NAME: &str = ".text";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.TLS_BSS_SECTION_NAME.html b/doc/crate_metadata_serde/constant.TLS_BSS_SECTION_NAME.html index 6c79887fc1..6e3bf9acac 100644 --- a/doc/crate_metadata_serde/constant.TLS_BSS_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.TLS_BSS_SECTION_NAME.html @@ -1 +1 @@ -TLS_BSS_SECTION_NAME in crate_metadata_serde - Rust
    pub const TLS_BSS_SECTION_NAME: &str = ".tbss";
    \ No newline at end of file +TLS_BSS_SECTION_NAME in crate_metadata_serde - Rust
    pub const TLS_BSS_SECTION_NAME: &str = ".tbss";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/constant.TLS_DATA_SECTION_NAME.html b/doc/crate_metadata_serde/constant.TLS_DATA_SECTION_NAME.html index ccfb575289..fcdad94740 100644 --- a/doc/crate_metadata_serde/constant.TLS_DATA_SECTION_NAME.html +++ b/doc/crate_metadata_serde/constant.TLS_DATA_SECTION_NAME.html @@ -1 +1 @@ -TLS_DATA_SECTION_NAME in crate_metadata_serde - Rust
    pub const TLS_DATA_SECTION_NAME: &str = ".tdata";
    \ No newline at end of file +TLS_DATA_SECTION_NAME in crate_metadata_serde - Rust
    pub const TLS_DATA_SECTION_NAME: &str = ".tdata";
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/enum.SectionType.html b/doc/crate_metadata_serde/enum.SectionType.html index be39ef2e1b..12f1be9198 100644 --- a/doc/crate_metadata_serde/enum.SectionType.html +++ b/doc/crate_metadata_serde/enum.SectionType.html @@ -1,10 +1,11 @@ -SectionType in crate_metadata_serde - Rust
    pub enum SectionType {
    +SectionType in crate_metadata_serde - Rust
    pub enum SectionType {
         Text,
         Rodata,
         Data,
         Bss,
         TlsData,
         TlsBss,
    +    Cls,
         GccExceptTable,
         EhFrame,
     }
    Expand description

    The possible types of sections that can be loaded from a crate object file.

    @@ -16,6 +17,8 @@ for a thread-local storage (TLS) area.

    §

    TlsBss

    A .tbss section is a read-only section that holds all-zero data for a thread-local storage (TLS) area. This is is effectively an empty placeholder: the all-zero data section doesn’t actually exist in memory.

    +
    §

    Cls

    A .cls section is a read-only section that holds the initial data “image” for a CPU-local +(CLS) area.

    §

    GccExceptTable

    A .gcc_except_table section contains landing pads for exception handling, comprising the LSDA (Language Specific Data Area), which is effectively used to determine when we should stop the stack unwinding process @@ -27,14 +30,14 @@ that should be called when traversing up the stack for cleanup.

    Blog post from author of gold linker: https://www.airs.com/blog/archives/460 Some documentation here: https://gcc.gnu.org/wiki/Dwarf2EHNewbiesHowto

    -

    Implementations§

    source§

    impl SectionType

    source

    pub const fn name(&self) -> &'static str

    Returns the const &str name of this SectionType.

    -
    source

    pub fn is_data_or_bss(&self) -> bool

    Returns true if Data or Bss, otherwise false.

    -
    source

    pub fn is_tls(&self) -> bool

    Returns true if TlsData or TlsBss, otherwise false.

    -

    Trait Implementations§

    source§

    impl Clone for SectionType

    source§

    fn clone(&self) -> SectionType

    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 SectionType

    source§

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

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

    impl<'de> Deserialize<'de> for SectionType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<SectionType> for SectionType

    source§

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

    This method tests for self and other values to be equal, and is used +

    Implementations§

    source§

    impl SectionType

    source

    pub const fn name(&self) -> &'static str

    Returns the const &str name of this SectionType.

    +
    source

    pub fn is_data_or_bss(&self) -> bool

    Returns true if Data or Bss, otherwise false.

    +
    source

    pub fn is_tls(&self) -> bool

    Returns true if TlsData or TlsBss, otherwise false.

    +

    Trait Implementations§

    source§

    impl Clone for SectionType

    source§

    fn clone(&self) -> SectionType

    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 SectionType

    source§

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

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

    impl<'de> Deserialize<'de> for SectionType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<SectionType> for SectionType

    source§

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

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for SectionType

    source§

    impl StructuralPartialEq for SectionType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

    source§

    impl Serialize for SectionType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for SectionType

    source§

    impl StructuralPartialEq for SectionType

    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.

    diff --git a/doc/crate_metadata_serde/index.html b/doc/crate_metadata_serde/index.html index e6e07c56bb..8e7f685adc 100644 --- a/doc/crate_metadata_serde/index.html +++ b/doc/crate_metadata_serde/index.html @@ -1,4 +1,4 @@ -crate_metadata_serde - Rust
    Expand description

    Standalone crate containing (de)serializable types for crate and section metadata.

    +crate_metadata_serde - Rust
    Expand description

    Standalone crate containing (de)serializable types for crate and section metadata.

    The primary reason this exists is because LoadedCrate and LoadedSection make copious usage of Arc and Weak reference-counted pointer types, which cannot be properly (de)serialized by serde. @@ -20,6 +20,6 @@

    Goal: mi from a SerializedCrate in the mod_mgmt crate itself. In other words, other larger/complex Theseus crates should depend on this crate instead of this crate depending on other Theseus crates.

    -

    Structs

    • A (de)serializable representation of a loaded crate that is serde-compatible.
    • A (de)serializable representation of a loaded section that is serde-compatible.

    Enums

    • The possible types of sections that can be loaded from a crate object file.

    Constants

    Type Definitions

    • A Section Header iNDeX (SHNDX), as specified by the ELF format. +

    Structs

    • A (de)serializable representation of a loaded crate that is serde-compatible.
    • A (de)serializable representation of a loaded section that is serde-compatible.

    Enums

    • The possible types of sections that can be loaded from a crate object file.

    Constants

    Type Definitions

    • A Section Header iNDeX (SHNDX), as specified by the ELF format. Even though this is typically encoded as a u16, its decoded form can exceed the max size of u16.
    \ No newline at end of file diff --git a/doc/crate_metadata_serde/sidebar-items.js b/doc/crate_metadata_serde/sidebar-items.js index cf67edc7a1..1ac2fb86cb 100644 --- a/doc/crate_metadata_serde/sidebar-items.js +++ b/doc/crate_metadata_serde/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":["BSS_SECTION_NAME","DATA_SECTION_NAME","EH_FRAME_SECTION_NAME","GCC_EXCEPT_TABLE_SECTION_NAME","RODATA_SECTION_NAME","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME"],"enum":["SectionType"],"struct":["SerializedCrate","SerializedSection"],"type":["Shndx"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["BSS_SECTION_NAME","CLS_SECTION_FLAG","CLS_SECTION_NAME","CLS_SYMBOL_TYPE","DATA_SECTION_NAME","EH_FRAME_SECTION_NAME","GCC_EXCEPT_TABLE_SECTION_NAME","RODATA_SECTION_NAME","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME"],"enum":["SectionType"],"struct":["SerializedCrate","SerializedSection"],"type":["Shndx"]}; \ No newline at end of file diff --git a/doc/crate_metadata_serde/struct.SerializedCrate.html b/doc/crate_metadata_serde/struct.SerializedCrate.html index fcf7d36e09..105f4c5ba8 100644 --- a/doc/crate_metadata_serde/struct.SerializedCrate.html +++ b/doc/crate_metadata_serde/struct.SerializedCrate.html @@ -1,21 +1,23 @@ -SerializedCrate in crate_metadata_serde - Rust
    pub struct SerializedCrate {
    +SerializedCrate in crate_metadata_serde - Rust
    pub struct SerializedCrate {
         pub crate_name: String,
         pub sections: HashMap<Shndx, SerializedSection>,
         pub global_sections: BTreeSet<Shndx>,
         pub tls_sections: BTreeSet<Shndx>,
    +    pub cls_sections: BTreeSet<Shndx>,
         pub data_sections: BTreeSet<Shndx>,
         pub init_symbols: BTreeMap<String, usize>,
     }
    Expand description

    A (de)serializable representation of a loaded crate that is serde-compatible.

    See LoadedCrate for more detail on the fields of this struct.

    Fields§

    §crate_name: String

    The name of the crate.

    §sections: HashMap<Shndx, SerializedSection>

    A map containing all the sections of the crate.

    -
    §global_sections: BTreeSet<Shndx>

    A set containing the global sectinos of the crate.

    +
    §global_sections: BTreeSet<Shndx>

    A set containing the global sections of the crate.

    §tls_sections: BTreeSet<Shndx>

    A set containing the thread-local storage (TLS) sections of the crate.

    +
    §cls_sections: BTreeSet<Shndx>

    The CLS section of the crate.

    §data_sections: BTreeSet<Shndx>

    A set containing the .data and .bss sections of the crate.

    §init_symbols: BTreeMap<String, usize>

    A map of symbol names to their constant values, which contain assembler and linker constants.

    -

    Trait Implementations§

    source§

    impl Debug for SerializedCrate

    source§

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

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

    impl<'de> Deserialize<'de> for SerializedCrate

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Serialize for SerializedCrate

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where +

    Trait Implementations§

    source§

    impl Debug for SerializedCrate

    source§

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

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

    impl<'de> Deserialize<'de> for SerializedCrate

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Serialize for SerializedCrate

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more

    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 diff --git a/doc/crate_metadata_serde/struct.SerializedSection.html b/doc/crate_metadata_serde/struct.SerializedSection.html index 4c83bd422f..83759a1b64 100644 --- a/doc/crate_metadata_serde/struct.SerializedSection.html +++ b/doc/crate_metadata_serde/struct.SerializedSection.html @@ -1,4 +1,4 @@ -SerializedSection in crate_metadata_serde - Rust
    pub struct SerializedSection {
    +SerializedSection in crate_metadata_serde - Rust
    pub struct SerializedSection {
         pub name: String,
         pub ty: SectionType,
         pub global: bool,
    @@ -13,8 +13,8 @@
     
    §virtual_address: usize

    The starting virtual address of the range covered by this section.

    §offset: usize

    The offset into this section’s containing MappedPages where this section starts.

    §size: usize

    The size of the section.

    -

    Trait Implementations§

    source§

    impl Debug for SerializedSection

    source§

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

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

    impl<'de> Deserialize<'de> for SerializedSection

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Serialize for SerializedSection

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where +

    Trait Implementations§

    source§

    impl Debug for SerializedSection

    source§

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

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

    impl<'de> Deserialize<'de> for SerializedSection

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Serialize for SerializedSection

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more

    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 diff --git a/doc/crate_metadata_serde/type.Shndx.html b/doc/crate_metadata_serde/type.Shndx.html index e89bd76a1f..5cfb282ae0 100644 --- a/doc/crate_metadata_serde/type.Shndx.html +++ b/doc/crate_metadata_serde/type.Shndx.html @@ -1,4 +1,4 @@ -Shndx in crate_metadata_serde - Rust

    Type Definition crate_metadata_serde::Shndx

    source ·
    pub type Shndx = usize;
    Expand description

    A Section Header iNDeX (SHNDX), as specified by the ELF format. +Shndx in crate_metadata_serde - Rust

    Type Definition crate_metadata_serde::Shndx

    source ·
    pub type Shndx = usize;
    Expand description

    A Section Header iNDeX (SHNDX), as specified by the ELF format. Even though this is typically encoded as a u16, its decoded form can exceed the max size of u16.

    \ No newline at end of file diff --git a/doc/crates.js b/doc/crates.js index 0b5a8b529f..c4f70b6a6f 100644 --- a/doc/crates.js +++ b/doc/crates.js @@ -1 +1 @@ -window.ALL_CRATES = ["___Theseus_Crates___","acpi","acpi_table","acpi_table_handler","ap_start","apic","app_io","arm_boards","async_channel","ata","atomic_linked_list","block_allocator","block_cache","boot_info","bootloader_modules","captain","catch_unwind","cls","cls_macros","color","compositor","console","context_switch","context_switch_avx","context_switch_regular","context_switch_sse","cow_arc","cpu","cpu_local","crate_metadata","crate_metadata_serde","crate_name_utils","crate_swap","debug_info","debugit","deferred_interrupt_tasks","dereffer","device_manager","dfqueue","displayable","dmar","dreadnought","e1000","early_printer","early_tls","environment","event_types","exceptions_early","exceptions_full","external_unwind_info","fadt","fault_crate_swap","fault_log","first_application","font","frame_allocator","framebuffer","framebuffer_compositor","framebuffer_drawer","framebuffer_printer","fs_node","gdt","gic","heap","heapfile","hpet","http_client","idle","intel_ethernet","interrupt_controller","interrupts","io","ioapic","iommu","irq_safety","ixgbe","kernel_config","keyboard","keycodes_ascii","libterm","lockable","locked_idt","logger","madt","memfs","memory","memory_aarch64","memory_initialization","memory_structs","memory_x86_64","mlx5","mlx_ethernet","mod_mgmt","mouse","mouse_data","multicore_bringup","multiple_heaps","nano_core","net","nic_buffers","nic_initialization","nic_queues","no_drop","ota_update_client","owned_borrowed_trait","page_allocator","page_attribute_table","page_table_entry","panic_entry","panic_wrapper","path","pci","per_cpu","percent_encoding","physical_nic","pic","pit_clock","pit_clock_basic","pmu_x86","port_io","preemption","ps2","pte_flags","random","range_inclusive","rendezvous","root","rsdp","rsdt","rtc","runqueue","runqueue_epoch","runqueue_priority","runqueue_round_robin","scheduler","scheduler_epoch","scheduler_priority","scheduler_round_robin","sdt","serial_port","serial_port_basic","shapes","signal_handler","simd_personality","simd_test","simple_ipc","single_simd_task_optimization","slabmalloc","slabmalloc_safe","slabmalloc_unsafe","sleep","spawn","stack","stack_trace","stack_trace_frame_pointers","state_store","stdio","storage_device","storage_manager","str_ref","sync_block","sync_preemption","task","task_fs","task_struct","text_display","text_terminal","theseus_features","thread_local_macro","time","tlb_shootdown","tls_initializer","tsc","tss","tty","unwind","vfs_node","vga_buffer","virtual_nic","wait_condition","wait_guard","wait_queue","waker","waker_generic","wasi_interpreter","window","window_inner","window_manager"]; \ No newline at end of file +window.ALL_CRATES = ["___Theseus_Crates___","acpi","acpi_table","acpi_table_handler","ap_start","apic","app_io","arm_boards","async_channel","ata","atomic_linked_list","block_allocator","block_cache","boot_info","bootloader_modules","captain","catch_unwind","cls","cls_allocator","cls_macros","color","compositor","console","context_switch","context_switch_avx","context_switch_regular","context_switch_sse","cow_arc","cpu","crate_metadata","crate_metadata_serde","crate_name_utils","crate_swap","debug_info","debugit","deferred_interrupt_tasks","dereffer","device_manager","dfqueue","displayable","dmar","dreadnought","e1000","early_printer","early_tls","environment","event_types","exceptions_early","exceptions_full","external_unwind_info","fadt","fault_crate_swap","fault_log","first_application","font","frame_allocator","framebuffer","framebuffer_compositor","framebuffer_drawer","framebuffer_printer","fs_node","gdt","gic","heap","heapfile","hpet","http_client","idle","intel_ethernet","interrupt_controller","interrupts","io","ioapic","iommu","irq_safety","ixgbe","kernel_config","keyboard","keycodes_ascii","libterm","local_storage_initializer","lockable","locked_idt","logger","madt","memfs","memory","memory_aarch64","memory_initialization","memory_structs","memory_x86_64","mlx5","mlx_ethernet","mod_mgmt","mouse","mouse_data","multicore_bringup","multiple_heaps","nano_core","net","nic_buffers","nic_initialization","nic_queues","no_drop","ota_update_client","owned_borrowed_trait","page_allocator","page_attribute_table","page_table_entry","panic_entry","panic_wrapper","path","pci","percent_encoding","physical_nic","pic","pit_clock","pit_clock_basic","pmu_x86","port_io","preemption","ps2","pte_flags","random","range_inclusive","rendezvous","root","rsdp","rsdt","rtc","runqueue","runqueue_epoch","runqueue_priority","runqueue_round_robin","scheduler","scheduler_epoch","scheduler_priority","scheduler_round_robin","sdt","serial_port","serial_port_basic","shapes","signal_handler","simd_personality","simd_test","simple_ipc","single_simd_task_optimization","slabmalloc","slabmalloc_safe","slabmalloc_unsafe","sleep","spawn","stack","stack_trace","stack_trace_frame_pointers","state_store","stdio","storage_device","storage_manager","str_ref","sync_block","sync_preemption","task","task_fs","task_struct","text_display","text_terminal","theseus_features","thread_local_macro","time","tlb_shootdown","tsc","tss","tty","unwind","vfs_node","vga_buffer","virtual_nic","wait_condition","wait_guard","wait_queue","waker","waker_generic","wasi_interpreter","window","window_inner","window_manager"]; \ No newline at end of file diff --git a/doc/early_tls/fn.drop.html b/doc/early_tls/fn.drop.html index 7fdaea12d7..fe6dc16a4e 100644 --- a/doc/early_tls/fn.drop.html +++ b/doc/early_tls/fn.drop.html @@ -1,3 +1,5 @@ -drop in early_tls - Rust

    Function early_tls::drop

    source ·
    pub fn drop()
    Expand description

    Clears the early TLS image

    -

    This should only be invoked after the task subsystem is initialized on all CPUs.

    +drop in early_tls - Rust

    Function early_tls::drop

    source ·
    pub unsafe fn drop()
    Expand description

    Clears the early TLS image

    +

    Safety

    +

    This must only be called after the task subsystem is initialized on all +CPUs.

    \ No newline at end of file diff --git a/doc/early_tls/fn.insert.html b/doc/early_tls/fn.insert.html index b8b719521f..ef8a355f0f 100644 --- a/doc/early_tls/fn.insert.html +++ b/doc/early_tls/fn.insert.html @@ -1,4 +1,4 @@ -insert in early_tls - Rust

    Function early_tls::insert

    source ·
    pub fn insert(new_tls_image: TlsDataImage)
    Expand description

    Insert the current early TLS image with the given new_tls_image, +insert in early_tls - Rust

    Function early_tls::insert

    source ·
    pub fn insert(new_tls_image: TlsDataImage)
    Expand description

    Insert the current early TLS image with the given new_tls_image, and loads the new image on this CPU.

    If an early TLS image already exists, it is removed and dropped.

    \ No newline at end of file diff --git a/doc/early_tls/fn.reload.html b/doc/early_tls/fn.reload.html index ebf61fb99c..c5b05aa15c 100644 --- a/doc/early_tls/fn.reload.html +++ b/doc/early_tls/fn.reload.html @@ -1,2 +1,2 @@ -reload in early_tls - Rust

    Function early_tls::reload

    source ·
    pub fn reload()
    Expand description

    Loads the existing (previously-initialized) early TLS image on this CPU.

    +reload in early_tls - Rust

    Function early_tls::reload

    source ·
    pub fn reload()
    Expand description

    Loads the existing (previously-initialized) early TLS image on this CPU.

    \ No newline at end of file diff --git a/doc/early_tls/index.html b/doc/early_tls/index.html index 7d009b5b9b..b648e334ce 100644 --- a/doc/early_tls/index.html +++ b/doc/early_tls/index.html @@ -1,5 +1,5 @@ -early_tls - Rust

    Crate early_tls

    source ·
    Expand description

    Handles initialization of TLS data images during early OS initialization.

    +early_tls - Rust

    Crate early_tls

    source ·
    Expand description

    Handles initialization of TLS data images during early OS initialization.

    This is only useful before the tasking subsystem is initialized, i.e., in the nano_core, captain, or ap_start crates.

    -

    Functions

    • Clears the early TLS image
    • Insert the current early TLS image with the given new_tls_image, +

    Functions

    • drop
      Clears the early TLS image
    • Insert the current early TLS image with the given new_tls_image, and loads the new image on this CPU.
    • Loads the existing (previously-initialized) early TLS image on this CPU.
    \ No newline at end of file diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index 36efd66c74..a54abd8976 100644 --- a/doc/implementors/core/clone/trait.Clone.js +++ b/doc/implementors/core/clone/trait.Clone.js @@ -2,7 +2,7 @@ "apic":[["impl Clone for InterruptChip"],["impl Clone for LapicTimerDivide"],["impl Clone for ApicId"],["impl Clone for LapicDeliveryMode"]], "app_io":[["impl Clone for IoStreams"]], "async_channel":[["impl<T: Send, P: DeadlockPrevention> Clone for Receiver<T, P>"],["impl Clone for ChannelStatus"],["impl<T: Send, P: DeadlockPrevention> Clone for Sender<T, P>"]], -"ata":[["impl Clone for AtaStatus"],["impl Clone for AtaIdentifyData"],["impl Clone for AtaModelNumber"],["impl Clone for AtaSerialNumber"],["impl Clone for AtaFirmwareVersion"],["impl<'c> Clone for IdeControllerIter<'c>"],["impl Clone for AtaError"]], +"ata":[["impl Clone for AtaStatus"],["impl Clone for AtaIdentifyData"],["impl Clone for AtaError"],["impl<'c> Clone for IdeControllerIter<'c>"],["impl Clone for AtaFirmwareVersion"],["impl Clone for AtaSerialNumber"],["impl Clone for AtaModelNumber"]], "boot_info":[["impl Clone for FramebufferFormat"],["impl Clone for ElfSectionFlags"]], "color":[["impl Clone for Color"]], "cow_arc":[["impl<T> Clone for CowWeak<T>"],["impl<T> Clone for CowArc<T>"]], @@ -15,9 +15,9 @@ "external_unwind_info":[["impl Clone for ExternalUnwindInfo"]], "fadt":[["impl Clone for Fadt"]], "fault_crate_swap":[["impl Clone for SwapRanges"]], -"fault_log":[["impl Clone for FaultType"],["impl Clone for RecoveryAction"],["impl Clone for FaultEntry"]], +"fault_log":[["impl Clone for RecoveryAction"],["impl Clone for FaultType"],["impl Clone for FaultEntry"]], "frame_allocator":[["impl Clone for PhysicalMemoryRegion"],["impl Clone for MemoryRegionType"]], -"framebuffer":[["impl Clone for AlphaPixel"],["impl Clone for RGBPixel"]], +"framebuffer":[["impl Clone for RGBPixel"],["impl Clone for AlphaPixel"]], "fs_node":[["impl Clone for FileOrDir"]], "gdt":[["impl Clone for AvailableSegmentSelector"]], "hpet":[["impl Clone for HpetAcpiTable"]], @@ -26,6 +26,7 @@ "io":[["impl<'io, IO, L, B> Clone for LockableIo<'io, IO, L, B>where\n IO: 'io + ?Sized,\n L: for<'a> Lockable<'a, IO> + ?Sized,\n B: Borrow<L> + Clone,"]], "ixgbe":[["impl Clone for RxBufferSizeKiB"]], "keycodes_ascii":[["impl Clone for KeyEvent"],["impl Clone for KeyAction"],["impl Clone for KeyboardModifiers"],["impl Clone for Keycode"]], +"local_storage_initializer":[["impl<T> Clone for LocalStorageInitializer<T>where\n T: LocalStorage + Clone,"]], "madt":[["impl Clone for MadtIntSrcOverride"],["impl Clone for MadtLocalApic"],["impl Clone for MadtNonMaskableInterrupt"],["impl Clone for MadtIoApic"],["impl Clone for MadtLocalApicAddressOverride"],["impl<'t> Clone for MadtIter<'t>"],["impl<'t> Clone for MadtEntry<'t>"],["impl Clone for MadtLocalX2Apic"]], "memory_structs":[["impl Clone for PageRange"],["impl Clone for Page"],["impl Clone for Frame"],["impl Clone for CopyableFrameRange"],["impl Clone for VirtualAddress"],["impl Clone for CopyablePageRange"],["impl Clone for FrameRange"],["impl Clone for PhysicalAddress"]], "mlx_ethernet":[["impl Clone for Td"],["impl Clone for QueryHcaCapMaxOpMod"],["impl Clone for Tisn"],["impl Clone for FtId"],["impl Clone for FgId"],["impl Clone for Pd"],["impl Clone for QueryHcaCapCurrentOpMod"],["impl Clone for AccessRegisterOpMod"],["impl Clone for Rqn"],["impl Clone for Lkey"],["impl Clone for Sqn"],["impl Clone for CommandOpcode"],["impl Clone for Cqn"],["impl Clone for Eqn"],["impl Clone for Tirn"]], @@ -39,7 +40,7 @@ "ps2":[["impl Clone for HostToKeyboardCommandOrData"],["impl Clone for HostToKeyboardCommand"],["impl Clone for MouseResolution"],["impl Clone for HostToMouseCommand"],["impl Clone for ScancodeSet"],["impl Clone for ControllerConfigurationByte"],["impl Clone for LEDState"],["impl Clone for HostToMouseCommandOrData"],["impl Clone for MouseSampleRate"]], "pte_flags":[["impl Clone for PteFlags"],["impl Clone for PteFlagsX86_64"],["impl Clone for PteFlagsAarch64"]], "range_inclusive":[["impl<Idx: Clone + Clone + PartialOrd> Clone for RangeInclusive<Idx>"]], -"rendezvous":[["impl<T: Clone + Send, P: Clone + DeadlockPrevention> Clone for Sender<T, P>"],["impl<T: Clone + Send, P: Clone + DeadlockPrevention> Clone for Receiver<T, P>"]], +"rendezvous":[["impl<T: Clone + Send, P: Clone + DeadlockPrevention> Clone for Receiver<T, P>"],["impl<T: Clone + Send, P: Clone + DeadlockPrevention> Clone for Sender<T, P>"]], "rsdp":[["impl Clone for Rsdp"]], "runqueue_epoch":[["impl Clone for EpochTaskRef"]], "runqueue_priority":[["impl Clone for PriorityTaskRef"]], @@ -47,7 +48,7 @@ "sdt":[["impl Clone for GenericAddressStructure"],["impl Clone for Sdt"]], "serial_port_basic":[["impl Clone for SerialPortAddress"]], "shapes":[["impl Clone for Coord"],["impl Clone for Rectangle"]], -"signal_handler":[["impl Clone for ErrorCode"],["impl Clone for SignalContext"],["impl Clone for Signal"]], +"signal_handler":[["impl Clone for Signal"],["impl Clone for ErrorCode"],["impl Clone for SignalContext"]], "stdio":[["impl Clone for KeyEventQueueWriter"],["impl Clone for KeyEventQueueReader"],["impl Clone for StdioWriter"],["impl Clone for StdioReader"]], "str_ref":[["impl Clone for StrRef"]], "sync_block":[["impl Clone for Block"]], @@ -57,7 +58,6 @@ "text_terminal":[["impl Clone for ForegroundColor"],["impl Clone for Wrap"],["impl Clone for UnderlinedColor"],["impl Clone for UnitIndex"],["impl Clone for Color"],["impl Clone for ScrollAction"],["impl Clone for ScreenSize"],["impl Clone for LineIndex"],["impl Clone for FormatFlags"],["impl Clone for Unit"],["impl Clone for Column"],["impl Clone for Style"],["impl Clone for ScreenPoint"],["impl Clone for ScrollbackBufferPoint"],["impl Clone for LineFeedSendsCarriageReturn"],["impl Clone for InsertMode"],["impl Clone for Row"],["impl Clone for ScrollPosition"],["impl Clone for Character"],["impl Clone for BackgroundColor"],["impl Clone for ShowCursor"],["impl Clone for TerminalMode"],["impl Clone for CarriageReturnSendsLineFeed"]], "thread_local_macro":[["impl Clone for AccessError"]], "time":[["impl Clone for Instant"],["impl Clone for Period"]], -"tls_initializer":[["impl Clone for TlsInitializer"]], -"tty":[["impl Clone for Tty"],["impl Clone for Master"],["impl Clone for Slave"],["impl Clone for Event"]], +"tty":[["impl Clone for Tty"],["impl Clone for Event"],["impl Clone for Master"],["impl Clone for Slave"]], "vga_buffer":[["impl Clone for Color"],["impl Clone for ScreenChar"],["impl Clone for ColorCode"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/cmp/trait.Eq.js b/doc/implementors/core/cmp/trait.Eq.js index 6b277c4dd3..a21fd2310e 100644 --- a/doc/implementors/core/cmp/trait.Eq.js +++ b/doc/implementors/core/cmp/trait.Eq.js @@ -4,7 +4,6 @@ "boot_info":[["impl Eq for ElfSectionFlags"]], "color":[["impl Eq for Color"]], "cpu":[["impl Eq for CpuId"]], -"cpu_local":[["impl Eq for PerCpuField"]], "crate_metadata":[["impl Eq for RelocationEntry"]], "crate_swap":[["impl Eq for SwapRequest"]], "frame_allocator":[["impl Eq for MemoryRegionType"],["impl<const S: MemoryState> Eq for Frames<S>"],["impl Eq for PhysicalMemoryRegion"]], diff --git a/doc/implementors/core/cmp/trait.Ord.js b/doc/implementors/core/cmp/trait.Ord.js index 511a3dee12..92d30659ab 100644 --- a/doc/implementors/core/cmp/trait.Ord.js +++ b/doc/implementors/core/cmp/trait.Ord.js @@ -1,6 +1,6 @@ (function() {var implementors = { "apic":[["impl Ord for ApicId"]], -"ata":[["impl Ord for AtaStatus"],["impl Ord for AtaError"]], +"ata":[["impl Ord for AtaError"],["impl Ord for AtaStatus"]], "boot_info":[["impl Ord for ElfSectionFlags"]], "cpu":[["impl Ord for CpuId"]], "frame_allocator":[["impl<const S: MemoryState> Ord for Frames<S>"],["impl Ord for PhysicalMemoryRegion"]], diff --git a/doc/implementors/core/cmp/trait.PartialEq.js b/doc/implementors/core/cmp/trait.PartialEq.js index 5baea9428d..fc5bb0b075 100644 --- a/doc/implementors/core/cmp/trait.PartialEq.js +++ b/doc/implementors/core/cmp/trait.PartialEq.js @@ -5,7 +5,6 @@ "boot_info":[["impl PartialEq<ElfSectionFlags> for ElfSectionFlags"]], "color":[["impl PartialEq<Color> for Color"]], "cpu":[["impl PartialEq<CpuId> for CpuId"]], -"cpu_local":[["impl PartialEq<PerCpuField> for PerCpuField"]], "crate_metadata":[["impl PartialEq<RelocationEntry> for RelocationEntry"],["impl PartialEq<CrateType> for CrateType"]], "crate_metadata_serde":[["impl PartialEq<SectionType> for SectionType"]], "crate_swap":[["impl PartialEq<SwapRequest> for SwapRequest"]], @@ -25,7 +24,7 @@ "runqueue_priority":[["impl PartialEq<PriorityTaskRef> for PriorityTaskRef"]], "serial_port_basic":[["impl PartialEq<SerialPortAddress> for SerialPortAddress"]], "shapes":[["impl PartialEq<Rectangle> for Rectangle"],["impl PartialEq<Coord> for Coord"]], -"signal_handler":[["impl PartialEq<SignalContext> for SignalContext"],["impl PartialEq<Signal> for Signal"],["impl PartialEq<ErrorCode> for ErrorCode"]], +"signal_handler":[["impl PartialEq<Signal> for Signal"],["impl PartialEq<SignalContext> for SignalContext"],["impl PartialEq<ErrorCode> for ErrorCode"]], "str_ref":[["impl PartialEq<StrRef> for StrRef"]], "sync_block":[["impl PartialEq<Block> for Block"]], "sync_preemption":[["impl PartialEq<DisablePreemption> for DisablePreemption"]], diff --git a/doc/implementors/core/cmp/trait.PartialOrd.js b/doc/implementors/core/cmp/trait.PartialOrd.js index 94b4ca8168..f06048f72d 100644 --- a/doc/implementors/core/cmp/trait.PartialOrd.js +++ b/doc/implementors/core/cmp/trait.PartialOrd.js @@ -1,6 +1,6 @@ (function() {var implementors = { "apic":[["impl PartialOrd<ApicId> for ApicId"]], -"ata":[["impl PartialOrd<AtaError> for AtaError"],["impl PartialOrd<AtaStatus> for AtaStatus"]], +"ata":[["impl PartialOrd<AtaStatus> for AtaStatus"],["impl PartialOrd<AtaError> for AtaError"]], "boot_info":[["impl PartialOrd<ElfSectionFlags> for ElfSectionFlags"]], "cpu":[["impl PartialOrd<CpuId> for CpuId"]], "frame_allocator":[["impl<const S: MemoryState> PartialOrd<Frames<S>> for Frames<S>"],["impl PartialOrd<PhysicalMemoryRegion> for PhysicalMemoryRegion"]], diff --git a/doc/implementors/core/convert/trait.From.js b/doc/implementors/core/convert/trait.From.js index 08287404a3..7c2c5d4740 100644 --- a/doc/implementors/core/convert/trait.From.js +++ b/doc/implementors/core/convert/trait.From.js @@ -1,7 +1,7 @@ (function() {var implementors = { "async_channel":[["impl From<Error> for Error"]], "cpu":[["impl From<Option<CpuId>> for OptionalCpuId"],["impl From<OptionalCpuId> for Option<CpuId>"],["impl From<CpuId> for ApicId"],["impl From<ApicId> for CpuId"]], -"framebuffer":[["impl From<Color> for RGBPixel"],["impl From<Color> for AlphaPixel"]], +"framebuffer":[["impl From<Color> for AlphaPixel"],["impl From<Color> for RGBPixel"]], "io":[["impl From<IoError> for String"],["impl<'io, IO, L, B> From<B> for LockableIo<'io, IO, L, B>where\n IO: 'io + ?Sized,\n L: for<'a> Lockable<'a, IO> + ?Sized,\n B: Borrow<L>,"],["impl<RW> From<RW> for ByteWriterWrapper<RW>where\n RW: BlockReader + BlockWriter,"],["impl From<IoError> for Error"],["impl From<IoError> for &'static str"],["impl<RW> From<RW> for ByteReaderWriterWrapper<RW>where\n RW: BlockReader + BlockWriter,"],["impl From<&'static str> for IoError"],["impl<R> From<R> for ByteReaderWrapper<R>where\n R: BlockReader,"]], "memory_structs":[["impl From<PageRange> for CopyablePageRange"],["impl From<CopyablePageRange> for PageRange"],["impl From<CopyableFrameRange> for FrameRange"],["impl From<FrameRange> for CopyableFrameRange"]], "mlx_ethernet":[["impl From<CommandQueueError> for &'static str"]], diff --git a/doc/implementors/core/default/trait.Default.js b/doc/implementors/core/default/trait.Default.js index c6340a502c..02524feab3 100644 --- a/doc/implementors/core/default/trait.Default.js +++ b/doc/implementors/core/default/trait.Default.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl Default for AtaSerialNumber"],["impl Default for AtaIdentifyData"],["impl Default for AtaFirmwareVersion"],["impl Default for AtaModelNumber"]], +"ata":[["impl Default for AtaSerialNumber"],["impl Default for AtaModelNumber"],["impl Default for AtaFirmwareVersion"],["impl Default for AtaIdentifyData"]], "crate_metadata":[["impl Default for LoadedSectionInner"]], "environment":[["impl Default for Environment"]], "event_types":[["impl Default for MousePositionEvent"]], diff --git a/doc/implementors/core/fmt/trait.Debug.js b/doc/implementors/core/fmt/trait.Debug.js index 17247cf468..2940b9486d 100644 --- a/doc/implementors/core/fmt/trait.Debug.js +++ b/doc/implementors/core/fmt/trait.Debug.js @@ -2,7 +2,7 @@ "acpi_table":[["impl Debug for TableLocation"]], "apic":[["impl Debug for LapicDeliveryMode"],["impl Debug for LapicTimerDivide"],["impl Debug for ApicId"],["impl Debug for LocalApic"],["impl Debug for InterruptChip"],["impl Debug for LapicInitError"]], "async_channel":[["impl Debug for ChannelStatus"],["impl Debug for Error"]], -"ata":[["impl Debug for AtaError"],["impl Debug for AtaDrive"],["impl Debug for AtaFirmwareVersion"],["impl Debug for AtaModelNumber"],["impl Debug for AtaIdentifyData"],["impl Debug for IdeController"],["impl Debug for AtaStatus"],["impl Debug for AtaSerialNumber"]], +"ata":[["impl Debug for AtaError"],["impl Debug for IdeController"],["impl Debug for AtaSerialNumber"],["impl Debug for AtaModelNumber"],["impl Debug for AtaDrive"],["impl Debug for AtaFirmwareVersion"],["impl Debug for AtaStatus"],["impl Debug for AtaIdentifyData"]], "atomic_linked_list":[["impl<K, V: Debug> Debug for AtomicMap<K, V>where\n K: PartialEq + Debug,"],["impl<T: Debug> Debug for AtomicLinkedList<T>"]], "boot_info":[["impl Debug for FramebufferInfo"],["impl Debug for ElfSectionFlags"],["impl Debug for ReservedMemoryRegion"],["impl Debug for FramebufferFormat"]], "bootloader_modules":[["impl Debug for BootloaderModule"]], @@ -11,7 +11,7 @@ "cpu":[["impl Debug for CpuId"],["impl Debug for OptionalCpuId"]], "crate_metadata":[["impl Debug for LoadedSection"],["impl Debug for RelocationEntry"],["impl Debug for StrongDependency"],["impl Debug for CrateType"],["impl Debug for LoadedCrate"],["impl Debug for WeakDependent"]], "crate_metadata_serde":[["impl Debug for SerializedSection"],["impl Debug for SerializedCrate"],["impl Debug for SectionType"]], -"crate_swap":[["impl Debug for InvalidSwapRequest"],["impl Debug for SwapRequest"]], +"crate_swap":[["impl Debug for SwapRequest"],["impl Debug for InvalidSwapRequest"]], "debugit":[["impl<T> Debug for DebugIt<T>where\n T: Debug,"],["impl<T> Debug for DebugIt<T>"]], "deferred_interrupt_tasks":[["impl Debug for InterruptRegistrationError"]], "dfqueue":[["impl<T: Debug> Debug for PeekedData<T>"],["impl<T: Debug> Debug for DFQueue<T>"],["impl<T: Debug> Debug for DFQueueConsumer<T>"],["impl<T: Debug> Debug for QueuedData<T>"],["impl<T: Debug> Debug for DFQueueProducer<T>"]], @@ -20,7 +20,7 @@ "event_types":[["impl Debug for MousePositionEvent"],["impl Debug for KeyboardInputEvent"],["impl Debug for Event"]], "external_unwind_info":[["impl Debug for ExternalUnwindInfo"]], "fadt":[["impl Debug for Fadt"]], -"fault_log":[["impl Debug for RecoveryAction"],["impl Debug for FaultEntry"],["impl Debug for FaultType"]], +"fault_log":[["impl Debug for RecoveryAction"],["impl Debug for FaultType"],["impl Debug for FaultEntry"]], "frame_allocator":[["impl<const S: MemoryState> Debug for Frames<S>"],["impl<'f> Debug for AllocatedFrame<'f>"],["impl Debug for PhysicalMemoryRegion"],["impl Debug for MemoryRegionType"]], "framebuffer":[["impl Debug for AlphaPixel"],["impl Debug for RGBPixel"]], "fs_node":[["impl Debug for FileOrDir"]], @@ -33,6 +33,7 @@ "io":[["impl Debug for IoError"],["impl Debug for BlockByteTransfer"],["impl<'io, IO, L, B> Debug for LockableIo<'io, IO, L, B>where\n IO: 'io + ?Sized + Debug,\n L: for<'a> Lockable<'a, IO> + ?Sized + Debug,\n B: Borrow<L> + Debug,"]], "irq_safety":[["impl<T: ?Sized + Debug> Debug for RwLockIrqSafe<T>"],["impl<T: ?Sized + Debug> Debug for MutexIrqSafe<T>"]], "keycodes_ascii":[["impl Debug for KeyAction"],["impl Debug for Keycode"],["impl Debug for KeyEvent"],["impl Debug for KeyboardModifiers"]], +"local_storage_initializer":[["impl<T> Debug for LocalStorageInitializer<T>where\n T: LocalStorage + Debug,"],["impl Debug for Cls"],["impl Debug for Tls"],["impl<T> Debug for LocalStorageDataImage<T>where\n T: LocalStorage + Debug,"],["impl Debug for LocalStorageInitializerError"]], "locked_idt":[["impl Debug for LockedIdt"]], "madt":[["impl Debug for MadtLocalApicAddressOverride"],["impl Debug for MadtNonMaskableInterrupt"],["impl Debug for MadtLocalX2Apic"],["impl Debug for MadtLocalApic"],["impl Debug for MadtIntSrcOverride"],["impl<'t> Debug for MadtEntry<'t>"],["impl Debug for MadtIoApic"]], "memory":[["impl Debug for MemoryManagementInfo"],["impl Debug for PageTable"],["impl Debug for EarlyIdentityMappedPages"],["impl Debug for MappedPages"],["impl Debug for InitialMemoryMappings"]], @@ -47,24 +48,25 @@ "page_allocator":[["impl Debug for AllocatedPages"],["impl Debug for AllocationError"]], "page_attribute_table":[["impl Debug for MemoryCachingType"],["impl Debug for PatNotSupported"]], "path":[["impl Debug for Path"]], -"pci":[["impl Debug for PciDevice"],["impl Debug for PciBus"],["impl Debug for PciLocation"]], +"pci":[["impl Debug for PciLocation"],["impl Debug for PciDevice"],["impl Debug for PciBus"]], "percent_encoding":[["impl Debug for DEFAULT_ENCODE_SET"],["impl Debug for SIMPLE_ENCODE_SET"],["impl<'a, E: Debug + EncodeSet> Debug for PercentEncode<'a, E>"],["impl Debug for PATH_SEGMENT_ENCODE_SET"],["impl Debug for USERINFO_ENCODE_SET"],["impl Debug for QUERY_ENCODE_SET"],["impl<'a> Debug for PercentDecode<'a>"]], "pic":[["impl Debug for IrqStatusRegisters"]], "pmu_x86":[["impl Debug for PMUResults"]], "port_io":[["impl<T: Debug + PortIn + PortOut> Debug for Port<T>"],["impl<T: Debug + PortOut> Debug for PortWriteOnly<T>"],["impl<T: Debug + PortIn> Debug for PortReadOnly<T>"]], +"preemption":[["impl Debug for PreemptionGuard"]], "ps2":[["impl Debug for DeviceToHostResponse"],["impl Debug for MouseResolution"],["impl Debug for MouseId"],["impl Debug for HostToKeyboardCommandOrData"],["impl Debug for ControllerConfigurationByte"],["impl Debug for ScancodeSet"],["impl Debug for HostToKeyboardCommand"],["impl Debug for MousePacket4"],["impl Debug for HostToMouseCommand"],["impl Debug for MousePacketGeneric"],["impl Debug for MousePacket3"],["impl Debug for MouseSampleRate"],["impl Debug for LEDState"],["impl Debug for HostToMouseCommandOrData"],["impl Debug for MousePacket"]], "pte_flags":[["impl Debug for PteFlagsAarch64"],["impl Debug for PteFlags"],["impl Debug for PteFlagsX86_64"]], "range_inclusive":[["impl<Idx: Clone + PartialOrd + Debug> Debug for RangeInclusive<Idx>"]], "rsdp":[["impl Debug for Rsdp"]], "rtc":[["impl Debug for InvalidRtcRate"],["impl Debug for RtcTime"]], -"runqueue_epoch":[["impl Debug for EpochTaskRef"],["impl Debug for RunQueue"]], -"runqueue_priority":[["impl Debug for RunQueue"],["impl Debug for PriorityTaskRef"]], +"runqueue_epoch":[["impl Debug for RunQueue"],["impl Debug for EpochTaskRef"]], +"runqueue_priority":[["impl Debug for PriorityTaskRef"],["impl Debug for RunQueue"]], "runqueue_round_robin":[["impl Debug for RunQueue"],["impl Debug for RoundRobinTaskRef"]], "sdt":[["impl Debug for Sdt"],["impl Debug for GenericAddressStructure"]], "serial_port":[["impl Debug for DataSenderAlreadyExists"]], "serial_port_basic":[["impl Debug for SerialPortInterruptEvent"],["impl Debug for SerialPortAddress"]], "shapes":[["impl Debug for Coord"],["impl Debug for Rectangle"]], -"signal_handler":[["impl Debug for AlreadyRegistered"],["impl Debug for ErrorCode"],["impl Debug for Signal"],["impl Debug for SignalContext"]], +"signal_handler":[["impl Debug for AlreadyRegistered"],["impl Debug for SignalContext"],["impl Debug for Signal"],["impl Debug for ErrorCode"]], "slabmalloc":[["impl<'a> Debug for ObjectPage8k<'a>"]], "slabmalloc_unsafe":[["impl<'a> Debug for ObjectPage8k<'a>"]], "spawn":[["impl Debug for BootstrapTaskRef"]], @@ -72,13 +74,12 @@ "str_ref":[["impl Debug for StrRef"]], "sync_block":[["impl Debug for Block"]], "sync_preemption":[["impl Debug for DisablePreemption"]], -"task":[["impl Debug for ExitableTaskRef"],["impl Debug for WeakTaskRef"],["impl Debug for CurrentTaskNotFound"],["impl Debug for InitCurrentTaskError"],["impl Debug for TaskRef"],["impl Debug for JoinableTaskRef"]], -"task_struct":[["impl Debug for KillReason"],["impl Debug for Task"],["impl Debug for ExitValue"],["impl Debug for PanicInfoOwned"],["impl Debug for RunState"]], +"task":[["impl Debug for WeakTaskRef"],["impl Debug for ExitableTaskRef"],["impl Debug for JoinableTaskRef"],["impl Debug for InitCurrentTaskError"],["impl Debug for TaskRef"],["impl Debug for CurrentTaskNotFound"]], +"task_struct":[["impl Debug for PanicInfoOwned"],["impl Debug for Task"],["impl Debug for KillReason"],["impl Debug for RunState"],["impl Debug for ExitValue"]], "text_display":[["impl Debug for TextDisplay"]], "text_terminal":[["impl Debug for ScreenSize"],["impl Debug for BackgroundColor"],["impl Debug for CarriageReturnSendsLineFeed"],["impl Debug for DisplayAction"],["impl Debug for CursorStyle"],["impl Debug for Column"],["impl Debug for LineFeedSendsCarriageReturn"],["impl Debug for AnsiStyleCodes"],["impl Debug for ScrollPosition"],["impl Debug for Color"],["impl Debug for ScreenPoint"],["impl Debug for InsertMode"],["impl Debug for UnderlinedColor"],["impl Debug for Character"],["impl Debug for ForegroundColor"],["impl Debug for Wrap"],["impl Debug for FormatFlags"],["impl Debug for Style"],["impl Debug for LineIndex"],["impl Debug for Line"],["impl Debug for Unit"],["impl Debug for TerminalMode"],["impl Debug for Row"],["impl Debug for ShowCursor"],["impl Debug for ScrollbackBufferPoint"],["impl Debug for ScrollAction"],["impl Debug for ScrollbackBuffer"],["impl Debug for UnitIndex"]], "thread_local_macro":[["impl<T: 'static> Debug for LocalKey<T>"],["impl Debug for AccessError"]], "time":[["impl Debug for Period"],["impl Debug for Instant"]], -"tls_initializer":[["impl Debug for TlsInitializerError"],["impl Debug for TlsInitializer"],["impl Debug for TlsDataImage"]], "tty":[["impl Debug for Event"]], "unwind":[["impl Debug for StackFrameIter"],["impl Debug for StackFrame"]], "vga_buffer":[["impl Debug for ScreenChar"],["impl Debug for Color"],["impl Debug for ColorCode"]] diff --git a/doc/implementors/core/fmt/trait.Display.js b/doc/implementors/core/fmt/trait.Display.js index cef3325b9f..8fc1acb236 100644 --- a/doc/implementors/core/fmt/trait.Display.js +++ b/doc/implementors/core/fmt/trait.Display.js @@ -1,6 +1,6 @@ (function() {var implementors = { "apic":[["impl Display for ApicId"]], -"ata":[["impl Display for AtaFirmwareVersion"],["impl Display for AtaModelNumber"],["impl Display for AtaSerialNumber"]], +"ata":[["impl Display for AtaSerialNumber"],["impl Display for AtaFirmwareVersion"],["impl Display for AtaModelNumber"]], "cpu":[["impl Display for CpuId"]], "crate_metadata":[["impl Display for LoadedSection"]], "environment":[["impl Display for Error"]], diff --git a/doc/implementors/core/fmt/trait.Octal.js b/doc/implementors/core/fmt/trait.Octal.js index 3be6b3bad3..c6e1a26c74 100644 --- a/doc/implementors/core/fmt/trait.Octal.js +++ b/doc/implementors/core/fmt/trait.Octal.js @@ -1,6 +1,6 @@ (function() {var implementors = { "apic":[["impl Octal for ApicId"]], -"ata":[["impl Octal for AtaStatus"],["impl Octal for AtaError"]], +"ata":[["impl Octal for AtaError"],["impl Octal for AtaStatus"]], "boot_info":[["impl Octal for ElfSectionFlags"]], "cpu":[["impl Octal for CpuId"]], "keycodes_ascii":[["impl Octal for KeyboardModifiers"]], diff --git a/doc/implementors/core/fmt/trait.UpperHex.js b/doc/implementors/core/fmt/trait.UpperHex.js index e57f8d7bca..5c8ae36d7d 100644 --- a/doc/implementors/core/fmt/trait.UpperHex.js +++ b/doc/implementors/core/fmt/trait.UpperHex.js @@ -1,6 +1,6 @@ (function() {var implementors = { "apic":[["impl UpperHex for ApicId"]], -"ata":[["impl UpperHex for AtaStatus"],["impl UpperHex for AtaError"]], +"ata":[["impl UpperHex for AtaError"],["impl UpperHex for AtaStatus"]], "boot_info":[["impl UpperHex for ElfSectionFlags"]], "cpu":[["impl UpperHex for CpuId"]], "keycodes_ascii":[["impl UpperHex for KeyboardModifiers"]], diff --git a/doc/implementors/core/hash/trait.Hash.js b/doc/implementors/core/hash/trait.Hash.js index ea39072175..5035695e00 100644 --- a/doc/implementors/core/hash/trait.Hash.js +++ b/doc/implementors/core/hash/trait.Hash.js @@ -1,10 +1,10 @@ (function() {var implementors = { "apic":[["impl Hash for ApicId"]], -"ata":[["impl Hash for AtaError"],["impl Hash for AtaStatus"]], +"ata":[["impl Hash for AtaStatus"],["impl Hash for AtaError"]], "boot_info":[["impl Hash for ElfSectionFlags"]], "cpu":[["impl Hash for CpuId"]], "crate_swap":[["impl Hash for SwapRequest"]], -"framebuffer":[["impl Hash for AlphaPixel"],["impl Hash for RGBPixel"],["impl<P: Pixel> Hash for Framebuffer<P>"]], +"framebuffer":[["impl<P: Pixel> Hash for Framebuffer<P>"],["impl Hash for AlphaPixel"],["impl Hash for RGBPixel"]], "keycodes_ascii":[["impl Hash for KeyboardModifiers"]], "memory":[["impl<T: FromBytes + Hash, M: Mutability, B: Borrow<MappedPages>> Hash for BorrowedMappedPages<T, M, B>"],["impl<T: FromBytes + Hash, M: Mutability, B: Borrow<MappedPages>> Hash for BorrowedSliceMappedPages<T, M, B>"]], "memory_structs":[["impl Hash for VirtualAddress"],["impl Hash for PhysicalAddress"]], diff --git a/doc/implementors/core/marker/trait.Copy.js b/doc/implementors/core/marker/trait.Copy.js index 1c5065c8e5..50825f771a 100644 --- a/doc/implementors/core/marker/trait.Copy.js +++ b/doc/implementors/core/marker/trait.Copy.js @@ -1,7 +1,7 @@ (function() {var implementors = { "apic":[["impl Copy for ApicId"],["impl Copy for LapicDeliveryMode"],["impl Copy for InterruptChip"],["impl Copy for LapicTimerDivide"]], "async_channel":[["impl Copy for ChannelStatus"]], -"ata":[["impl Copy for AtaIdentifyData"],["impl Copy for AtaError"],["impl Copy for AtaSerialNumber"],["impl Copy for AtaFirmwareVersion"],["impl Copy for AtaModelNumber"],["impl Copy for AtaStatus"]], +"ata":[["impl Copy for AtaStatus"],["impl Copy for AtaIdentifyData"],["impl Copy for AtaModelNumber"],["impl Copy for AtaFirmwareVersion"],["impl Copy for AtaSerialNumber"],["impl Copy for AtaError"]], "boot_info":[["impl Copy for ElfSectionFlags"],["impl Copy for FramebufferFormat"]], "color":[["impl Copy for Color"]], "cpu":[["impl Copy for OptionalCpuId"],["impl Copy for CpuId"]], @@ -32,7 +32,7 @@ "sdt":[["impl Copy for Sdt"],["impl Copy for GenericAddressStructure"]], "serial_port_basic":[["impl Copy for SerialPortAddress"]], "shapes":[["impl Copy for Coord"],["impl Copy for Rectangle"]], -"signal_handler":[["impl Copy for Signal"],["impl Copy for ErrorCode"],["impl Copy for SignalContext"]], +"signal_handler":[["impl Copy for ErrorCode"],["impl Copy for SignalContext"],["impl Copy for Signal"]], "sync_block":[["impl Copy for Block"]], "sync_preemption":[["impl Copy for DisablePreemption"]], "task_struct":[["impl Copy for RunState"]], diff --git a/doc/implementors/core/marker/trait.Freeze.js b/doc/implementors/core/marker/trait.Freeze.js index 34ac353ffc..21fb40b3f6 100644 --- a/doc/implementors/core/marker/trait.Freeze.js +++ b/doc/implementors/core/marker/trait.Freeze.js @@ -17,7 +17,6 @@ "context_switch_sse":[["impl Freeze for ContextSSE",1,["context_switch_sse::ContextSSE"]]], "cow_arc":[["impl<T> Freeze for CowArc<T>",1,["cow_arc::CowArc"]],["impl<T> Freeze for CowWeak<T>",1,["cow_arc::CowWeak"]]], "cpu":[["impl Freeze for OptionalCpuId",1,["cpu::arch::OptionalCpuId"]],["impl Freeze for CpuId",1,["cpu::CpuId"]]], -"cpu_local":[["impl Freeze for PerCpuField",1,["cpu_local::PerCpuField"]],["impl<T> Freeze for CpuLocal<T>",1,["cpu_local::CpuLocal"]]], "crate_metadata":[["impl Freeze for CrateType",1,["crate_metadata::CrateType"]],["impl Freeze for LoadedCrate",1,["crate_metadata::LoadedCrate"]],["impl Freeze for LoadedSectionInner",1,["crate_metadata::LoadedSectionInner"]],["impl !Freeze for LoadedSection",1,["crate_metadata::LoadedSection"]],["impl Freeze for StrongDependency",1,["crate_metadata::StrongDependency"]],["impl Freeze for WeakDependent",1,["crate_metadata::WeakDependent"]],["impl Freeze for RelocationEntry",1,["crate_metadata::RelocationEntry"]]], "crate_metadata_serde":[["impl Freeze for SerializedCrate",1,["crate_metadata_serde::SerializedCrate"]],["impl Freeze for SerializedSection",1,["crate_metadata_serde::SerializedSection"]],["impl Freeze for SectionType",1,["crate_metadata_serde::SectionType"]]], "crate_swap":[["impl Freeze for SwapRequest",1,["crate_swap::SwapRequest"]],["impl Freeze for InvalidSwapRequest",1,["crate_swap::InvalidSwapRequest"]]], @@ -56,6 +55,7 @@ "ixgbe":[["impl Freeze for IxgbeNic",1,["ixgbe::IxgbeNic"]],["impl Freeze for LinkSpeedMbps",1,["ixgbe::LinkSpeedMbps"]],["impl Freeze for RxBufferSizeKiB",1,["ixgbe::RxBufferSizeKiB"]],["impl Freeze for FilterProtocol",1,["ixgbe::FilterProtocol"]]], "keycodes_ascii":[["impl Freeze for KeyboardModifiers",1,["keycodes_ascii::KeyboardModifiers"]],["impl Freeze for KeyAction",1,["keycodes_ascii::KeyAction"]],["impl Freeze for KeyEvent",1,["keycodes_ascii::KeyEvent"]],["impl Freeze for Keycode",1,["keycodes_ascii::Keycode"]]], "libterm":[["impl Freeze for Cursor",1,["libterm::cursor::Cursor"]],["impl Freeze for ScrollError",1,["libterm::ScrollError"]],["impl Freeze for Terminal",1,["libterm::Terminal"]]], +"local_storage_initializer":[["impl<T> Freeze for LocalStorageInitializer<T>",1,["local_storage_initializer::LocalStorageInitializer"]],["impl Freeze for Cls",1,["local_storage_initializer::Cls"]],["impl Freeze for Tls",1,["local_storage_initializer::Tls"]],["impl Freeze for LocalStorageInitializerError",1,["local_storage_initializer::LocalStorageInitializerError"]],["impl<T> Freeze for LocalStorageDataImage<T>",1,["local_storage_initializer::LocalStorageDataImage"]]], "locked_idt":[["impl !Freeze for LockedIdt",1,["locked_idt::LockedIdt"]]], "madt":[["impl<'t> Freeze for Madt<'t>",1,["madt::Madt"]],["impl<'t> Freeze for MadtIter<'t>",1,["madt::MadtIter"]],["impl<'t> Freeze for MadtEntry<'t>",1,["madt::MadtEntry"]],["impl Freeze for MadtLocalApic",1,["madt::MadtLocalApic"]],["impl Freeze for MadtIoApic",1,["madt::MadtIoApic"]],["impl Freeze for MadtIntSrcOverride",1,["madt::MadtIntSrcOverride"]],["impl Freeze for MadtNonMaskableInterrupt",1,["madt::MadtNonMaskableInterrupt"]],["impl Freeze for MadtLocalApicAddressOverride",1,["madt::MadtLocalApicAddressOverride"]],["impl Freeze for MadtLocalX2Apic",1,["madt::MadtLocalX2Apic"]]], "memfs":[["impl Freeze for MemFile",1,["memfs::MemFile"]]], @@ -80,7 +80,6 @@ "page_table_entry":[["impl Freeze for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Freeze for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Freeze for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Freeze for Path",1,["path::Path"]],["impl Freeze for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Freeze for PciCapability",1,["pci::PciCapability"]],["impl Freeze for InterruptPin",1,["pci::InterruptPin"]],["impl Freeze for PciBus",1,["pci::PciBus"]],["impl Freeze for PciLocation",1,["pci::PciLocation"]],["impl Freeze for PciDevice",1,["pci::PciDevice"]],["impl Freeze for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Freeze for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Freeze for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], -"per_cpu":[["impl Freeze for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Freeze for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], "percent_encoding":[["impl Freeze for SIMPLE_ENCODE_SET",1,["percent_encoding::SIMPLE_ENCODE_SET"]],["impl Freeze for QUERY_ENCODE_SET",1,["percent_encoding::QUERY_ENCODE_SET"]],["impl Freeze for DEFAULT_ENCODE_SET",1,["percent_encoding::DEFAULT_ENCODE_SET"]],["impl Freeze for PATH_SEGMENT_ENCODE_SET",1,["percent_encoding::PATH_SEGMENT_ENCODE_SET"]],["impl Freeze for USERINFO_ENCODE_SET",1,["percent_encoding::USERINFO_ENCODE_SET"]],["impl<'a, E> Freeze for PercentEncode<'a, E>where\n E: Freeze,",1,["percent_encoding::PercentEncode"]],["impl<'a> Freeze for PercentDecode<'a>",1,["percent_encoding::PercentDecode"]]], "pic":[["impl Freeze for IrqStatusRegisters",1,["pic::IrqStatusRegisters"]],["impl Freeze for ChainedPics",1,["pic::ChainedPics"]]], "pmu_x86":[["impl Freeze for PerformanceCounters",1,["pmu_x86::stat::PerformanceCounters"]],["impl Freeze for PMUResults",1,["pmu_x86::stat::PMUResults"]],["impl Freeze for EventType",1,["pmu_x86::EventType"]],["impl Freeze for Counter",1,["pmu_x86::Counter"]],["impl Freeze for SampleResults",1,["pmu_x86::SampleResults"]]], @@ -121,7 +120,6 @@ "text_terminal":[["impl Freeze for Color",1,["text_terminal::ansi_colors::Color"]],["impl Freeze for ForegroundColor",1,["text_terminal::ansi_colors::ForegroundColor"]],["impl Freeze for BackgroundColor",1,["text_terminal::ansi_colors::BackgroundColor"]],["impl Freeze for UnderlinedColor",1,["text_terminal::ansi_colors::UnderlinedColor"]],["impl Freeze for Style",1,["text_terminal::ansi_style::Style"]],["impl<'old, 'new> Freeze for StyleDiff<'old, 'new>",1,["text_terminal::ansi_style::StyleDiff"]],["impl Freeze for AnsiStyleCodes",1,["text_terminal::ansi_style::AnsiStyleCodes"]],["impl Freeze for FormatFlags",1,["text_terminal::ansi_style::FormatFlags"]],["impl Freeze for AsciiControlCodes",1,["text_terminal::ansi_style::AsciiControlCodes"]],["impl Freeze for ModeSwitch",1,["text_terminal::ansi_style::ModeSwitch"]],["impl Freeze for StatusReportCommands",1,["text_terminal::ansi_style::StatusReportCommands"]],["impl Freeze for ScrollPosition",1,["text_terminal::ScrollPosition"]],["impl Freeze for Line",1,["text_terminal::Line"]],["impl<Backend> Freeze for TextTerminal<Backend>where\n Backend: Freeze,",1,["text_terminal::TextTerminal"]],["impl Freeze for ScrollbackBuffer",1,["text_terminal::ScrollbackBuffer"]],["impl Freeze for Character",1,["text_terminal::Character"]],["impl Freeze for Unit",1,["text_terminal::Unit"]],["impl Freeze for ScreenSize",1,["text_terminal::ScreenSize"]],["impl Freeze for ScreenPoint",1,["text_terminal::ScreenPoint"]],["impl Freeze for Row",1,["text_terminal::Row"]],["impl Freeze for Column",1,["text_terminal::Column"]],["impl Freeze for ScrollbackBufferPoint",1,["text_terminal::ScrollbackBufferPoint"]],["impl Freeze for LineIndex",1,["text_terminal::LineIndex"]],["impl Freeze for UnitIndex",1,["text_terminal::UnitIndex"]],["impl Freeze for CursorStyle",1,["text_terminal::CursorStyle"]],["impl<Output> Freeze for TtyBackend<Output>where\n Output: Freeze,",1,["text_terminal::TtyBackend"]],["impl Freeze for DisplayAction",1,["text_terminal::DisplayAction"]],["impl Freeze for ScrollAction",1,["text_terminal::ScrollAction"]],["impl Freeze for Wrap",1,["text_terminal::Wrap"]],["impl Freeze for InsertMode",1,["text_terminal::InsertMode"]],["impl Freeze for ShowCursor",1,["text_terminal::ShowCursor"]],["impl Freeze for CarriageReturnSendsLineFeed",1,["text_terminal::CarriageReturnSendsLineFeed"]],["impl Freeze for LineFeedSendsCarriageReturn",1,["text_terminal::LineFeedSendsCarriageReturn"]],["impl Freeze for TerminalMode",1,["text_terminal::TerminalMode"]]], "thread_local_macro":[["impl<T> Freeze for LocalKey<T>",1,["thread_local_macro::LocalKey"]],["impl Freeze for AccessError",1,["thread_local_macro::AccessError"]]], "time":[["impl Freeze for Instant",1,["time::Instant"]],["impl Freeze for Period",1,["time::Period"]],["impl Freeze for Monotonic",1,["time::Monotonic"]],["impl Freeze for WallTime",1,["time::WallTime"]]], -"tls_initializer":[["impl Freeze for TlsInitializer",1,["tls_initializer::TlsInitializer"]],["impl Freeze for TlsInitializerError",1,["tls_initializer::TlsInitializerError"]],["impl Freeze for TlsDataImage",1,["tls_initializer::TlsDataImage"]]], "tsc":[["impl Freeze for Tsc",1,["tsc::Tsc"]]], "tty":[["impl !Freeze for LineDiscipline",1,["tty::discipline::LineDiscipline"]],["impl Freeze for Event",1,["tty::discipline::Event"]],["impl Freeze for Tty",1,["tty::Tty"]],["impl Freeze for Master",1,["tty::Master"]],["impl Freeze for Slave",1,["tty::Slave"]]], "unwind":[["impl Freeze for UnwindingContext",1,["unwind::UnwindingContext"]],["impl Freeze for StackFrame",1,["unwind::StackFrame"]],["impl Freeze for StackFrameIter",1,["unwind::StackFrameIter"]]], diff --git a/doc/implementors/core/marker/trait.Send.js b/doc/implementors/core/marker/trait.Send.js index ad7b33ea48..91192ed2ec 100644 --- a/doc/implementors/core/marker/trait.Send.js +++ b/doc/implementors/core/marker/trait.Send.js @@ -17,7 +17,6 @@ "context_switch_sse":[["impl Send for ContextSSE",1,["context_switch_sse::ContextSSE"]]], "cow_arc":[["impl<T> Send for CowArc<T>where\n T: Send,",1,["cow_arc::CowArc"]],["impl<T> Send for CowWeak<T>where\n T: Send,",1,["cow_arc::CowWeak"]]], "cpu":[["impl Send for OptionalCpuId",1,["cpu::arch::OptionalCpuId"]],["impl Send for CpuId",1,["cpu::CpuId"]]], -"cpu_local":[["impl Send for PerCpuField",1,["cpu_local::PerCpuField"]],["impl<T> Send for CpuLocal<T>where\n T: Send,",1,["cpu_local::CpuLocal"]]], "crate_metadata":[["impl Send for CrateType",1,["crate_metadata::CrateType"]],["impl Send for LoadedCrate",1,["crate_metadata::LoadedCrate"]],["impl Send for LoadedSectionInner",1,["crate_metadata::LoadedSectionInner"]],["impl Send for LoadedSection",1,["crate_metadata::LoadedSection"]],["impl Send for StrongDependency",1,["crate_metadata::StrongDependency"]],["impl Send for WeakDependent",1,["crate_metadata::WeakDependent"]],["impl Send for RelocationEntry",1,["crate_metadata::RelocationEntry"]]], "crate_metadata_serde":[["impl Send for SerializedCrate",1,["crate_metadata_serde::SerializedCrate"]],["impl Send for SerializedSection",1,["crate_metadata_serde::SerializedSection"]],["impl Send for SectionType",1,["crate_metadata_serde::SectionType"]]], "crate_swap":[["impl Send for SwapRequest",1,["crate_swap::SwapRequest"]],["impl Send for InvalidSwapRequest",1,["crate_swap::InvalidSwapRequest"]]], @@ -56,6 +55,7 @@ "ixgbe":[["impl Send for IxgbeNic",1,["ixgbe::IxgbeNic"]],["impl Send for LinkSpeedMbps",1,["ixgbe::LinkSpeedMbps"]],["impl Send for RxBufferSizeKiB",1,["ixgbe::RxBufferSizeKiB"]],["impl Send for FilterProtocol",1,["ixgbe::FilterProtocol"]]], "keycodes_ascii":[["impl Send for KeyboardModifiers",1,["keycodes_ascii::KeyboardModifiers"]],["impl Send for KeyAction",1,["keycodes_ascii::KeyAction"]],["impl Send for KeyEvent",1,["keycodes_ascii::KeyEvent"]],["impl Send for Keycode",1,["keycodes_ascii::Keycode"]]], "libterm":[["impl Send for Cursor",1,["libterm::cursor::Cursor"]],["impl Send for ScrollError",1,["libterm::ScrollError"]],["impl Send for Terminal",1,["libterm::Terminal"]]], +"local_storage_initializer":[["impl<T> Send for LocalStorageInitializer<T>where\n T: Send,",1,["local_storage_initializer::LocalStorageInitializer"]],["impl Send for Cls",1,["local_storage_initializer::Cls"]],["impl Send for Tls",1,["local_storage_initializer::Tls"]],["impl Send for LocalStorageInitializerError",1,["local_storage_initializer::LocalStorageInitializerError"]],["impl<T> Send for LocalStorageDataImage<T>where\n T: Send,",1,["local_storage_initializer::LocalStorageDataImage"]]], "locked_idt":[["impl Send for LockedIdt",1,["locked_idt::LockedIdt"]]], "madt":[["impl<'t> Send for Madt<'t>",1,["madt::Madt"]],["impl<'t> Send for MadtIter<'t>",1,["madt::MadtIter"]],["impl<'t> Send for MadtEntry<'t>",1,["madt::MadtEntry"]],["impl Send for MadtLocalApic",1,["madt::MadtLocalApic"]],["impl Send for MadtIoApic",1,["madt::MadtIoApic"]],["impl Send for MadtIntSrcOverride",1,["madt::MadtIntSrcOverride"]],["impl Send for MadtNonMaskableInterrupt",1,["madt::MadtNonMaskableInterrupt"]],["impl Send for MadtLocalApicAddressOverride",1,["madt::MadtLocalApicAddressOverride"]],["impl Send for MadtLocalX2Apic",1,["madt::MadtLocalX2Apic"]]], "memfs":[["impl Send for MemFile",1,["memfs::MemFile"]]], @@ -80,7 +80,6 @@ "page_table_entry":[["impl Send for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Send for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Send for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Send for Path",1,["path::Path"]],["impl Send for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Send for PciCapability",1,["pci::PciCapability"]],["impl Send for InterruptPin",1,["pci::InterruptPin"]],["impl Send for PciBus",1,["pci::PciBus"]],["impl Send for PciLocation",1,["pci::PciLocation"]],["impl Send for PciDevice",1,["pci::PciDevice"]],["impl Send for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Send for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Send for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], -"per_cpu":[["impl !Send for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Send for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], "percent_encoding":[["impl Send for SIMPLE_ENCODE_SET",1,["percent_encoding::SIMPLE_ENCODE_SET"]],["impl Send for QUERY_ENCODE_SET",1,["percent_encoding::QUERY_ENCODE_SET"]],["impl Send for DEFAULT_ENCODE_SET",1,["percent_encoding::DEFAULT_ENCODE_SET"]],["impl Send for PATH_SEGMENT_ENCODE_SET",1,["percent_encoding::PATH_SEGMENT_ENCODE_SET"]],["impl Send for USERINFO_ENCODE_SET",1,["percent_encoding::USERINFO_ENCODE_SET"]],["impl<'a, E> Send for PercentEncode<'a, E>where\n E: Send,",1,["percent_encoding::PercentEncode"]],["impl<'a> Send for PercentDecode<'a>",1,["percent_encoding::PercentDecode"]]], "pic":[["impl Send for IrqStatusRegisters",1,["pic::IrqStatusRegisters"]],["impl Send for ChainedPics",1,["pic::ChainedPics"]]], "pmu_x86":[["impl Send for PerformanceCounters",1,["pmu_x86::stat::PerformanceCounters"]],["impl Send for PMUResults",1,["pmu_x86::stat::PMUResults"]],["impl Send for EventType",1,["pmu_x86::EventType"]],["impl Send for Counter",1,["pmu_x86::Counter"]],["impl Send for SampleResults",1,["pmu_x86::SampleResults"]]], @@ -121,7 +120,6 @@ "text_terminal":[["impl Send for Color",1,["text_terminal::ansi_colors::Color"]],["impl Send for ForegroundColor",1,["text_terminal::ansi_colors::ForegroundColor"]],["impl Send for BackgroundColor",1,["text_terminal::ansi_colors::BackgroundColor"]],["impl Send for UnderlinedColor",1,["text_terminal::ansi_colors::UnderlinedColor"]],["impl Send for Style",1,["text_terminal::ansi_style::Style"]],["impl<'old, 'new> Send for StyleDiff<'old, 'new>",1,["text_terminal::ansi_style::StyleDiff"]],["impl Send for AnsiStyleCodes",1,["text_terminal::ansi_style::AnsiStyleCodes"]],["impl Send for FormatFlags",1,["text_terminal::ansi_style::FormatFlags"]],["impl Send for AsciiControlCodes",1,["text_terminal::ansi_style::AsciiControlCodes"]],["impl Send for ModeSwitch",1,["text_terminal::ansi_style::ModeSwitch"]],["impl Send for StatusReportCommands",1,["text_terminal::ansi_style::StatusReportCommands"]],["impl Send for ScrollPosition",1,["text_terminal::ScrollPosition"]],["impl Send for Line",1,["text_terminal::Line"]],["impl<Backend> Send for TextTerminal<Backend>where\n Backend: Send,",1,["text_terminal::TextTerminal"]],["impl Send for ScrollbackBuffer",1,["text_terminal::ScrollbackBuffer"]],["impl Send for Character",1,["text_terminal::Character"]],["impl Send for Unit",1,["text_terminal::Unit"]],["impl Send for ScreenSize",1,["text_terminal::ScreenSize"]],["impl Send for ScreenPoint",1,["text_terminal::ScreenPoint"]],["impl Send for Row",1,["text_terminal::Row"]],["impl Send for Column",1,["text_terminal::Column"]],["impl Send for ScrollbackBufferPoint",1,["text_terminal::ScrollbackBufferPoint"]],["impl Send for LineIndex",1,["text_terminal::LineIndex"]],["impl Send for UnitIndex",1,["text_terminal::UnitIndex"]],["impl Send for CursorStyle",1,["text_terminal::CursorStyle"]],["impl<Output> Send for TtyBackend<Output>where\n Output: Send,",1,["text_terminal::TtyBackend"]],["impl Send for DisplayAction",1,["text_terminal::DisplayAction"]],["impl Send for ScrollAction",1,["text_terminal::ScrollAction"]],["impl Send for Wrap",1,["text_terminal::Wrap"]],["impl Send for InsertMode",1,["text_terminal::InsertMode"]],["impl Send for ShowCursor",1,["text_terminal::ShowCursor"]],["impl Send for CarriageReturnSendsLineFeed",1,["text_terminal::CarriageReturnSendsLineFeed"]],["impl Send for LineFeedSendsCarriageReturn",1,["text_terminal::LineFeedSendsCarriageReturn"]],["impl Send for TerminalMode",1,["text_terminal::TerminalMode"]]], "thread_local_macro":[["impl<T> Send for LocalKey<T>",1,["thread_local_macro::LocalKey"]],["impl Send for AccessError",1,["thread_local_macro::AccessError"]]], "time":[["impl Send for Instant",1,["time::Instant"]],["impl Send for Period",1,["time::Period"]],["impl Send for Monotonic",1,["time::Monotonic"]],["impl Send for WallTime",1,["time::WallTime"]]], -"tls_initializer":[["impl Send for TlsInitializer",1,["tls_initializer::TlsInitializer"]],["impl Send for TlsInitializerError",1,["tls_initializer::TlsInitializerError"]],["impl Send for TlsDataImage",1,["tls_initializer::TlsDataImage"]]], "tsc":[["impl Send for Tsc",1,["tsc::Tsc"]]], "tty":[["impl Send for LineDiscipline",1,["tty::discipline::LineDiscipline"]],["impl Send for Event",1,["tty::discipline::Event"]],["impl Send for Tty",1,["tty::Tty"]],["impl Send for Master",1,["tty::Master"]],["impl Send for Slave",1,["tty::Slave"]]], "unwind":[["impl Send for UnwindingContext",1,["unwind::UnwindingContext"]],["impl Send for StackFrame",1,["unwind::StackFrame"]],["impl Send for StackFrameIter",1,["unwind::StackFrameIter"]]], diff --git a/doc/implementors/core/marker/trait.StructuralEq.js b/doc/implementors/core/marker/trait.StructuralEq.js index 3e0bba78aa..83f79a82ef 100644 --- a/doc/implementors/core/marker/trait.StructuralEq.js +++ b/doc/implementors/core/marker/trait.StructuralEq.js @@ -1,9 +1,8 @@ (function() {var implementors = { "apic":[["impl StructuralEq for ApicId"]], -"ata":[["impl StructuralEq for AtaStatus"],["impl StructuralEq for AtaError"]], +"ata":[["impl StructuralEq for AtaError"],["impl StructuralEq for AtaStatus"]], "boot_info":[["impl StructuralEq for ElfSectionFlags"]], "cpu":[["impl StructuralEq for CpuId"]], -"cpu_local":[["impl StructuralEq for PerCpuField"]], "crate_metadata":[["impl StructuralEq for RelocationEntry"]], "crate_swap":[["impl StructuralEq for SwapRequest"]], "frame_allocator":[["impl<const S: MemoryState> StructuralEq for Frames<S>"],["impl StructuralEq for MemoryRegionType"],["impl StructuralEq for PhysicalMemoryRegion"]], @@ -16,7 +15,7 @@ "pte_flags":[["impl StructuralEq for PteFlagsAarch64"],["impl StructuralEq for PteFlagsX86_64"],["impl StructuralEq for PteFlags"]], "range_inclusive":[["impl<Idx: Clone + PartialOrd> StructuralEq for RangeInclusive<Idx>"]], "serial_port_basic":[["impl StructuralEq for SerialPortAddress"]], -"signal_handler":[["impl StructuralEq for Signal"],["impl StructuralEq for ErrorCode"],["impl StructuralEq for SignalContext"]], +"signal_handler":[["impl StructuralEq for SignalContext"],["impl StructuralEq for ErrorCode"],["impl StructuralEq for Signal"]], "str_ref":[["impl StructuralEq for StrRef"]], "sync_block":[["impl StructuralEq for Block"]], "sync_preemption":[["impl StructuralEq for DisablePreemption"]], diff --git a/doc/implementors/core/marker/trait.StructuralPartialEq.js b/doc/implementors/core/marker/trait.StructuralPartialEq.js index e2fbb3fff1..43bb1303e0 100644 --- a/doc/implementors/core/marker/trait.StructuralPartialEq.js +++ b/doc/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,10 +1,9 @@ (function() {var implementors = { "apic":[["impl StructuralPartialEq for InterruptChip"],["impl StructuralPartialEq for ApicId"]], -"async_channel":[["impl StructuralPartialEq for ChannelStatus"],["impl StructuralPartialEq for Error"]], -"ata":[["impl StructuralPartialEq for AtaStatus"],["impl StructuralPartialEq for AtaError"]], +"async_channel":[["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for ChannelStatus"]], +"ata":[["impl StructuralPartialEq for AtaError"],["impl StructuralPartialEq for AtaStatus"]], "boot_info":[["impl StructuralPartialEq for ElfSectionFlags"]], "cpu":[["impl StructuralPartialEq for CpuId"]], -"cpu_local":[["impl StructuralPartialEq for PerCpuField"]], "crate_metadata":[["impl StructuralPartialEq for CrateType"],["impl StructuralPartialEq for RelocationEntry"]], "crate_metadata_serde":[["impl StructuralPartialEq for SectionType"]], "crate_swap":[["impl StructuralPartialEq for SwapRequest"]], @@ -22,7 +21,7 @@ "range_inclusive":[["impl<Idx: Clone + PartialOrd> StructuralPartialEq for RangeInclusive<Idx>"]], "serial_port_basic":[["impl StructuralPartialEq for SerialPortAddress"]], "shapes":[["impl StructuralPartialEq for Rectangle"],["impl StructuralPartialEq for Coord"]], -"signal_handler":[["impl StructuralPartialEq for ErrorCode"],["impl StructuralPartialEq for SignalContext"],["impl StructuralPartialEq for Signal"]], +"signal_handler":[["impl StructuralPartialEq for Signal"],["impl StructuralPartialEq for SignalContext"],["impl StructuralPartialEq for ErrorCode"]], "str_ref":[["impl StructuralPartialEq for StrRef"]], "sync_block":[["impl StructuralPartialEq for Block"]], "sync_preemption":[["impl StructuralPartialEq for DisablePreemption"]], diff --git a/doc/implementors/core/marker/trait.Sync.js b/doc/implementors/core/marker/trait.Sync.js index fa7bc5863f..4264bc946c 100644 --- a/doc/implementors/core/marker/trait.Sync.js +++ b/doc/implementors/core/marker/trait.Sync.js @@ -17,7 +17,6 @@ "context_switch_sse":[["impl Sync for ContextSSE",1,["context_switch_sse::ContextSSE"]]], "cow_arc":[["impl<T> Sync for CowArc<T>where\n T: Send,",1,["cow_arc::CowArc"]],["impl<T> Sync for CowWeak<T>where\n T: Send,",1,["cow_arc::CowWeak"]]], "cpu":[["impl Sync for OptionalCpuId",1,["cpu::arch::OptionalCpuId"]],["impl Sync for CpuId",1,["cpu::CpuId"]]], -"cpu_local":[["impl Sync for PerCpuField",1,["cpu_local::PerCpuField"]],["impl<T> Sync for CpuLocal<T>where\n T: Sync,",1,["cpu_local::CpuLocal"]]], "crate_metadata":[["impl Sync for CrateType",1,["crate_metadata::CrateType"]],["impl Sync for LoadedCrate",1,["crate_metadata::LoadedCrate"]],["impl Sync for LoadedSectionInner",1,["crate_metadata::LoadedSectionInner"]],["impl Sync for LoadedSection",1,["crate_metadata::LoadedSection"]],["impl Sync for StrongDependency",1,["crate_metadata::StrongDependency"]],["impl Sync for WeakDependent",1,["crate_metadata::WeakDependent"]],["impl Sync for RelocationEntry",1,["crate_metadata::RelocationEntry"]]], "crate_metadata_serde":[["impl Sync for SerializedCrate",1,["crate_metadata_serde::SerializedCrate"]],["impl Sync for SerializedSection",1,["crate_metadata_serde::SerializedSection"]],["impl Sync for SectionType",1,["crate_metadata_serde::SectionType"]]], "crate_swap":[["impl Sync for SwapRequest",1,["crate_swap::SwapRequest"]],["impl Sync for InvalidSwapRequest",1,["crate_swap::InvalidSwapRequest"]]], @@ -56,6 +55,7 @@ "ixgbe":[["impl Sync for IxgbeNic",1,["ixgbe::IxgbeNic"]],["impl Sync for LinkSpeedMbps",1,["ixgbe::LinkSpeedMbps"]],["impl Sync for RxBufferSizeKiB",1,["ixgbe::RxBufferSizeKiB"]],["impl Sync for FilterProtocol",1,["ixgbe::FilterProtocol"]]], "keycodes_ascii":[["impl Sync for KeyboardModifiers",1,["keycodes_ascii::KeyboardModifiers"]],["impl Sync for KeyAction",1,["keycodes_ascii::KeyAction"]],["impl Sync for KeyEvent",1,["keycodes_ascii::KeyEvent"]],["impl Sync for Keycode",1,["keycodes_ascii::Keycode"]]], "libterm":[["impl Sync for Cursor",1,["libterm::cursor::Cursor"]],["impl Sync for ScrollError",1,["libterm::ScrollError"]],["impl Sync for Terminal",1,["libterm::Terminal"]]], +"local_storage_initializer":[["impl<T> Sync for LocalStorageInitializer<T>where\n T: Sync,",1,["local_storage_initializer::LocalStorageInitializer"]],["impl Sync for Cls",1,["local_storage_initializer::Cls"]],["impl Sync for Tls",1,["local_storage_initializer::Tls"]],["impl Sync for LocalStorageInitializerError",1,["local_storage_initializer::LocalStorageInitializerError"]],["impl<T> Sync for LocalStorageDataImage<T>where\n T: Sync,",1,["local_storage_initializer::LocalStorageDataImage"]]], "locked_idt":[["impl Sync for LockedIdt",1,["locked_idt::LockedIdt"]]], "madt":[["impl<'t> Sync for Madt<'t>",1,["madt::Madt"]],["impl<'t> Sync for MadtIter<'t>",1,["madt::MadtIter"]],["impl<'t> Sync for MadtEntry<'t>",1,["madt::MadtEntry"]],["impl Sync for MadtLocalApic",1,["madt::MadtLocalApic"]],["impl Sync for MadtIoApic",1,["madt::MadtIoApic"]],["impl Sync for MadtIntSrcOverride",1,["madt::MadtIntSrcOverride"]],["impl Sync for MadtNonMaskableInterrupt",1,["madt::MadtNonMaskableInterrupt"]],["impl Sync for MadtLocalApicAddressOverride",1,["madt::MadtLocalApicAddressOverride"]],["impl Sync for MadtLocalX2Apic",1,["madt::MadtLocalX2Apic"]]], "memfs":[["impl Sync for MemFile",1,["memfs::MemFile"]]], @@ -80,7 +80,6 @@ "page_table_entry":[["impl Sync for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Sync for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Sync for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Sync for Path",1,["path::Path"]],["impl Sync for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Sync for PciCapability",1,["pci::PciCapability"]],["impl Sync for InterruptPin",1,["pci::InterruptPin"]],["impl Sync for PciBus",1,["pci::PciBus"]],["impl Sync for PciLocation",1,["pci::PciLocation"]],["impl Sync for PciDevice",1,["pci::PciDevice"]],["impl Sync for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Sync for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Sync for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], -"per_cpu":[["impl Sync for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Sync for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], "percent_encoding":[["impl Sync for SIMPLE_ENCODE_SET",1,["percent_encoding::SIMPLE_ENCODE_SET"]],["impl Sync for QUERY_ENCODE_SET",1,["percent_encoding::QUERY_ENCODE_SET"]],["impl Sync for DEFAULT_ENCODE_SET",1,["percent_encoding::DEFAULT_ENCODE_SET"]],["impl Sync for PATH_SEGMENT_ENCODE_SET",1,["percent_encoding::PATH_SEGMENT_ENCODE_SET"]],["impl Sync for USERINFO_ENCODE_SET",1,["percent_encoding::USERINFO_ENCODE_SET"]],["impl<'a, E> Sync for PercentEncode<'a, E>where\n E: Sync,",1,["percent_encoding::PercentEncode"]],["impl<'a> Sync for PercentDecode<'a>",1,["percent_encoding::PercentDecode"]]], "pic":[["impl Sync for IrqStatusRegisters",1,["pic::IrqStatusRegisters"]],["impl Sync for ChainedPics",1,["pic::ChainedPics"]]], "pmu_x86":[["impl Sync for PerformanceCounters",1,["pmu_x86::stat::PerformanceCounters"]],["impl Sync for PMUResults",1,["pmu_x86::stat::PMUResults"]],["impl Sync for EventType",1,["pmu_x86::EventType"]],["impl Sync for Counter",1,["pmu_x86::Counter"]],["impl Sync for SampleResults",1,["pmu_x86::SampleResults"]]], @@ -121,7 +120,6 @@ "text_terminal":[["impl Sync for Color",1,["text_terminal::ansi_colors::Color"]],["impl Sync for ForegroundColor",1,["text_terminal::ansi_colors::ForegroundColor"]],["impl Sync for BackgroundColor",1,["text_terminal::ansi_colors::BackgroundColor"]],["impl Sync for UnderlinedColor",1,["text_terminal::ansi_colors::UnderlinedColor"]],["impl Sync for Style",1,["text_terminal::ansi_style::Style"]],["impl<'old, 'new> Sync for StyleDiff<'old, 'new>",1,["text_terminal::ansi_style::StyleDiff"]],["impl Sync for AnsiStyleCodes",1,["text_terminal::ansi_style::AnsiStyleCodes"]],["impl Sync for FormatFlags",1,["text_terminal::ansi_style::FormatFlags"]],["impl Sync for AsciiControlCodes",1,["text_terminal::ansi_style::AsciiControlCodes"]],["impl Sync for ModeSwitch",1,["text_terminal::ansi_style::ModeSwitch"]],["impl Sync for StatusReportCommands",1,["text_terminal::ansi_style::StatusReportCommands"]],["impl Sync for ScrollPosition",1,["text_terminal::ScrollPosition"]],["impl Sync for Line",1,["text_terminal::Line"]],["impl<Backend> Sync for TextTerminal<Backend>where\n Backend: Sync,",1,["text_terminal::TextTerminal"]],["impl Sync for ScrollbackBuffer",1,["text_terminal::ScrollbackBuffer"]],["impl Sync for Character",1,["text_terminal::Character"]],["impl Sync for Unit",1,["text_terminal::Unit"]],["impl Sync for ScreenSize",1,["text_terminal::ScreenSize"]],["impl Sync for ScreenPoint",1,["text_terminal::ScreenPoint"]],["impl Sync for Row",1,["text_terminal::Row"]],["impl Sync for Column",1,["text_terminal::Column"]],["impl Sync for ScrollbackBufferPoint",1,["text_terminal::ScrollbackBufferPoint"]],["impl Sync for LineIndex",1,["text_terminal::LineIndex"]],["impl Sync for UnitIndex",1,["text_terminal::UnitIndex"]],["impl Sync for CursorStyle",1,["text_terminal::CursorStyle"]],["impl<Output> Sync for TtyBackend<Output>where\n Output: Sync,",1,["text_terminal::TtyBackend"]],["impl Sync for DisplayAction",1,["text_terminal::DisplayAction"]],["impl Sync for ScrollAction",1,["text_terminal::ScrollAction"]],["impl Sync for Wrap",1,["text_terminal::Wrap"]],["impl Sync for InsertMode",1,["text_terminal::InsertMode"]],["impl Sync for ShowCursor",1,["text_terminal::ShowCursor"]],["impl Sync for CarriageReturnSendsLineFeed",1,["text_terminal::CarriageReturnSendsLineFeed"]],["impl Sync for LineFeedSendsCarriageReturn",1,["text_terminal::LineFeedSendsCarriageReturn"]],["impl Sync for TerminalMode",1,["text_terminal::TerminalMode"]]], "thread_local_macro":[["impl<T> Sync for LocalKey<T>",1,["thread_local_macro::LocalKey"]],["impl Sync for AccessError",1,["thread_local_macro::AccessError"]]], "time":[["impl Sync for Instant",1,["time::Instant"]],["impl Sync for Period",1,["time::Period"]],["impl Sync for Monotonic",1,["time::Monotonic"]],["impl Sync for WallTime",1,["time::WallTime"]]], -"tls_initializer":[["impl Sync for TlsInitializer",1,["tls_initializer::TlsInitializer"]],["impl Sync for TlsInitializerError",1,["tls_initializer::TlsInitializerError"]],["impl Sync for TlsDataImage",1,["tls_initializer::TlsDataImage"]]], "tsc":[["impl Sync for Tsc",1,["tsc::Tsc"]]], "tty":[["impl Sync for LineDiscipline",1,["tty::discipline::LineDiscipline"]],["impl Sync for Event",1,["tty::discipline::Event"]],["impl Sync for Tty",1,["tty::Tty"]],["impl Sync for Master",1,["tty::Master"]],["impl Sync for Slave",1,["tty::Slave"]]], "unwind":[["impl !Sync for UnwindingContext",1,["unwind::UnwindingContext"]],["impl Sync for StackFrame",1,["unwind::StackFrame"]],["impl Sync for StackFrameIter",1,["unwind::StackFrameIter"]]], diff --git a/doc/implementors/core/marker/trait.Unpin.js b/doc/implementors/core/marker/trait.Unpin.js index cbc51fa4bd..0d75e793d7 100644 --- a/doc/implementors/core/marker/trait.Unpin.js +++ b/doc/implementors/core/marker/trait.Unpin.js @@ -17,7 +17,6 @@ "context_switch_sse":[["impl Unpin for ContextSSE",1,["context_switch_sse::ContextSSE"]]], "cow_arc":[["impl<T> Unpin for CowArc<T>",1,["cow_arc::CowArc"]],["impl<T> Unpin for CowWeak<T>",1,["cow_arc::CowWeak"]]], "cpu":[["impl Unpin for OptionalCpuId",1,["cpu::arch::OptionalCpuId"]],["impl Unpin for CpuId",1,["cpu::CpuId"]]], -"cpu_local":[["impl Unpin for PerCpuField",1,["cpu_local::PerCpuField"]],["impl<T> Unpin for CpuLocal<T>where\n T: Unpin,",1,["cpu_local::CpuLocal"]]], "crate_metadata":[["impl Unpin for CrateType",1,["crate_metadata::CrateType"]],["impl Unpin for LoadedCrate",1,["crate_metadata::LoadedCrate"]],["impl Unpin for LoadedSectionInner",1,["crate_metadata::LoadedSectionInner"]],["impl Unpin for LoadedSection",1,["crate_metadata::LoadedSection"]],["impl Unpin for StrongDependency",1,["crate_metadata::StrongDependency"]],["impl Unpin for WeakDependent",1,["crate_metadata::WeakDependent"]],["impl Unpin for RelocationEntry",1,["crate_metadata::RelocationEntry"]]], "crate_metadata_serde":[["impl Unpin for SerializedCrate",1,["crate_metadata_serde::SerializedCrate"]],["impl Unpin for SerializedSection",1,["crate_metadata_serde::SerializedSection"]],["impl Unpin for SectionType",1,["crate_metadata_serde::SectionType"]]], "crate_swap":[["impl Unpin for SwapRequest",1,["crate_swap::SwapRequest"]],["impl Unpin for InvalidSwapRequest",1,["crate_swap::InvalidSwapRequest"]]], @@ -56,6 +55,7 @@ "ixgbe":[["impl Unpin for IxgbeNic",1,["ixgbe::IxgbeNic"]],["impl Unpin for LinkSpeedMbps",1,["ixgbe::LinkSpeedMbps"]],["impl Unpin for RxBufferSizeKiB",1,["ixgbe::RxBufferSizeKiB"]],["impl Unpin for FilterProtocol",1,["ixgbe::FilterProtocol"]]], "keycodes_ascii":[["impl Unpin for KeyboardModifiers",1,["keycodes_ascii::KeyboardModifiers"]],["impl Unpin for KeyAction",1,["keycodes_ascii::KeyAction"]],["impl Unpin for KeyEvent",1,["keycodes_ascii::KeyEvent"]],["impl Unpin for Keycode",1,["keycodes_ascii::Keycode"]]], "libterm":[["impl Unpin for Cursor",1,["libterm::cursor::Cursor"]],["impl Unpin for ScrollError",1,["libterm::ScrollError"]],["impl Unpin for Terminal",1,["libterm::Terminal"]]], +"local_storage_initializer":[["impl<T> Unpin for LocalStorageInitializer<T>where\n T: Unpin,",1,["local_storage_initializer::LocalStorageInitializer"]],["impl Unpin for Cls",1,["local_storage_initializer::Cls"]],["impl Unpin for Tls",1,["local_storage_initializer::Tls"]],["impl Unpin for LocalStorageInitializerError",1,["local_storage_initializer::LocalStorageInitializerError"]],["impl<T> Unpin for LocalStorageDataImage<T>where\n T: Unpin,",1,["local_storage_initializer::LocalStorageDataImage"]]], "locked_idt":[["impl Unpin for LockedIdt",1,["locked_idt::LockedIdt"]]], "madt":[["impl<'t> Unpin for Madt<'t>",1,["madt::Madt"]],["impl<'t> Unpin for MadtIter<'t>",1,["madt::MadtIter"]],["impl<'t> Unpin for MadtEntry<'t>",1,["madt::MadtEntry"]],["impl Unpin for MadtLocalApic",1,["madt::MadtLocalApic"]],["impl Unpin for MadtIoApic",1,["madt::MadtIoApic"]],["impl Unpin for MadtIntSrcOverride",1,["madt::MadtIntSrcOverride"]],["impl Unpin for MadtNonMaskableInterrupt",1,["madt::MadtNonMaskableInterrupt"]],["impl Unpin for MadtLocalApicAddressOverride",1,["madt::MadtLocalApicAddressOverride"]],["impl Unpin for MadtLocalX2Apic",1,["madt::MadtLocalX2Apic"]]], "memfs":[["impl Unpin for MemFile",1,["memfs::MemFile"]]], @@ -80,7 +80,6 @@ "page_table_entry":[["impl Unpin for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Unpin for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Unpin for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Unpin for Path",1,["path::Path"]],["impl Unpin for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Unpin for PciCapability",1,["pci::PciCapability"]],["impl Unpin for InterruptPin",1,["pci::InterruptPin"]],["impl Unpin for PciBus",1,["pci::PciBus"]],["impl Unpin for PciLocation",1,["pci::PciLocation"]],["impl Unpin for PciDevice",1,["pci::PciDevice"]],["impl Unpin for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Unpin for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Unpin for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], -"per_cpu":[["impl Unpin for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Unpin for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], "percent_encoding":[["impl Unpin for SIMPLE_ENCODE_SET",1,["percent_encoding::SIMPLE_ENCODE_SET"]],["impl Unpin for QUERY_ENCODE_SET",1,["percent_encoding::QUERY_ENCODE_SET"]],["impl Unpin for DEFAULT_ENCODE_SET",1,["percent_encoding::DEFAULT_ENCODE_SET"]],["impl Unpin for PATH_SEGMENT_ENCODE_SET",1,["percent_encoding::PATH_SEGMENT_ENCODE_SET"]],["impl Unpin for USERINFO_ENCODE_SET",1,["percent_encoding::USERINFO_ENCODE_SET"]],["impl<'a, E> Unpin for PercentEncode<'a, E>where\n E: Unpin,",1,["percent_encoding::PercentEncode"]],["impl<'a> Unpin for PercentDecode<'a>",1,["percent_encoding::PercentDecode"]]], "pic":[["impl Unpin for IrqStatusRegisters",1,["pic::IrqStatusRegisters"]],["impl Unpin for ChainedPics",1,["pic::ChainedPics"]]], "pmu_x86":[["impl Unpin for PerformanceCounters",1,["pmu_x86::stat::PerformanceCounters"]],["impl Unpin for PMUResults",1,["pmu_x86::stat::PMUResults"]],["impl Unpin for EventType",1,["pmu_x86::EventType"]],["impl Unpin for Counter",1,["pmu_x86::Counter"]],["impl Unpin for SampleResults",1,["pmu_x86::SampleResults"]]], @@ -121,7 +120,6 @@ "text_terminal":[["impl Unpin for Color",1,["text_terminal::ansi_colors::Color"]],["impl Unpin for ForegroundColor",1,["text_terminal::ansi_colors::ForegroundColor"]],["impl Unpin for BackgroundColor",1,["text_terminal::ansi_colors::BackgroundColor"]],["impl Unpin for UnderlinedColor",1,["text_terminal::ansi_colors::UnderlinedColor"]],["impl Unpin for Style",1,["text_terminal::ansi_style::Style"]],["impl<'old, 'new> Unpin for StyleDiff<'old, 'new>",1,["text_terminal::ansi_style::StyleDiff"]],["impl Unpin for AnsiStyleCodes",1,["text_terminal::ansi_style::AnsiStyleCodes"]],["impl Unpin for FormatFlags",1,["text_terminal::ansi_style::FormatFlags"]],["impl Unpin for AsciiControlCodes",1,["text_terminal::ansi_style::AsciiControlCodes"]],["impl Unpin for ModeSwitch",1,["text_terminal::ansi_style::ModeSwitch"]],["impl Unpin for StatusReportCommands",1,["text_terminal::ansi_style::StatusReportCommands"]],["impl Unpin for ScrollPosition",1,["text_terminal::ScrollPosition"]],["impl Unpin for Line",1,["text_terminal::Line"]],["impl<Backend> Unpin for TextTerminal<Backend>where\n Backend: Unpin,",1,["text_terminal::TextTerminal"]],["impl Unpin for ScrollbackBuffer",1,["text_terminal::ScrollbackBuffer"]],["impl Unpin for Character",1,["text_terminal::Character"]],["impl Unpin for Unit",1,["text_terminal::Unit"]],["impl Unpin for ScreenSize",1,["text_terminal::ScreenSize"]],["impl Unpin for ScreenPoint",1,["text_terminal::ScreenPoint"]],["impl Unpin for Row",1,["text_terminal::Row"]],["impl Unpin for Column",1,["text_terminal::Column"]],["impl Unpin for ScrollbackBufferPoint",1,["text_terminal::ScrollbackBufferPoint"]],["impl Unpin for LineIndex",1,["text_terminal::LineIndex"]],["impl Unpin for UnitIndex",1,["text_terminal::UnitIndex"]],["impl Unpin for CursorStyle",1,["text_terminal::CursorStyle"]],["impl<Output> Unpin for TtyBackend<Output>where\n Output: Unpin,",1,["text_terminal::TtyBackend"]],["impl Unpin for DisplayAction",1,["text_terminal::DisplayAction"]],["impl Unpin for ScrollAction",1,["text_terminal::ScrollAction"]],["impl Unpin for Wrap",1,["text_terminal::Wrap"]],["impl Unpin for InsertMode",1,["text_terminal::InsertMode"]],["impl Unpin for ShowCursor",1,["text_terminal::ShowCursor"]],["impl Unpin for CarriageReturnSendsLineFeed",1,["text_terminal::CarriageReturnSendsLineFeed"]],["impl Unpin for LineFeedSendsCarriageReturn",1,["text_terminal::LineFeedSendsCarriageReturn"]],["impl Unpin for TerminalMode",1,["text_terminal::TerminalMode"]]], "thread_local_macro":[["impl<T> Unpin for LocalKey<T>",1,["thread_local_macro::LocalKey"]],["impl Unpin for AccessError",1,["thread_local_macro::AccessError"]]], "time":[["impl Unpin for Instant",1,["time::Instant"]],["impl Unpin for Period",1,["time::Period"]],["impl Unpin for Monotonic",1,["time::Monotonic"]],["impl Unpin for WallTime",1,["time::WallTime"]]], -"tls_initializer":[["impl Unpin for TlsInitializer",1,["tls_initializer::TlsInitializer"]],["impl Unpin for TlsInitializerError",1,["tls_initializer::TlsInitializerError"]],["impl Unpin for TlsDataImage",1,["tls_initializer::TlsDataImage"]]], "tsc":[["impl Unpin for Tsc",1,["tsc::Tsc"]]], "tty":[["impl Unpin for LineDiscipline",1,["tty::discipline::LineDiscipline"]],["impl Unpin for Event",1,["tty::discipline::Event"]],["impl Unpin for Tty",1,["tty::Tty"]],["impl Unpin for Master",1,["tty::Master"]],["impl Unpin for Slave",1,["tty::Slave"]]], "unwind":[["impl Unpin for UnwindingContext",1,["unwind::UnwindingContext"]],["impl Unpin for StackFrame",1,["unwind::StackFrame"]],["impl Unpin for StackFrameIter",1,["unwind::StackFrameIter"]]], diff --git a/doc/implementors/core/ops/arith/trait.Sub.js b/doc/implementors/core/ops/arith/trait.Sub.js index f8c0e2b607..eddd73fea3 100644 --- a/doc/implementors/core/ops/arith/trait.Sub.js +++ b/doc/implementors/core/ops/arith/trait.Sub.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl Sub<AtaStatus> for AtaStatus"],["impl Sub<AtaError> for AtaError"]], +"ata":[["impl Sub<AtaError> for AtaError"],["impl Sub<AtaStatus> for AtaStatus"]], "boot_info":[["impl Sub<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl Sub<KeyboardModifiers> for KeyboardModifiers"]], "memory_structs":[["impl Sub<usize> for PhysicalAddress"],["impl Sub<VirtualAddress> for VirtualAddress"],["impl Sub<usize> for VirtualAddress"],["impl Sub<usize> for Page"],["impl Sub<PhysicalAddress> for PhysicalAddress"],["impl Sub<usize> for Frame"]], diff --git a/doc/implementors/core/ops/bit/trait.BitAnd.js b/doc/implementors/core/ops/bit/trait.BitAnd.js index 269ec1e3ec..f763653e0a 100644 --- a/doc/implementors/core/ops/bit/trait.BitAnd.js +++ b/doc/implementors/core/ops/bit/trait.BitAnd.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl BitAnd<AtaError> for AtaError"],["impl BitAnd<AtaStatus> for AtaStatus"]], +"ata":[["impl BitAnd<AtaStatus> for AtaStatus"],["impl BitAnd<AtaError> for AtaError"]], "boot_info":[["impl BitAnd<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitAnd<KeyboardModifiers> for KeyboardModifiers"]], "memory_structs":[["impl BitAnd<VirtualAddress> for VirtualAddress"],["impl BitAnd<PhysicalAddress> for PhysicalAddress"]], diff --git a/doc/implementors/core/ops/bit/trait.BitAndAssign.js b/doc/implementors/core/ops/bit/trait.BitAndAssign.js index d78e06e179..3574ca0555 100644 --- a/doc/implementors/core/ops/bit/trait.BitAndAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitAndAssign.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl BitAndAssign<AtaStatus> for AtaStatus"],["impl BitAndAssign<AtaError> for AtaError"]], +"ata":[["impl BitAndAssign<AtaError> for AtaError"],["impl BitAndAssign<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitAndAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitAndAssign<KeyboardModifiers> for KeyboardModifiers"]], "memory_structs":[["impl BitAndAssign<VirtualAddress> for VirtualAddress"],["impl BitAndAssign<PhysicalAddress> for PhysicalAddress"]], diff --git a/doc/implementors/core/ops/bit/trait.BitOrAssign.js b/doc/implementors/core/ops/bit/trait.BitOrAssign.js index 9b996d76fc..15670f5afd 100644 --- a/doc/implementors/core/ops/bit/trait.BitOrAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitOrAssign.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl BitOrAssign<AtaStatus> for AtaStatus"],["impl BitOrAssign<AtaError> for AtaError"]], +"ata":[["impl BitOrAssign<AtaError> for AtaError"],["impl BitOrAssign<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitOrAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitOrAssign<KeyboardModifiers> for KeyboardModifiers"]], "memory_structs":[["impl BitOrAssign<PhysicalAddress> for PhysicalAddress"],["impl BitOrAssign<VirtualAddress> for VirtualAddress"]], diff --git a/doc/implementors/core/ops/bit/trait.BitXor.js b/doc/implementors/core/ops/bit/trait.BitXor.js index 6da1277759..61bdf2bb4b 100644 --- a/doc/implementors/core/ops/bit/trait.BitXor.js +++ b/doc/implementors/core/ops/bit/trait.BitXor.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl BitXor<AtaStatus> for AtaStatus"],["impl BitXor<AtaError> for AtaError"]], +"ata":[["impl BitXor<AtaError> for AtaError"],["impl BitXor<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitXor<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitXor<KeyboardModifiers> for KeyboardModifiers"]], "memory_structs":[["impl BitXor<PhysicalAddress> for PhysicalAddress"],["impl BitXor<VirtualAddress> for VirtualAddress"]], diff --git a/doc/implementors/core/ops/bit/trait.BitXorAssign.js b/doc/implementors/core/ops/bit/trait.BitXorAssign.js index 34d82b1157..bb38a4ae34 100644 --- a/doc/implementors/core/ops/bit/trait.BitXorAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitXorAssign.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl BitXorAssign<AtaStatus> for AtaStatus"],["impl BitXorAssign<AtaError> for AtaError"]], +"ata":[["impl BitXorAssign<AtaError> for AtaError"],["impl BitXorAssign<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitXorAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitXorAssign<KeyboardModifiers> for KeyboardModifiers"]], "memory_structs":[["impl BitXorAssign<PhysicalAddress> for PhysicalAddress"],["impl BitXorAssign<VirtualAddress> for VirtualAddress"]], diff --git a/doc/implementors/core/ops/bit/trait.Not.js b/doc/implementors/core/ops/bit/trait.Not.js index 389607a760..f7e5b5728d 100644 --- a/doc/implementors/core/ops/bit/trait.Not.js +++ b/doc/implementors/core/ops/bit/trait.Not.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"ata":[["impl Not for AtaError"],["impl Not for AtaStatus"]], +"ata":[["impl Not for AtaStatus"],["impl Not for AtaError"]], "boot_info":[["impl Not for ElfSectionFlags"]], "keycodes_ascii":[["impl Not for KeyboardModifiers"]], "pte_flags":[["impl Not for PteFlagsAarch64"],["impl Not for PteFlags"],["impl Not for PteFlagsX86_64"]], diff --git a/doc/implementors/core/ops/deref/trait.Deref.js b/doc/implementors/core/ops/deref/trait.Deref.js index 93fb68dbf4..8b23d4d376 100644 --- a/doc/implementors/core/ops/deref/trait.Deref.js +++ b/doc/implementors/core/ops/deref/trait.Deref.js @@ -6,24 +6,23 @@ "irq_safety":[["impl<'a, T: ?Sized> Deref for MutexIrqSafeGuard<'a, T>"],["impl<'rwlock, T: ?Sized> Deref for RwLockIrqSafeReadGuard<'rwlock, T>"],["impl<'rwlock, T: ?Sized> Deref for RwLockIrqSafeWriteGuard<'rwlock, T>"]], "memory":[["impl Deref for MappedPages"],["impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedSliceMappedPages<T, M, B>"],["impl Deref for PageTable"],["impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedMappedPages<T, M, B>"]], "memory_structs":[["impl Deref for PageRange"],["impl Deref for FrameRange"]], -"mod_mgmt":[["impl Deref for AppCrateRef"],["impl Deref for NamespaceDir"]], +"mod_mgmt":[["impl Deref for NamespaceDir"],["impl Deref for AppCrateRef"]], "net":[["impl<'a, T> Deref for LockedSocket<'a, T>where\n T: AnySocket<'static>,"]], "nic_buffers":[["impl Deref for TransmitBuffer"],["impl Deref for ReceiveBuffer"]], "no_drop":[["impl<T> Deref for NoDrop<T>"]], "owned_borrowed_trait":[["impl<'t, T> Deref for Borrowed<'t, T>"],["impl<T> Deref for Owned<T>"]], "page_table_entry":[["impl Deref for UnmappedFrameRange"]], "path":[["impl Deref for Path"]], -"pci":[["impl Deref for PciDevice"],["impl Deref for MsixVectorTable"]], -"per_cpu":[["impl Deref for CpuLocalCpuId"]], +"pci":[["impl Deref for MsixVectorTable"],["impl Deref for PciDevice"]], "root":[["impl Deref for ROOT"]], "runqueue_epoch":[["impl Deref for RunQueue"],["impl Deref for EpochTaskRef"]], -"runqueue_priority":[["impl Deref for PriorityTaskRef"],["impl Deref for RunQueue"]], +"runqueue_priority":[["impl Deref for RunQueue"],["impl Deref for PriorityTaskRef"]], "runqueue_round_robin":[["impl Deref for RoundRobinTaskRef"],["impl Deref for RunQueue"]], "serial_port":[["impl Deref for SerialPort"]], "spawn":[["impl Deref for BootstrapTaskRef"]], "stack":[["impl Deref for Stack"]], "stdio":[["impl Deref for KeyEventReadGuard"]], "str_ref":[["impl Deref for StrRef"]], -"task":[["impl Deref for TaskRef"],["impl Deref for ExitableTaskRef"],["impl Deref for JoinableTaskRef"]], +"task":[["impl Deref for TaskRef"],["impl Deref for JoinableTaskRef"],["impl Deref for ExitableTaskRef"]], "text_terminal":[["impl Deref for ScrollbackBuffer"],["impl Deref for Unit"],["impl Deref for Line"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/deref/trait.DerefMut.js b/doc/implementors/core/ops/deref/trait.DerefMut.js index b481c9f827..46ed8bc9b4 100644 --- a/doc/implementors/core/ops/deref/trait.DerefMut.js +++ b/doc/implementors/core/ops/deref/trait.DerefMut.js @@ -11,7 +11,7 @@ "pci":[["impl DerefMut for MsixVectorTable"],["impl DerefMut for PciDevice"]], "runqueue_epoch":[["impl DerefMut for RunQueue"],["impl DerefMut for EpochTaskRef"]], "runqueue_priority":[["impl DerefMut for RunQueue"],["impl DerefMut for PriorityTaskRef"]], -"runqueue_round_robin":[["impl DerefMut for RoundRobinTaskRef"],["impl DerefMut for RunQueue"]], +"runqueue_round_robin":[["impl DerefMut for RunQueue"],["impl DerefMut for RoundRobinTaskRef"]], "serial_port":[["impl DerefMut for SerialPort"]], "stack":[["impl DerefMut for Stack"]], "text_terminal":[["impl DerefMut for ScrollbackBuffer"],["impl DerefMut for Line"]] diff --git a/doc/implementors/core/ops/drop/trait.Drop.js b/doc/implementors/core/ops/drop/trait.Drop.js index e64d68ddaf..040a36d023 100644 --- a/doc/implementors/core/ops/drop/trait.Drop.js +++ b/doc/implementors/core/ops/drop/trait.Drop.js @@ -17,7 +17,7 @@ "serial_port_basic":[["impl Drop for SerialPort"]], "spawn":[["impl Drop for BootstrapTaskRef"]], "stdio":[["impl Drop for KeyEventReadGuard"]], -"task":[["impl Drop for JoinableTaskRef"],["impl Drop for ScheduleOnDrop"]], +"task":[["impl Drop for ScheduleOnDrop"],["impl Drop for JoinableTaskRef"]], "task_struct":[["impl Drop for Task"]], "text_terminal":[["impl Drop for ScrollAction"]], "virtual_nic":[["impl<S, T, U, V> Drop for VirtualNic<S, T, U, V>where\n S: RxQueueRegisters + 'static,\n T: RxDescriptor + 'static,\n U: TxQueueRegisters + 'static,\n V: TxDescriptor + 'static,"]], diff --git a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 06d527f64f..f6dba55abe 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -17,7 +17,6 @@ "context_switch_sse":[["impl RefUnwindSafe for ContextSSE",1,["context_switch_sse::ContextSSE"]]], "cow_arc":[["impl<T> !RefUnwindSafe for CowArc<T>",1,["cow_arc::CowArc"]],["impl<T> !RefUnwindSafe for CowWeak<T>",1,["cow_arc::CowWeak"]]], "cpu":[["impl RefUnwindSafe for OptionalCpuId",1,["cpu::arch::OptionalCpuId"]],["impl RefUnwindSafe for CpuId",1,["cpu::CpuId"]]], -"cpu_local":[["impl RefUnwindSafe for PerCpuField",1,["cpu_local::PerCpuField"]],["impl<T> RefUnwindSafe for CpuLocal<T>where\n T: RefUnwindSafe,",1,["cpu_local::CpuLocal"]]], "crate_metadata":[["impl RefUnwindSafe for CrateType",1,["crate_metadata::CrateType"]],["impl !RefUnwindSafe for LoadedCrate",1,["crate_metadata::LoadedCrate"]],["impl !RefUnwindSafe for LoadedSectionInner",1,["crate_metadata::LoadedSectionInner"]],["impl !RefUnwindSafe for LoadedSection",1,["crate_metadata::LoadedSection"]],["impl !RefUnwindSafe for StrongDependency",1,["crate_metadata::StrongDependency"]],["impl !RefUnwindSafe for WeakDependent",1,["crate_metadata::WeakDependent"]],["impl RefUnwindSafe for RelocationEntry",1,["crate_metadata::RelocationEntry"]]], "crate_metadata_serde":[["impl RefUnwindSafe for SerializedCrate",1,["crate_metadata_serde::SerializedCrate"]],["impl RefUnwindSafe for SerializedSection",1,["crate_metadata_serde::SerializedSection"]],["impl RefUnwindSafe for SectionType",1,["crate_metadata_serde::SectionType"]]], "crate_swap":[["impl !RefUnwindSafe for SwapRequest",1,["crate_swap::SwapRequest"]],["impl !RefUnwindSafe for InvalidSwapRequest",1,["crate_swap::InvalidSwapRequest"]]], @@ -56,6 +55,7 @@ "ixgbe":[["impl !RefUnwindSafe for IxgbeNic",1,["ixgbe::IxgbeNic"]],["impl RefUnwindSafe for LinkSpeedMbps",1,["ixgbe::LinkSpeedMbps"]],["impl RefUnwindSafe for RxBufferSizeKiB",1,["ixgbe::RxBufferSizeKiB"]],["impl RefUnwindSafe for FilterProtocol",1,["ixgbe::FilterProtocol"]]], "keycodes_ascii":[["impl RefUnwindSafe for KeyboardModifiers",1,["keycodes_ascii::KeyboardModifiers"]],["impl RefUnwindSafe for KeyAction",1,["keycodes_ascii::KeyAction"]],["impl RefUnwindSafe for KeyEvent",1,["keycodes_ascii::KeyEvent"]],["impl RefUnwindSafe for Keycode",1,["keycodes_ascii::Keycode"]]], "libterm":[["impl RefUnwindSafe for Cursor",1,["libterm::cursor::Cursor"]],["impl RefUnwindSafe for ScrollError",1,["libterm::ScrollError"]],["impl !RefUnwindSafe for Terminal",1,["libterm::Terminal"]]], +"local_storage_initializer":[["impl<T> !RefUnwindSafe for LocalStorageInitializer<T>",1,["local_storage_initializer::LocalStorageInitializer"]],["impl RefUnwindSafe for Cls",1,["local_storage_initializer::Cls"]],["impl RefUnwindSafe for Tls",1,["local_storage_initializer::Tls"]],["impl RefUnwindSafe for LocalStorageInitializerError",1,["local_storage_initializer::LocalStorageInitializerError"]],["impl<T> RefUnwindSafe for LocalStorageDataImage<T>where\n T: RefUnwindSafe,",1,["local_storage_initializer::LocalStorageDataImage"]]], "locked_idt":[["impl !RefUnwindSafe for LockedIdt",1,["locked_idt::LockedIdt"]]], "madt":[["impl<'t> RefUnwindSafe for Madt<'t>",1,["madt::Madt"]],["impl<'t> RefUnwindSafe for MadtIter<'t>",1,["madt::MadtIter"]],["impl<'t> RefUnwindSafe for MadtEntry<'t>",1,["madt::MadtEntry"]],["impl RefUnwindSafe for MadtLocalApic",1,["madt::MadtLocalApic"]],["impl RefUnwindSafe for MadtIoApic",1,["madt::MadtIoApic"]],["impl RefUnwindSafe for MadtIntSrcOverride",1,["madt::MadtIntSrcOverride"]],["impl RefUnwindSafe for MadtNonMaskableInterrupt",1,["madt::MadtNonMaskableInterrupt"]],["impl RefUnwindSafe for MadtLocalApicAddressOverride",1,["madt::MadtLocalApicAddressOverride"]],["impl RefUnwindSafe for MadtLocalX2Apic",1,["madt::MadtLocalX2Apic"]]], "memfs":[["impl !RefUnwindSafe for MemFile",1,["memfs::MemFile"]]], @@ -80,7 +80,6 @@ "page_table_entry":[["impl RefUnwindSafe for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl RefUnwindSafe for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl RefUnwindSafe for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl RefUnwindSafe for Path",1,["path::Path"]],["impl RefUnwindSafe for PathComponent",1,["path::PathComponent"]]], "pci":[["impl RefUnwindSafe for PciCapability",1,["pci::PciCapability"]],["impl RefUnwindSafe for InterruptPin",1,["pci::InterruptPin"]],["impl RefUnwindSafe for PciBus",1,["pci::PciBus"]],["impl RefUnwindSafe for PciLocation",1,["pci::PciLocation"]],["impl RefUnwindSafe for PciDevice",1,["pci::PciDevice"]],["impl RefUnwindSafe for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl RefUnwindSafe for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl RefUnwindSafe for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], -"per_cpu":[["impl !RefUnwindSafe for PerCpuData",1,["per_cpu::PerCpuData"]],["impl RefUnwindSafe for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], "percent_encoding":[["impl RefUnwindSafe for SIMPLE_ENCODE_SET",1,["percent_encoding::SIMPLE_ENCODE_SET"]],["impl RefUnwindSafe for QUERY_ENCODE_SET",1,["percent_encoding::QUERY_ENCODE_SET"]],["impl RefUnwindSafe for DEFAULT_ENCODE_SET",1,["percent_encoding::DEFAULT_ENCODE_SET"]],["impl RefUnwindSafe for PATH_SEGMENT_ENCODE_SET",1,["percent_encoding::PATH_SEGMENT_ENCODE_SET"]],["impl RefUnwindSafe for USERINFO_ENCODE_SET",1,["percent_encoding::USERINFO_ENCODE_SET"]],["impl<'a, E> RefUnwindSafe for PercentEncode<'a, E>where\n E: RefUnwindSafe,",1,["percent_encoding::PercentEncode"]],["impl<'a> RefUnwindSafe for PercentDecode<'a>",1,["percent_encoding::PercentDecode"]]], "pic":[["impl RefUnwindSafe for IrqStatusRegisters",1,["pic::IrqStatusRegisters"]],["impl RefUnwindSafe for ChainedPics",1,["pic::ChainedPics"]]], "pmu_x86":[["impl RefUnwindSafe for PerformanceCounters",1,["pmu_x86::stat::PerformanceCounters"]],["impl RefUnwindSafe for PMUResults",1,["pmu_x86::stat::PMUResults"]],["impl RefUnwindSafe for EventType",1,["pmu_x86::EventType"]],["impl RefUnwindSafe for Counter",1,["pmu_x86::Counter"]],["impl RefUnwindSafe for SampleResults",1,["pmu_x86::SampleResults"]]], @@ -121,7 +120,6 @@ "text_terminal":[["impl RefUnwindSafe for Color",1,["text_terminal::ansi_colors::Color"]],["impl RefUnwindSafe for ForegroundColor",1,["text_terminal::ansi_colors::ForegroundColor"]],["impl RefUnwindSafe for BackgroundColor",1,["text_terminal::ansi_colors::BackgroundColor"]],["impl RefUnwindSafe for UnderlinedColor",1,["text_terminal::ansi_colors::UnderlinedColor"]],["impl RefUnwindSafe for Style",1,["text_terminal::ansi_style::Style"]],["impl<'old, 'new> RefUnwindSafe for StyleDiff<'old, 'new>",1,["text_terminal::ansi_style::StyleDiff"]],["impl RefUnwindSafe for AnsiStyleCodes",1,["text_terminal::ansi_style::AnsiStyleCodes"]],["impl RefUnwindSafe for FormatFlags",1,["text_terminal::ansi_style::FormatFlags"]],["impl RefUnwindSafe for AsciiControlCodes",1,["text_terminal::ansi_style::AsciiControlCodes"]],["impl RefUnwindSafe for ModeSwitch",1,["text_terminal::ansi_style::ModeSwitch"]],["impl RefUnwindSafe for StatusReportCommands",1,["text_terminal::ansi_style::StatusReportCommands"]],["impl RefUnwindSafe for ScrollPosition",1,["text_terminal::ScrollPosition"]],["impl RefUnwindSafe for Line",1,["text_terminal::Line"]],["impl<Backend> RefUnwindSafe for TextTerminal<Backend>where\n Backend: RefUnwindSafe,",1,["text_terminal::TextTerminal"]],["impl RefUnwindSafe for ScrollbackBuffer",1,["text_terminal::ScrollbackBuffer"]],["impl RefUnwindSafe for Character",1,["text_terminal::Character"]],["impl RefUnwindSafe for Unit",1,["text_terminal::Unit"]],["impl RefUnwindSafe for ScreenSize",1,["text_terminal::ScreenSize"]],["impl RefUnwindSafe for ScreenPoint",1,["text_terminal::ScreenPoint"]],["impl RefUnwindSafe for Row",1,["text_terminal::Row"]],["impl RefUnwindSafe for Column",1,["text_terminal::Column"]],["impl RefUnwindSafe for ScrollbackBufferPoint",1,["text_terminal::ScrollbackBufferPoint"]],["impl RefUnwindSafe for LineIndex",1,["text_terminal::LineIndex"]],["impl RefUnwindSafe for UnitIndex",1,["text_terminal::UnitIndex"]],["impl RefUnwindSafe for CursorStyle",1,["text_terminal::CursorStyle"]],["impl<Output> RefUnwindSafe for TtyBackend<Output>where\n Output: RefUnwindSafe,",1,["text_terminal::TtyBackend"]],["impl RefUnwindSafe for DisplayAction",1,["text_terminal::DisplayAction"]],["impl RefUnwindSafe for ScrollAction",1,["text_terminal::ScrollAction"]],["impl RefUnwindSafe for Wrap",1,["text_terminal::Wrap"]],["impl RefUnwindSafe for InsertMode",1,["text_terminal::InsertMode"]],["impl RefUnwindSafe for ShowCursor",1,["text_terminal::ShowCursor"]],["impl RefUnwindSafe for CarriageReturnSendsLineFeed",1,["text_terminal::CarriageReturnSendsLineFeed"]],["impl RefUnwindSafe for LineFeedSendsCarriageReturn",1,["text_terminal::LineFeedSendsCarriageReturn"]],["impl RefUnwindSafe for TerminalMode",1,["text_terminal::TerminalMode"]]], "thread_local_macro":[["impl<T> RefUnwindSafe for LocalKey<T>",1,["thread_local_macro::LocalKey"]],["impl RefUnwindSafe for AccessError",1,["thread_local_macro::AccessError"]]], "time":[["impl RefUnwindSafe for Instant",1,["time::Instant"]],["impl RefUnwindSafe for Period",1,["time::Period"]],["impl RefUnwindSafe for Monotonic",1,["time::Monotonic"]],["impl RefUnwindSafe for WallTime",1,["time::WallTime"]]], -"tls_initializer":[["impl !RefUnwindSafe for TlsInitializer",1,["tls_initializer::TlsInitializer"]],["impl RefUnwindSafe for TlsInitializerError",1,["tls_initializer::TlsInitializerError"]],["impl RefUnwindSafe for TlsDataImage",1,["tls_initializer::TlsDataImage"]]], "tsc":[["impl RefUnwindSafe for Tsc",1,["tsc::Tsc"]]], "tty":[["impl !RefUnwindSafe for LineDiscipline",1,["tty::discipline::LineDiscipline"]],["impl RefUnwindSafe for Event",1,["tty::discipline::Event"]],["impl !RefUnwindSafe for Tty",1,["tty::Tty"]],["impl !RefUnwindSafe for Master",1,["tty::Master"]],["impl !RefUnwindSafe for Slave",1,["tty::Slave"]]], "unwind":[["impl !RefUnwindSafe for UnwindingContext",1,["unwind::UnwindingContext"]],["impl RefUnwindSafe for StackFrame",1,["unwind::StackFrame"]],["impl !RefUnwindSafe for StackFrameIter",1,["unwind::StackFrameIter"]]], diff --git a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 7e1663b2f7..138c5e94f4 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -17,7 +17,6 @@ "context_switch_sse":[["impl UnwindSafe for ContextSSE",1,["context_switch_sse::ContextSSE"]]], "cow_arc":[["impl<T> !UnwindSafe for CowArc<T>",1,["cow_arc::CowArc"]],["impl<T> !UnwindSafe for CowWeak<T>",1,["cow_arc::CowWeak"]]], "cpu":[["impl UnwindSafe for OptionalCpuId",1,["cpu::arch::OptionalCpuId"]],["impl UnwindSafe for CpuId",1,["cpu::CpuId"]]], -"cpu_local":[["impl UnwindSafe for PerCpuField",1,["cpu_local::PerCpuField"]],["impl<T> UnwindSafe for CpuLocal<T>where\n T: UnwindSafe,",1,["cpu_local::CpuLocal"]]], "crate_metadata":[["impl UnwindSafe for CrateType",1,["crate_metadata::CrateType"]],["impl !UnwindSafe for LoadedCrate",1,["crate_metadata::LoadedCrate"]],["impl !UnwindSafe for LoadedSectionInner",1,["crate_metadata::LoadedSectionInner"]],["impl !UnwindSafe for LoadedSection",1,["crate_metadata::LoadedSection"]],["impl !UnwindSafe for StrongDependency",1,["crate_metadata::StrongDependency"]],["impl !UnwindSafe for WeakDependent",1,["crate_metadata::WeakDependent"]],["impl UnwindSafe for RelocationEntry",1,["crate_metadata::RelocationEntry"]]], "crate_metadata_serde":[["impl UnwindSafe for SerializedCrate",1,["crate_metadata_serde::SerializedCrate"]],["impl UnwindSafe for SerializedSection",1,["crate_metadata_serde::SerializedSection"]],["impl UnwindSafe for SectionType",1,["crate_metadata_serde::SectionType"]]], "crate_swap":[["impl !UnwindSafe for SwapRequest",1,["crate_swap::SwapRequest"]],["impl !UnwindSafe for InvalidSwapRequest",1,["crate_swap::InvalidSwapRequest"]]], @@ -56,6 +55,7 @@ "ixgbe":[["impl !UnwindSafe for IxgbeNic",1,["ixgbe::IxgbeNic"]],["impl UnwindSafe for LinkSpeedMbps",1,["ixgbe::LinkSpeedMbps"]],["impl UnwindSafe for RxBufferSizeKiB",1,["ixgbe::RxBufferSizeKiB"]],["impl UnwindSafe for FilterProtocol",1,["ixgbe::FilterProtocol"]]], "keycodes_ascii":[["impl UnwindSafe for KeyboardModifiers",1,["keycodes_ascii::KeyboardModifiers"]],["impl UnwindSafe for KeyAction",1,["keycodes_ascii::KeyAction"]],["impl UnwindSafe for KeyEvent",1,["keycodes_ascii::KeyEvent"]],["impl UnwindSafe for Keycode",1,["keycodes_ascii::Keycode"]]], "libterm":[["impl UnwindSafe for Cursor",1,["libterm::cursor::Cursor"]],["impl UnwindSafe for ScrollError",1,["libterm::ScrollError"]],["impl !UnwindSafe for Terminal",1,["libterm::Terminal"]]], +"local_storage_initializer":[["impl<T> !UnwindSafe for LocalStorageInitializer<T>",1,["local_storage_initializer::LocalStorageInitializer"]],["impl UnwindSafe for Cls",1,["local_storage_initializer::Cls"]],["impl UnwindSafe for Tls",1,["local_storage_initializer::Tls"]],["impl UnwindSafe for LocalStorageInitializerError",1,["local_storage_initializer::LocalStorageInitializerError"]],["impl<T> UnwindSafe for LocalStorageDataImage<T>where\n T: UnwindSafe,",1,["local_storage_initializer::LocalStorageDataImage"]]], "locked_idt":[["impl UnwindSafe for LockedIdt",1,["locked_idt::LockedIdt"]]], "madt":[["impl<'t> UnwindSafe for Madt<'t>",1,["madt::Madt"]],["impl<'t> UnwindSafe for MadtIter<'t>",1,["madt::MadtIter"]],["impl<'t> UnwindSafe for MadtEntry<'t>",1,["madt::MadtEntry"]],["impl UnwindSafe for MadtLocalApic",1,["madt::MadtLocalApic"]],["impl UnwindSafe for MadtIoApic",1,["madt::MadtIoApic"]],["impl UnwindSafe for MadtIntSrcOverride",1,["madt::MadtIntSrcOverride"]],["impl UnwindSafe for MadtNonMaskableInterrupt",1,["madt::MadtNonMaskableInterrupt"]],["impl UnwindSafe for MadtLocalApicAddressOverride",1,["madt::MadtLocalApicAddressOverride"]],["impl UnwindSafe for MadtLocalX2Apic",1,["madt::MadtLocalX2Apic"]]], "memfs":[["impl !UnwindSafe for MemFile",1,["memfs::MemFile"]]], @@ -80,7 +80,6 @@ "page_table_entry":[["impl UnwindSafe for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl UnwindSafe for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl UnwindSafe for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl UnwindSafe for Path",1,["path::Path"]],["impl UnwindSafe for PathComponent",1,["path::PathComponent"]]], "pci":[["impl UnwindSafe for PciCapability",1,["pci::PciCapability"]],["impl UnwindSafe for InterruptPin",1,["pci::InterruptPin"]],["impl UnwindSafe for PciBus",1,["pci::PciBus"]],["impl UnwindSafe for PciLocation",1,["pci::PciLocation"]],["impl UnwindSafe for PciDevice",1,["pci::PciDevice"]],["impl UnwindSafe for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl UnwindSafe for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl UnwindSafe for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], -"per_cpu":[["impl !UnwindSafe for PerCpuData",1,["per_cpu::PerCpuData"]],["impl UnwindSafe for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], "percent_encoding":[["impl UnwindSafe for SIMPLE_ENCODE_SET",1,["percent_encoding::SIMPLE_ENCODE_SET"]],["impl UnwindSafe for QUERY_ENCODE_SET",1,["percent_encoding::QUERY_ENCODE_SET"]],["impl UnwindSafe for DEFAULT_ENCODE_SET",1,["percent_encoding::DEFAULT_ENCODE_SET"]],["impl UnwindSafe for PATH_SEGMENT_ENCODE_SET",1,["percent_encoding::PATH_SEGMENT_ENCODE_SET"]],["impl UnwindSafe for USERINFO_ENCODE_SET",1,["percent_encoding::USERINFO_ENCODE_SET"]],["impl<'a, E> UnwindSafe for PercentEncode<'a, E>where\n E: UnwindSafe,",1,["percent_encoding::PercentEncode"]],["impl<'a> UnwindSafe for PercentDecode<'a>",1,["percent_encoding::PercentDecode"]]], "pic":[["impl UnwindSafe for IrqStatusRegisters",1,["pic::IrqStatusRegisters"]],["impl UnwindSafe for ChainedPics",1,["pic::ChainedPics"]]], "pmu_x86":[["impl UnwindSafe for PerformanceCounters",1,["pmu_x86::stat::PerformanceCounters"]],["impl UnwindSafe for PMUResults",1,["pmu_x86::stat::PMUResults"]],["impl UnwindSafe for EventType",1,["pmu_x86::EventType"]],["impl UnwindSafe for Counter",1,["pmu_x86::Counter"]],["impl UnwindSafe for SampleResults",1,["pmu_x86::SampleResults"]]], @@ -121,7 +120,6 @@ "text_terminal":[["impl UnwindSafe for Color",1,["text_terminal::ansi_colors::Color"]],["impl UnwindSafe for ForegroundColor",1,["text_terminal::ansi_colors::ForegroundColor"]],["impl UnwindSafe for BackgroundColor",1,["text_terminal::ansi_colors::BackgroundColor"]],["impl UnwindSafe for UnderlinedColor",1,["text_terminal::ansi_colors::UnderlinedColor"]],["impl UnwindSafe for Style",1,["text_terminal::ansi_style::Style"]],["impl<'old, 'new> UnwindSafe for StyleDiff<'old, 'new>",1,["text_terminal::ansi_style::StyleDiff"]],["impl UnwindSafe for AnsiStyleCodes",1,["text_terminal::ansi_style::AnsiStyleCodes"]],["impl UnwindSafe for FormatFlags",1,["text_terminal::ansi_style::FormatFlags"]],["impl UnwindSafe for AsciiControlCodes",1,["text_terminal::ansi_style::AsciiControlCodes"]],["impl UnwindSafe for ModeSwitch",1,["text_terminal::ansi_style::ModeSwitch"]],["impl UnwindSafe for StatusReportCommands",1,["text_terminal::ansi_style::StatusReportCommands"]],["impl UnwindSafe for ScrollPosition",1,["text_terminal::ScrollPosition"]],["impl UnwindSafe for Line",1,["text_terminal::Line"]],["impl<Backend> UnwindSafe for TextTerminal<Backend>where\n Backend: UnwindSafe,",1,["text_terminal::TextTerminal"]],["impl UnwindSafe for ScrollbackBuffer",1,["text_terminal::ScrollbackBuffer"]],["impl UnwindSafe for Character",1,["text_terminal::Character"]],["impl UnwindSafe for Unit",1,["text_terminal::Unit"]],["impl UnwindSafe for ScreenSize",1,["text_terminal::ScreenSize"]],["impl UnwindSafe for ScreenPoint",1,["text_terminal::ScreenPoint"]],["impl UnwindSafe for Row",1,["text_terminal::Row"]],["impl UnwindSafe for Column",1,["text_terminal::Column"]],["impl UnwindSafe for ScrollbackBufferPoint",1,["text_terminal::ScrollbackBufferPoint"]],["impl UnwindSafe for LineIndex",1,["text_terminal::LineIndex"]],["impl UnwindSafe for UnitIndex",1,["text_terminal::UnitIndex"]],["impl UnwindSafe for CursorStyle",1,["text_terminal::CursorStyle"]],["impl<Output> UnwindSafe for TtyBackend<Output>where\n Output: UnwindSafe,",1,["text_terminal::TtyBackend"]],["impl UnwindSafe for DisplayAction",1,["text_terminal::DisplayAction"]],["impl UnwindSafe for ScrollAction",1,["text_terminal::ScrollAction"]],["impl UnwindSafe for Wrap",1,["text_terminal::Wrap"]],["impl UnwindSafe for InsertMode",1,["text_terminal::InsertMode"]],["impl UnwindSafe for ShowCursor",1,["text_terminal::ShowCursor"]],["impl UnwindSafe for CarriageReturnSendsLineFeed",1,["text_terminal::CarriageReturnSendsLineFeed"]],["impl UnwindSafe for LineFeedSendsCarriageReturn",1,["text_terminal::LineFeedSendsCarriageReturn"]],["impl UnwindSafe for TerminalMode",1,["text_terminal::TerminalMode"]]], "thread_local_macro":[["impl<T> UnwindSafe for LocalKey<T>",1,["thread_local_macro::LocalKey"]],["impl UnwindSafe for AccessError",1,["thread_local_macro::AccessError"]]], "time":[["impl UnwindSafe for Instant",1,["time::Instant"]],["impl UnwindSafe for Period",1,["time::Period"]],["impl UnwindSafe for Monotonic",1,["time::Monotonic"]],["impl UnwindSafe for WallTime",1,["time::WallTime"]]], -"tls_initializer":[["impl !UnwindSafe for TlsInitializer",1,["tls_initializer::TlsInitializer"]],["impl UnwindSafe for TlsInitializerError",1,["tls_initializer::TlsInitializerError"]],["impl UnwindSafe for TlsDataImage",1,["tls_initializer::TlsDataImage"]]], "tsc":[["impl UnwindSafe for Tsc",1,["tsc::Tsc"]]], "tty":[["impl !UnwindSafe for LineDiscipline",1,["tty::discipline::LineDiscipline"]],["impl UnwindSafe for Event",1,["tty::discipline::Event"]],["impl !UnwindSafe for Tty",1,["tty::Tty"]],["impl !UnwindSafe for Master",1,["tty::Master"]],["impl !UnwindSafe for Slave",1,["tty::Slave"]]], "unwind":[["impl !UnwindSafe for UnwindingContext",1,["unwind::UnwindingContext"]],["impl UnwindSafe for StackFrame",1,["unwind::StackFrame"]],["impl !UnwindSafe for StackFrameIter",1,["unwind::StackFrameIter"]]], diff --git a/doc/implementors/core2/io/traits/trait.Read.js b/doc/implementors/core2/io/traits/trait.Read.js index bac1324ff2..604b6520fb 100644 --- a/doc/implementors/core2/io/traits/trait.Read.js +++ b/doc/implementors/core2/io/traits/trait.Read.js @@ -2,5 +2,5 @@ "io":[["impl<IO> Read for ReaderWriter<IO>where\n IO: ByteReader,"],["impl<'io, IO, L, B> Read for &LockableIo<'io, IO, L, B>where\n IO: Read + 'io + ?Sized,\n L: for<'a> Lockable<'a, IO> + ?Sized,\n B: Borrow<L>,"],["impl<'io, IO, L, B> Read for LockableIo<'io, IO, L, B>where\n IO: Read + 'io + ?Sized,\n L: for<'a> Lockable<'a, IO> + ?Sized,\n B: Borrow<L>,"],["impl<IO> Read for Reader<IO>where\n IO: ByteReader,"]], "serial_port":[["impl Read for SerialPort"]], "stdio":[["impl<'a> Read for StdioReadGuard<'a>"]], -"tty":[["impl Read for Master"],["impl Read for Slave"]] +"tty":[["impl Read for Slave"],["impl Read for Master"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/fs_node/trait.Directory.js b/doc/implementors/fs_node/trait.Directory.js index 4b9abc8228..77282ca03e 100644 --- a/doc/implementors/fs_node/trait.Directory.js +++ b/doc/implementors/fs_node/trait.Directory.js @@ -1,5 +1,5 @@ (function() {var implementors = { "root":[["impl Directory for RootDirectory"]], -"task_fs":[["impl Directory for TaskFs"],["impl Directory for TaskDir"],["impl Directory for MmiDir"]], +"task_fs":[["impl Directory for TaskDir"],["impl Directory for TaskFs"],["impl Directory for MmiDir"]], "vfs_node":[["impl Directory for VFSDirectory"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/fs_node/trait.FsNode.js b/doc/implementors/fs_node/trait.FsNode.js index 839f66c6f9..cce80c8496 100644 --- a/doc/implementors/fs_node/trait.FsNode.js +++ b/doc/implementors/fs_node/trait.FsNode.js @@ -3,6 +3,6 @@ "heapfile":[["impl FsNode for HeapFile"]], "memfs":[["impl FsNode for MemFile"]], "root":[["impl FsNode for RootDirectory"]], -"task_fs":[["impl FsNode for TaskFile"],["impl FsNode for MmiDir"],["impl FsNode for TaskFs"],["impl FsNode for TaskDir"],["impl FsNode for MmiFile"]], +"task_fs":[["impl FsNode for TaskFile"],["impl FsNode for TaskDir"],["impl FsNode for MmiFile"],["impl FsNode for TaskFs"],["impl FsNode for MmiDir"]], "vfs_node":[["impl FsNode for VFSDirectory"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/io/trait.ByteReader.js b/doc/implementors/io/trait.ByteReader.js index dd91e28a6c..896a142151 100644 --- a/doc/implementors/io/trait.ByteReader.js +++ b/doc/implementors/io/trait.ByteReader.js @@ -2,5 +2,5 @@ "heapfile":[["impl ByteReader for HeapFile"]], "io":[], "memfs":[["impl ByteReader for MemFile"]], -"task_fs":[["impl ByteReader for TaskFile"],["impl ByteReader for MmiFile"]] +"task_fs":[["impl ByteReader for MmiFile"],["impl ByteReader for TaskFile"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/io/trait.ByteWriter.js b/doc/implementors/io/trait.ByteWriter.js index 8d5ca546ac..6bbac4aa3e 100644 --- a/doc/implementors/io/trait.ByteWriter.js +++ b/doc/implementors/io/trait.ByteWriter.js @@ -2,5 +2,5 @@ "heapfile":[["impl ByteWriter for HeapFile"]], "io":[], "memfs":[["impl ByteWriter for MemFile"]], -"task_fs":[["impl ByteWriter for TaskFile"],["impl ByteWriter for MmiFile"]] +"task_fs":[["impl ByteWriter for MmiFile"],["impl ByteWriter for TaskFile"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/io/trait.KnownLength.js b/doc/implementors/io/trait.KnownLength.js index 17e933d437..74aa654e57 100644 --- a/doc/implementors/io/trait.KnownLength.js +++ b/doc/implementors/io/trait.KnownLength.js @@ -4,5 +4,5 @@ "heapfile":[["impl KnownLength for HeapFile"]], "io":[], "memfs":[["impl KnownLength for MemFile"]], -"task_fs":[["impl KnownLength for TaskFile"],["impl KnownLength for MmiFile"]] +"task_fs":[["impl KnownLength for MmiFile"],["impl KnownLength for TaskFile"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/cpu_local/trait.CpuLocalField.js b/doc/implementors/local_storage_initializer/trait.LocalStorage.js similarity index 51% rename from doc/implementors/cpu_local/trait.CpuLocalField.js rename to doc/implementors/local_storage_initializer/trait.LocalStorage.js index 494c71ceb2..8e49b3cb03 100644 --- a/doc/implementors/cpu_local/trait.CpuLocalField.js +++ b/doc/implementors/local_storage_initializer/trait.LocalStorage.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"per_cpu":[["impl CpuLocalField for CpuLocalCpuId"]] +"local_storage_initializer":[] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/local_storage_initializer/all.html b/doc/local_storage_initializer/all.html new file mode 100644 index 0000000000..633dd7a99a --- /dev/null +++ b/doc/local_storage_initializer/all.html @@ -0,0 +1 @@ +List of all items in this crate
    \ No newline at end of file diff --git a/doc/local_storage_initializer/enum.LocalStorageInitializerError.html b/doc/local_storage_initializer/enum.LocalStorageInitializerError.html new file mode 100644 index 0000000000..b0cf4fab20 --- /dev/null +++ b/doc/local_storage_initializer/enum.LocalStorageInitializerError.html @@ -0,0 +1,22 @@ +LocalStorageInitializerError in local_storage_initializer - Rust
    pub enum LocalStorageInitializerError {
    +    OverlapWithExistingSection(usize),
    +    InvalidVirtualAddress(usize),
    +    NoRemainingSpace,
    +}
    Expand description

    Errors that may occur when adding sections to a LocalStorageInitializer.

    +

    Variants§

    §

    OverlapWithExistingSection(usize)

    Inserting a CLS/TLS section at the included offset +would erroneously overlap with an existing section. +This indicates a link-time bug or a bug in the symbol parsing code +that invokes the [LocalStorageInitializer::add_existing_static_tls_section()].

    +
    §

    InvalidVirtualAddress(usize)

    The included virtual address calculated for a CLS/TLS section was invalid.

    +
    §

    NoRemainingSpace

    There was insufficient space to insert a CLS/TLS section into the data image.

    +

    Trait Implementations§

    source§

    impl Debug for LocalStorageInitializerError

    source§

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

    Formats the value using the given formatter. Read more

    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, 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.
    \ No newline at end of file diff --git a/doc/local_storage_initializer/index.html b/doc/local_storage_initializer/index.html new file mode 100644 index 0000000000..f0228bb044 --- /dev/null +++ b/doc/local_storage_initializer/index.html @@ -0,0 +1,13 @@ +local_storage_initializer - Rust
    Expand description

    Logic for generating thread-local storage (TLS) and CPU-local storage (CLS) images.

    +

    The two key types are:

    +
      +
    1. LocalStorageInitializer: a “factory” that maintains a list of loaded sections +in order to correctly generate new local storage data images.
    2. +
    3. LocalStorageDataImage: a generated local storage data image that can be set +as the current data image.
    4. +
    +

    TODO FIXME: currently we are unsure of the virt_addr_values calculated +for TLS sections on aarch64. The placement of those sections in the +TLS data image is correct, but relocations against them may not be. +TODO: We don’t really need a TLS self pointer for CLS.

    +

    Structs

    Enums

    Traits

    Type Definitions

    \ No newline at end of file diff --git a/doc/local_storage_initializer/sidebar-items.js b/doc/local_storage_initializer/sidebar-items.js new file mode 100644 index 0000000000..01d250ecf7 --- /dev/null +++ b/doc/local_storage_initializer/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["LocalStorageInitializerError"],"struct":["Cls","LocalStorageDataImage","LocalStorageInitializer","Tls"],"trait":["LocalStorage"],"type":["ClsDataImage","ClsInitializer","TlsDataImage","TlsInitializer"]}; \ No newline at end of file diff --git a/doc/local_storage_initializer/struct.Cls.html b/doc/local_storage_initializer/struct.Cls.html new file mode 100644 index 0000000000..4101c7cc39 --- /dev/null +++ b/doc/local_storage_initializer/struct.Cls.html @@ -0,0 +1,11 @@ +Cls in local_storage_initializer - Rust
    #[non_exhaustive]
    pub struct Cls {}

    Trait Implementations§

    source§

    impl Debug for Cls

    source§

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

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

    impl LocalStorage for Cls

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Cls

    §

    impl Send for Cls

    §

    impl Sync for Cls

    §

    impl Unpin for Cls

    §

    impl UnwindSafe for Cls

    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, 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.
    \ No newline at end of file diff --git a/doc/local_storage_initializer/struct.LocalStorageDataImage.html b/doc/local_storage_initializer/struct.LocalStorageDataImage.html new file mode 100644 index 0000000000..2dac07eb2a --- /dev/null +++ b/doc/local_storage_initializer/struct.LocalStorageDataImage.html @@ -0,0 +1,35 @@ +LocalStorageDataImage in local_storage_initializer - Rust
    pub struct LocalStorageDataImage<T>where
    +    T: LocalStorage,{ /* private fields */ }
    Expand description

    An initialized data image ready to be used by a CPU/new task.

    +

    The data is opaque, but one can obtain a pointer to the CLS/TLS area.

    +

    The data is “immutable” with respect to Theseus task management functions +at the language level. However, it will be modified by CLS/TLS accesses.

    +

    Implementations§

    source§

    impl<T> LocalStorageDataImage<T>where + T: LocalStorage,

    source

    pub const fn new() -> Self

    Creates an empty data image.

    +
    source

    pub fn inherit(&mut self, other: &Self)

    Inherits the data from another data image.

    +
    Panics
    +

    Panics if the other image has a longer length, or (on x86_64) if the other +image has a differently sized static area.

    +
    source§

    impl LocalStorageDataImage<Cls>

    source

    pub unsafe fn set_as_current_cls(&self)

    Sets the data image.

    +
    Safety
    +

    The data image must not be dropped until another data image replaces it.

    +
    source§

    impl LocalStorageDataImage<Tls>

    source

    pub unsafe fn set_as_current_tls(&self)

    Sets the data image.

    +
    Safety
    +

    The data image must not be dropped until another data image replaces it, or until +thread-local storage will never be accessed from the current thread again.

    +

    Trait Implementations§

    source§

    impl<T> Debug for LocalStorageDataImage<T>where + T: LocalStorage + Debug,

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for LocalStorageDataImage<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for LocalStorageDataImage<T>where + T: Send,

    §

    impl<T> Sync for LocalStorageDataImage<T>where + T: Sync,

    §

    impl<T> Unpin for LocalStorageDataImage<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for LocalStorageDataImage<T>where + T: UnwindSafe,

    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, 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.
    \ No newline at end of file diff --git a/doc/local_storage_initializer/struct.LocalStorageInitializer.html b/doc/local_storage_initializer/struct.LocalStorageInitializer.html new file mode 100644 index 0000000000..12e7b9275d --- /dev/null +++ b/doc/local_storage_initializer/struct.LocalStorageInitializer.html @@ -0,0 +1,88 @@ +LocalStorageInitializer in local_storage_initializer - Rust
    pub struct LocalStorageInitializer<T>where
    +    T: LocalStorage,{ /* private fields */ }
    Expand description

    A “factory” that creates local storage data images.

    +

    Implementations§

    source§

    impl<T> LocalStorageInitializer<T>where + T: LocalStorage,

    source

    pub const fn new() -> Self

    Creates an empty local storage initializer with no data sections.

    +
    source

    pub fn add_existing_static_section( + &mut self, + section: LoadedSection, + offset: usize, + total_static_size: usize +) -> Result<StrongSectionRef, LocalStorageInitializerError>

    Add a CLS/TLS section that has pre-determined offset, e.g., +one that was specified in the statically-linked base kernel image.

    +

    This function modifies the tls_section’s starting virtual address field +to hold the proper value such that this tls_section can be correctly used +as the source of a relocation calculation (e.g., when another section depends on it).

    +
      +
    • On x86_64, that value will be the negative offset from the end of +all the static TLS sections, i.e., where the TLS self pointer exists in memory, +to the start of this section in the TLS image. +
        +
      • VirtAddr = -1 * (total_static_tls_size - offset);
      • +
      +
    • +
    • On aarch64, that value will simply be the given offset. +
        +
      • VirtAddr = offset;.
      • +
      • However, on aarch64, the actual location of this section in the TLS data image +is given by offset + max(16, TLS_segment_align). +The ELF TLS ABI on aarch64 specifies that this augmented value is +the real offset used to access this TLS variable from the TLS base address +(from the beginning of all sections).
      • +
      +
    • +
    +
    Arguments
    +
      +
    • section: the section present in base kernel image.
    • +
    • offset: the offset of this section as determined by the linker. +This corresponds to the “value” of this section’s symbol in the ELF file.
    • +
    • total_static_size: the total size of all statically-known CLS/TLS sections, +including both TLS BSS (.tbss) and TLS data (.tdata) sections for TLS.
    • +
    +
    Return
    +
      +
    • A reference to the newly added and properly modified section, if successful.
    • +
    • An error if inserting the given tls_section at the given offset +would overlap with an existing section. +An error occurring here would indicate a link-time bug +or a bug in the symbol parsing code that invokes this function.
    • +
    +
    source

    pub fn add_new_dynamic_section( + &mut self, + section: LoadedSection, + alignment: usize +) -> Result<(usize, StrongSectionRef), LocalStorageInitializerError>

    Inserts the given section into this CLS/TLS area at the next index +(i.e., offset into the CLS/TLS area) where the section will fit.

    +

    This also modifies the virtual address field of the given section +to hold the proper value based on that offset, which is necessary +for calculating relocation entries that depend on this section.

    +

    Returns a tuple of:

    +
      +
    1. The index at which the new section was inserted, +which is the offset from the beginning of the CLS/TLS area where the section data starts.
    2. +
    3. The modified section as a StrongSectionRef.
    4. +
    +

    Returns an Error if there is no remaining space that can fit the section.

    +
    source

    pub fn invalidate(&mut self)

    Invalidates the cached data image in this LocalStorageInitializer area.

    +

    This is useful for when a CLS/TLS section’s data has been modified, +e.g., while performing relocations, +and thus the data image needs to be re-created by re-reading the section data.

    +
    source

    pub fn get_data(&mut self) -> LocalStorageDataImage<T>

    Returns a new copy of the data image.

    +

    This function lazily generates the image data on demand, if needed.

    +

    Trait Implementations§

    source§

    impl<T> Clone for LocalStorageInitializer<T>where + T: LocalStorage + Clone,

    source§

    fn clone(&self) -> LocalStorageInitializer<T>

    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<T> Debug for LocalStorageInitializer<T>where + T: LocalStorage + Debug,

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl<T> !RefUnwindSafe for LocalStorageInitializer<T>

    §

    impl<T> Send for LocalStorageInitializer<T>where + T: Send,

    §

    impl<T> Sync for LocalStorageInitializer<T>where + T: Sync,

    §

    impl<T> Unpin for LocalStorageInitializer<T>where + T: Unpin,

    §

    impl<T> !UnwindSafe for LocalStorageInitializer<T>

    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.
    \ No newline at end of file diff --git a/doc/local_storage_initializer/struct.Tls.html b/doc/local_storage_initializer/struct.Tls.html new file mode 100644 index 0000000000..0402cb5804 --- /dev/null +++ b/doc/local_storage_initializer/struct.Tls.html @@ -0,0 +1,11 @@ +Tls in local_storage_initializer - Rust
    #[non_exhaustive]
    pub struct Tls {}

    Trait Implementations§

    source§

    impl Debug for Tls

    source§

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

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

    impl LocalStorage for Tls

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Tls

    §

    impl Send for Tls

    §

    impl Sync for Tls

    §

    impl Unpin for Tls

    §

    impl UnwindSafe for Tls

    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, 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.
    \ No newline at end of file diff --git a/doc/local_storage_initializer/trait.LocalStorage.html b/doc/local_storage_initializer/trait.LocalStorage.html new file mode 100644 index 0000000000..1f768bb3b0 --- /dev/null +++ b/doc/local_storage_initializer/trait.LocalStorage.html @@ -0,0 +1 @@ +LocalStorage in local_storage_initializer - Rust
    pub trait LocalStorage: Sealed { }

    Implementors§

    \ No newline at end of file diff --git a/doc/local_storage_initializer/type.ClsDataImage.html b/doc/local_storage_initializer/type.ClsDataImage.html new file mode 100644 index 0000000000..332225d513 --- /dev/null +++ b/doc/local_storage_initializer/type.ClsDataImage.html @@ -0,0 +1 @@ +ClsDataImage in local_storage_initializer - Rust
    pub type ClsDataImage = LocalStorageDataImage<Cls>;
    \ No newline at end of file diff --git a/doc/local_storage_initializer/type.ClsInitializer.html b/doc/local_storage_initializer/type.ClsInitializer.html new file mode 100644 index 0000000000..776d972bc4 --- /dev/null +++ b/doc/local_storage_initializer/type.ClsInitializer.html @@ -0,0 +1 @@ +ClsInitializer in local_storage_initializer - Rust
    pub type ClsInitializer = LocalStorageInitializer<Cls>;
    \ No newline at end of file diff --git a/doc/local_storage_initializer/type.TlsDataImage.html b/doc/local_storage_initializer/type.TlsDataImage.html new file mode 100644 index 0000000000..685b152a80 --- /dev/null +++ b/doc/local_storage_initializer/type.TlsDataImage.html @@ -0,0 +1 @@ +TlsDataImage in local_storage_initializer - Rust
    pub type TlsDataImage = LocalStorageDataImage<Tls>;
    \ No newline at end of file diff --git a/doc/local_storage_initializer/type.TlsInitializer.html b/doc/local_storage_initializer/type.TlsInitializer.html new file mode 100644 index 0000000000..3aa3f4724d --- /dev/null +++ b/doc/local_storage_initializer/type.TlsInitializer.html @@ -0,0 +1 @@ +TlsInitializer in local_storage_initializer - Rust
    pub type TlsInitializer = LocalStorageInitializer<Tls>;
    \ No newline at end of file diff --git a/doc/memory_aarch64/fn.find_section_memory_bounds.html b/doc/memory_aarch64/fn.find_section_memory_bounds.html index cc5f388aa3..a1c7777abd 100644 --- a/doc/memory_aarch64/fn.find_section_memory_bounds.html +++ b/doc/memory_aarch64/fn.find_section_memory_bounds.html @@ -1,4 +1,4 @@ -find_section_memory_bounds in memory_aarch64 - Rust
    pub fn find_section_memory_bounds<F>(
    +find_section_memory_bounds in memory_aarch64 - Rust
    pub fn find_section_memory_bounds<F>(
         boot_info: &impl BootInformation,
         translate: F
     ) -> Result<(AggregatedSectionMemoryBounds, [Option<SectionMemoryBounds>; 32]), &'static str>where
    diff --git a/doc/memory_aarch64/index.html b/doc/memory_aarch64/index.html
    index f23fdd2e37..bef027aaf9 100644
    --- a/doc/memory_aarch64/index.html
    +++ b/doc/memory_aarch64/index.html
    @@ -1,4 +1,4 @@
    -memory_aarch64 - Rust

    Crate memory_aarch64

    source ·
    Expand description

    This crate implements the virtual memory subsystem interfaces for Theseus on aarch64. +memory_aarch64 - Rust

    Crate memory_aarch64

    source ·
    Expand description

    This crate implements the virtual memory subsystem interfaces for Theseus on aarch64. memory uses this crate to get the memory layout and do other arch-specific operations on aarch64.

    This is the top-level arch-specific memory crate. All arch-specific definitions for memory system are exported from this crate.

    diff --git a/doc/memory_x86_64/fn.find_section_memory_bounds.html b/doc/memory_x86_64/fn.find_section_memory_bounds.html index d225184936..6e15c67876 100644 --- a/doc/memory_x86_64/fn.find_section_memory_bounds.html +++ b/doc/memory_x86_64/fn.find_section_memory_bounds.html @@ -1,4 +1,4 @@ -find_section_memory_bounds in memory_x86_64 - Rust
    pub fn find_section_memory_bounds<F>(
    +find_section_memory_bounds in memory_x86_64 - Rust
    pub fn find_section_memory_bounds<F>(
         boot_info: &impl BootInformation,
         translate: F
     ) -> Result<(AggregatedSectionMemoryBounds, [Option<SectionMemoryBounds>; 32]), &'static str>where
    diff --git a/doc/memory_x86_64/fn.get_p4.html b/doc/memory_x86_64/fn.get_p4.html
    index e22d6f3870..0279343db6 100644
    --- a/doc/memory_x86_64/fn.get_p4.html
    +++ b/doc/memory_x86_64/fn.get_p4.html
    @@ -1,2 +1,2 @@
    -get_p4 in memory_x86_64 - Rust

    Function memory_x86_64::get_p4

    source ·
    pub fn get_p4() -> PhysicalAddress
    Expand description

    Returns the current top-level page table address.

    +get_p4 in memory_x86_64 - Rust

    Function memory_x86_64::get_p4

    source ·
    pub fn get_p4() -> PhysicalAddress
    Expand description

    Returns the current top-level page table address.

    \ No newline at end of file diff --git a/doc/memory_x86_64/fn.get_vga_mem_addr.html b/doc/memory_x86_64/fn.get_vga_mem_addr.html index fe7c5d942c..44c412b646 100644 --- a/doc/memory_x86_64/fn.get_vga_mem_addr.html +++ b/doc/memory_x86_64/fn.get_vga_mem_addr.html @@ -1,4 +1,4 @@ -get_vga_mem_addr in memory_x86_64 - Rust
    pub fn get_vga_mem_addr(
    +get_vga_mem_addr in memory_x86_64 - Rust
    pub fn get_vga_mem_addr(
         
     ) -> Result<(PhysicalAddress, usize, PteFlags), &'static str>
    Expand description

    Gets the physical memory occupied by vga.

    Returns (start_physical_address, size, PteFlags).

    diff --git a/doc/memory_x86_64/fn.tlb_flush_all.html b/doc/memory_x86_64/fn.tlb_flush_all.html index a40a8c195f..751cc85fc8 100644 --- a/doc/memory_x86_64/fn.tlb_flush_all.html +++ b/doc/memory_x86_64/fn.tlb_flush_all.html @@ -1,2 +1,2 @@ -tlb_flush_all in memory_x86_64 - Rust
    pub fn tlb_flush_all()
    Expand description

    Flushes the whole TLB.

    +tlb_flush_all in memory_x86_64 - Rust
    pub fn tlb_flush_all()
    Expand description

    Flushes the whole TLB.

    \ No newline at end of file diff --git a/doc/memory_x86_64/fn.tlb_flush_virt_addr.html b/doc/memory_x86_64/fn.tlb_flush_virt_addr.html index cab2dc0922..25c924a685 100644 --- a/doc/memory_x86_64/fn.tlb_flush_virt_addr.html +++ b/doc/memory_x86_64/fn.tlb_flush_virt_addr.html @@ -1,2 +1,2 @@ -tlb_flush_virt_addr in memory_x86_64 - Rust
    pub fn tlb_flush_virt_addr(vaddr: VirtualAddress)
    Expand description

    Flushes the specific virtual address in TLB.

    +tlb_flush_virt_addr in memory_x86_64 - Rust
    pub fn tlb_flush_virt_addr(vaddr: VirtualAddress)
    Expand description

    Flushes the specific virtual address in TLB.

    \ No newline at end of file diff --git a/doc/memory_x86_64/index.html b/doc/memory_x86_64/index.html index 82ae533afd..3c76df2da0 100644 --- a/doc/memory_x86_64/index.html +++ b/doc/memory_x86_64/index.html @@ -1,4 +1,4 @@ -memory_x86_64 - Rust

    Crate memory_x86_64

    source ·
    Expand description

    This crate implements the virtual memory subsystem interfaces for Theseus on x86_64.

    +memory_x86_64 - Rust

    Crate memory_x86_64

    source ·
    Expand description

    This crate implements the virtual memory subsystem interfaces for Theseus on x86_64.

    The memory crate uses this crate to obtain the multiboot2-provided memory layout of the base kernel image (nano_core), and to do other arch-specific operations on x86_64.

    Structs

    Traits

    Functions

    \ No newline at end of file diff --git a/doc/mod_mgmt/all.html b/doc/mod_mgmt/all.html index e9d236e82d..5ef8e3ed76 100644 --- a/doc/mod_mgmt/all.html +++ b/doc/mod_mgmt/all.html @@ -1 +1 @@ -List of all items in this crate
    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/doc/mod_mgmt/constant.EXTRA_FILES_DIRECTORY_NAME.html b/doc/mod_mgmt/constant.EXTRA_FILES_DIRECTORY_NAME.html index 98d2270404..b7faa76e74 100644 --- a/doc/mod_mgmt/constant.EXTRA_FILES_DIRECTORY_NAME.html +++ b/doc/mod_mgmt/constant.EXTRA_FILES_DIRECTORY_NAME.html @@ -1,2 +1,2 @@ -EXTRA_FILES_DIRECTORY_NAME in mod_mgmt - Rust
    pub const EXTRA_FILES_DIRECTORY_NAME: &str = "extra_files";
    Expand description

    The name of the directory that contains all other “extra_files” contents.

    +EXTRA_FILES_DIRECTORY_NAME in mod_mgmt - Rust
    pub const EXTRA_FILES_DIRECTORY_NAME: &str = "extra_files";
    Expand description

    The name of the directory that contains all other “extra_files” contents.

    \ No newline at end of file diff --git a/doc/mod_mgmt/constant.KERNEL_TEXT_ADDR_RANGE.html b/doc/mod_mgmt/constant.KERNEL_TEXT_ADDR_RANGE.html index 67a11eab18..66308d3ec5 100644 --- a/doc/mod_mgmt/constant.KERNEL_TEXT_ADDR_RANGE.html +++ b/doc/mod_mgmt/constant.KERNEL_TEXT_ADDR_RANGE.html @@ -1,4 +1,4 @@ -KERNEL_TEXT_ADDR_RANGE in mod_mgmt - Rust
    pub const KERNEL_TEXT_ADDR_RANGE: Option<PageRange>;
    Expand description

    The range of virtual addresses from which we allocate pages for executable .text sections.

    +KERNEL_TEXT_ADDR_RANGE in mod_mgmt - Rust
    pub const KERNEL_TEXT_ADDR_RANGE: Option<PageRange>;
    Expand description

    The range of virtual addresses from which we allocate pages for executable .text sections.

    This is mostly an architecture-specific design choice (hopefully a temporary one):

    • On aarch64, even with the large code model, we are not (yet) able to generate diff --git a/doc/mod_mgmt/constant.NAMESPACES_DIRECTORY_NAME.html b/doc/mod_mgmt/constant.NAMESPACES_DIRECTORY_NAME.html index b80f1a8ab9..3cb0de8799 100644 --- a/doc/mod_mgmt/constant.NAMESPACES_DIRECTORY_NAME.html +++ b/doc/mod_mgmt/constant.NAMESPACES_DIRECTORY_NAME.html @@ -1,2 +1,2 @@ -NAMESPACES_DIRECTORY_NAME in mod_mgmt - Rust
      pub const NAMESPACES_DIRECTORY_NAME: &str = "namespaces";
      Expand description

      The name of the directory that contains all of the CrateNamespace files.

      +NAMESPACES_DIRECTORY_NAME in mod_mgmt - Rust
      pub const NAMESPACES_DIRECTORY_NAME: &str = "namespaces";
      Expand description

      The name of the directory that contains all of the CrateNamespace files.

      \ No newline at end of file diff --git a/doc/mod_mgmt/enum.SectionType.html b/doc/mod_mgmt/enum.SectionType.html index 4b5d4d0aa9..31869d0f97 100644 --- a/doc/mod_mgmt/enum.SectionType.html +++ b/doc/mod_mgmt/enum.SectionType.html @@ -1,10 +1,11 @@ -SectionType in mod_mgmt - Rust
      pub enum SectionType {
      +SectionType in mod_mgmt - Rust
      pub enum SectionType {
           Text,
           Rodata,
           Data,
           Bss,
           TlsData,
           TlsBss,
      +    Cls,
           GccExceptTable,
           EhFrame,
       }
      Expand description

      The possible types of sections that can be loaded from a crate object file.

      @@ -16,6 +17,8 @@ for a thread-local storage (TLS) area.

      §

      TlsBss

      A .tbss section is a read-only section that holds all-zero data for a thread-local storage (TLS) area. This is is effectively an empty placeholder: the all-zero data section doesn’t actually exist in memory.

      +
      §

      Cls

      A .cls section is a read-only section that holds the initial data “image” for a CPU-local +(CLS) area.

      §

      GccExceptTable

      A .gcc_except_table section contains landing pads for exception handling, comprising the LSDA (Language Specific Data Area), which is effectively used to determine when we should stop the stack unwinding process diff --git a/doc/mod_mgmt/fn.find_symbol_table.html b/doc/mod_mgmt/fn.find_symbol_table.html index 48ae294389..a3c19adde6 100644 --- a/doc/mod_mgmt/fn.find_symbol_table.html +++ b/doc/mod_mgmt/fn.find_symbol_table.html @@ -1,4 +1,4 @@ -find_symbol_table in mod_mgmt - Rust

      pub fn find_symbol_table<'e>(
      +find_symbol_table in mod_mgmt - Rust
      pub fn find_symbol_table<'e>(
           elf_file: &'e ElfFile<'_>
       ) -> Result<&'e [Entry64], &'static str>
      Expand description

      Returns a reference to the symbol table in the given ElfFile.

      \ No newline at end of file diff --git a/doc/mod_mgmt/fn.get_initial_kernel_namespace.html b/doc/mod_mgmt/fn.get_initial_kernel_namespace.html index e6d9187199..67c55358a3 100644 --- a/doc/mod_mgmt/fn.get_initial_kernel_namespace.html +++ b/doc/mod_mgmt/fn.get_initial_kernel_namespace.html @@ -1,4 +1,4 @@ -get_initial_kernel_namespace in mod_mgmt - Rust
      pub fn get_initial_kernel_namespace() -> Option<&'static Arc<CrateNamespace>>
      Expand description

      Returns a reference to the default kernel namespace, +get_initial_kernel_namespace in mod_mgmt - Rust

      pub fn get_initial_kernel_namespace() -> Option<&'static Arc<CrateNamespace>>
      Expand description

      Returns a reference to the default kernel namespace, which must exist because it contains the initially-loaded kernel crates. Returns None if the default namespace hasn’t yet been initialized.

      \ No newline at end of file diff --git a/doc/mod_mgmt/fn.get_namespaces_directory.html b/doc/mod_mgmt/fn.get_namespaces_directory.html index 5c81f75bcf..3cc0888c98 100644 --- a/doc/mod_mgmt/fn.get_namespaces_directory.html +++ b/doc/mod_mgmt/fn.get_namespaces_directory.html @@ -1,2 +1,2 @@ -get_namespaces_directory in mod_mgmt - Rust
      pub fn get_namespaces_directory() -> Option<DirRef>
      Expand description

      Returns the top-level directory that contains all of the namespaces.

      +get_namespaces_directory in mod_mgmt - Rust
      pub fn get_namespaces_directory() -> Option<DirRef>
      Expand description

      Returns the top-level directory that contains all of the namespaces.

      \ No newline at end of file diff --git a/doc/mod_mgmt/index.html b/doc/mod_mgmt/index.html index 066ade5aeb..c0afad3ffb 100644 --- a/doc/mod_mgmt/index.html +++ b/doc/mod_mgmt/index.html @@ -1,4 +1,4 @@ -mod_mgmt - Rust

      Crate mod_mgmt

      source ·

      Modules

      • Routines for parsing the nano_core, the fully-linked, already-loaded base kernel image, +mod_mgmt - Rust

        Crate mod_mgmt

        source ·

        Modules

        • Routines for parsing the nano_core, the fully-linked, already-loaded base kernel image, in other words, the code that is currently executing. As such, it performs no loading, but rather just creates metadata that represents the existing kernel code that was loaded by the bootloader, and adds those functions to the system map.
        • Routines for replacing the crates that comprise the nano_core, @@ -15,8 +15,7 @@ based on the location of the source section is written somwhere in the target section.
        • A wrapper around an Arc<str>: an immutable shared reference to a string slice.
        • A representation that the owner A of (a LoadedSection object containing) this struct depends on the given section B in this struct. The dependent section A is not specifically included here; -since it’s the owner of this struct, it’s implicit that it’s the dependent one.
        • An initialized TLS area data image ready to be used by a new task.
        • A “factory” that creates Thread-Local Storage (TLS) data images, -which are used to initialize a new Task’s TLS area.
        • A representation that the section A in this struct +since it’s the owner of this struct, it’s implicit that it’s the dependent one.
        • A representation that the section A in this struct depends on the owner B of (the LoadedSection object containing) this struct. The target dependency B is not specifically included here; it’s implicitly the owner of this struct.

        Enums

        \ No newline at end of file +This is used for relocations, and for looking up function names.
      • A Weak reference to a LoadedCrate.
      • A Weak reference (Weak) to a LoadedSection.
      \ No newline at end of file diff --git a/doc/mod_mgmt/parse_nano_core/index.html b/doc/mod_mgmt/parse_nano_core/index.html index da0753fd0f..d9d43cfb0d 100644 --- a/doc/mod_mgmt/parse_nano_core/index.html +++ b/doc/mod_mgmt/parse_nano_core/index.html @@ -1,4 +1,4 @@ -mod_mgmt::parse_nano_core - Rust
      Expand description

      Routines for parsing the nano_core, the fully-linked, already-loaded base kernel image, +mod_mgmt::parse_nano_core - Rust

      Expand description

      Routines for parsing the nano_core, the fully-linked, already-loaded base kernel image, in other words, the code that is currently executing. As such, it performs no loading, but rather just creates metadata that represents the existing kernel code that was loaded by the bootloader, and adds those functions to the system map.

      diff --git a/doc/mod_mgmt/sidebar-items.js b/doc/mod_mgmt/sidebar-items.js index d2383da0de..5e32406b91 100644 --- a/doc/mod_mgmt/sidebar-items.js +++ b/doc/mod_mgmt/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":["BSS_SECTION_NAME","CRATE_HASH_DELIMITER","DATA_BSS_SECTION_FLAGS","DATA_SECTION_NAME","EH_FRAME_SECTION_NAME","EXTRA_FILES_DIRECTORY_NAME","GCC_EXCEPT_TABLE_SECTION_NAME","KERNEL_TEXT_ADDR_RANGE","MODULE_PREFIX_DELIMITER","NAMESPACES_DIRECTORY_NAME","RODATA_SECTION_FLAGS","RODATA_SECTION_NAME","SECTION_HASH_DELIMITER","TEXT_SECTION_FLAGS","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME"],"enum":["CrateType","IntoCrateObjectFile","SectionType"],"fn":["crate_name_from_path","create_application_namespace","find_symbol_table","get_containing_crate_name","get_containing_crate_name_ranges","get_initial_kernel_namespace","get_namespaces_directory","init","is_valid_crate_name_char","replace_containing_crate_name","section_name_str_ref","write_relocation"],"mod":["parse_nano_core","replace_nano_core_crates"],"struct":["AppCrateRef","CrateNamespace","LoadedCrate","LoadedSection","LoadedSectionInner","NamespaceDir","RelocationEntry","StrRef","StrongDependency","TlsDataImage","TlsInitializer","WeakDependent"],"type":["Shndx","StrongCrateRef","StrongSectionRef","SymbolMap","WeakCrateRef","WeakSectionRef"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["BSS_SECTION_NAME","CRATE_HASH_DELIMITER","DATA_BSS_SECTION_FLAGS","DATA_SECTION_NAME","EH_FRAME_SECTION_NAME","EXTRA_FILES_DIRECTORY_NAME","GCC_EXCEPT_TABLE_SECTION_NAME","KERNEL_TEXT_ADDR_RANGE","MODULE_PREFIX_DELIMITER","NAMESPACES_DIRECTORY_NAME","RODATA_SECTION_FLAGS","RODATA_SECTION_NAME","SECTION_HASH_DELIMITER","TEXT_SECTION_FLAGS","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME"],"enum":["CrateType","IntoCrateObjectFile","SectionType"],"fn":["crate_name_from_path","create_application_namespace","find_symbol_table","get_containing_crate_name","get_containing_crate_name_ranges","get_initial_kernel_namespace","get_namespaces_directory","init","is_valid_crate_name_char","replace_containing_crate_name","section_name_str_ref","write_relocation"],"mod":["parse_nano_core","replace_nano_core_crates"],"struct":["AppCrateRef","CrateNamespace","LoadedCrate","LoadedSection","LoadedSectionInner","NamespaceDir","RelocationEntry","StrRef","StrongDependency","WeakDependent"],"type":["Shndx","StrongCrateRef","StrongSectionRef","SymbolMap","TlsDataImage","TlsInitializer","WeakCrateRef","WeakSectionRef"]}; \ No newline at end of file diff --git a/doc/mod_mgmt/struct.CrateNamespace.html b/doc/mod_mgmt/struct.CrateNamespace.html index 4d24e25a64..5994a6288d 100644 --- a/doc/mod_mgmt/struct.CrateNamespace.html +++ b/doc/mod_mgmt/struct.CrateNamespace.html @@ -10,7 +10,7 @@ For example, a namespace that holds just application crates and symbols can recursively rely upon (link against) the crates and symbols in a lower-level namespace that contains kernel crates and symbols.

      -

      Implementations§

      source§

      impl CrateNamespace

      source

      pub fn new( +

      Implementations§

      source§

      impl CrateNamespace

      source

      pub fn new( name: String, dir: NamespaceDir, recursive_namespace: Option<Arc<CrateNamespace>> @@ -26,7 +26,7 @@

      Arguments
      source

      pub fn dir(&self) -> &NamespaceDir

      Returns the directory that this CrateNamespace is based on.

      source

      pub fn recursive_namespace(&self) -> Option<&Arc<CrateNamespace>>

      Returns the recursive namespace that this CrateNamespace is built atop, if one exists.

      -
      source

      pub fn get_tls_initializer_data(&self) -> TlsDataImage

      Returns a new copy of this namespace’s initial TLS area, +

      source

      pub fn get_tls_initializer_data(&self) -> TlsDataImage

      Returns a new copy of this namespace’s initial TLS area, which can be used as the initial TLS area data image for a new task.

      source

      pub fn crate_names(&self, recursive: bool) -> Vec<StrRef>

      Returns a list of all of the crate names currently loaded into this CrateNamespace, including all crates in any recursive namespaces as well if recursive is true. @@ -202,11 +202,11 @@

      Example
      and rewrites their relocation entries to point to the given new_section. This effectively replaces the usage of the old_section with the new_section, but does not make any modifications to symbol maps.

      -
      source

      pub fn add_symbols<'a, I>(&self, sections: I, _log_replacements: bool) -> usizewhere +

      source

      pub fn add_symbols<'a, I>(&self, sections: I, _log_replacements: bool) -> usizewhere I: IntoIterator<Item = &'a StrongSectionRef>,

      Adds only global symbols in the given sections iterator to this namespace’s symbol map,

      If a symbol already exists in the symbol map, this replaces the existing symbol but does not count it as a newly-added one.

      Returns the number of new unique symbols added.

      -
      source

      pub fn get_crate_containing_address( +

      source

      pub fn get_crate_containing_address( &self, virt_addr: VirtualAddress, search_all_section_types: bool @@ -226,7 +226,7 @@

      Locking
      Note

      This is a slow procedure because, in the worst case, it will iterate through every loaded crate in this namespace (and its recursive namespace).

      -
      source

      pub fn get_section_containing_address( +

      source

      pub fn get_section_containing_address( &self, virt_addr: VirtualAddress, search_all_section_types: bool @@ -247,13 +247,13 @@

      Note
      it will iterate through every section in every loaded crate in this namespace (and its recursive namespace), not just the publicly-visible (global) sections.

      -
      source

      pub fn get_symbol_and_namespace( +

    source

    pub fn get_symbol_and_namespace( &self, demangled_full_symbol: &str ) -> Option<(WeakSectionRef, &CrateNamespace)>

    Like get_symbol(), but also returns the exact CrateNamespace where the symbol was found.

    -
    source

    pub fn get_symbol(&self, demangled_full_symbol: &str) -> WeakSectionRef

    Finds the corresponding LoadedSection reference for the given fully-qualified symbol string. +

    source

    pub fn get_symbol(&self, demangled_full_symbol: &str) -> WeakSectionRef

    Finds the corresponding LoadedSection reference for the given fully-qualified symbol string. Searches this namespace first, and then its recursive namespace as well.

    -
    source

    pub fn get_symbol_or_load( +

    source

    pub fn get_symbol_or_load( &self, demangled_full_symbol: &str, temp_backup_namespace: Option<&CrateNamespace>, @@ -282,7 +282,7 @@

    Arguments
    If temp_backup_namespace is None, then only this namespace (and its recursive namespaces) will be searched.
  • kernel_mmi_ref: a reference to the kernel’s MemoryManagementInfo, which must not be locked.
  • -
    source

    pub fn find_symbols_starting_with( +

    source

    pub fn find_symbols_starting_with( &self, symbol_prefix: &str ) -> Vec<(String, WeakSectionRef)>

    Returns a copied list of the corresponding LoadedSections @@ -295,12 +295,12 @@

    Example
    my_crate::foo::h933a635894ce0f12. Calling find_symbols_starting_with("my_crate::foo") will return a vector containing both sections, which can then be iterated through.

    -
    source

    pub fn find_symbols_starting_with_and_namespace( +

    source

    pub fn find_symbols_starting_with_and_namespace( &self, symbol_prefix: &str ) -> Vec<(String, WeakSectionRef, &CrateNamespace)>

    Similar to find_symbols_starting_with, but also includes a reference to the exact CrateNamespace where the matching symbol was found.

    -
    source

    pub fn get_symbol_starting_with(&self, symbol_prefix: &str) -> WeakSectionRef

    Returns a weak reference to the LoadedSection whose name beings with the given symbol_prefix, +

    source

    pub fn get_symbol_starting_with(&self, symbol_prefix: &str) -> WeakSectionRef

    Returns a weak reference to the LoadedSection whose name beings with the given symbol_prefix, if and only if the symbol map only contains a single possible matching symbol. This will also search the recursive namespace’s symbol map.

    Important Usage Note
    @@ -325,9 +325,9 @@
    Example
    To match only foo, call this function as get_symbol_starting_with("my_crate::foo::") (note the trailing “::”). -
    source

    pub fn dump_symbol_map(&self) -> String

    Simple debugging function that returns the entire symbol map as a String. +

    source

    pub fn dump_symbol_map(&self) -> String

    Simple debugging function that returns the entire symbol map as a String. This includes only symbols from this namespace, and excludes symbols from recursive namespaces.

    -
    source

    pub fn dump_symbol_map_recursive(&self) -> String

    source

    pub fn dump_symbol_map_recursive(&self) -> String

    Same as dump_symbol_map(), but includes symbols from recursive namespaces.

    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 diff --git a/doc/mod_mgmt/struct.LoadedCrate.html b/doc/mod_mgmt/struct.LoadedCrate.html index 906f10a96a..8df8dfd756 100644 --- a/doc/mod_mgmt/struct.LoadedCrate.html +++ b/doc/mod_mgmt/struct.LoadedCrate.html @@ -1,4 +1,4 @@ -LoadedCrate in mod_mgmt - Rust

    Struct mod_mgmt::LoadedCrate

    pub struct LoadedCrate {
    +LoadedCrate in mod_mgmt - Rust

    Struct mod_mgmt::LoadedCrate

    pub struct LoadedCrate {
         pub crate_name: StrRef,
         pub object_file: Arc<Mutex<dyn File + Send, Spin>>,
         pub debug_symbols_file: Weak<Mutex<dyn File + Send, Spin>>,
    @@ -8,6 +8,7 @@
         pub data_pages: Option<(Arc<Mutex<MappedPages, Spin>>, Range<VirtualAddress>)>,
         pub global_sections: BTreeSet<usize, Global>,
         pub tls_sections: BTreeSet<usize, Global>,
    +    pub cls_sections: BTreeSet<usize, Global>,
         pub data_sections: BTreeSet<usize, Global>,
         pub reexported_symbols: BTreeSet<StrRef, Global>,
     }
    Expand description

    Represents a single crate whose object file has been @@ -54,6 +55,7 @@

    §tls_sections: BTreeSet<usize, Global>

    The set of thread-local storage (TLS) symbols in this crate. The Shndx values in this set are the section index (shndx) numbers, which can be used as the key to look up the actual LoadedSection in the sections list above.

    +
    §cls_sections: BTreeSet<usize, Global>

    The set of CPU-local storage (CLS) symbols in this crate.

    §data_sections: BTreeSet<usize, Global>

    The set of .data and .bss sections in this crate. The Shndx values in this set are the section index (shndx) numbers, which can be used as the key to look up the actual LoadedSection in the sections list above.

    diff --git a/doc/mod_mgmt/struct.TlsDataImage.html b/doc/mod_mgmt/struct.TlsDataImage.html deleted file mode 100644 index e627fdd250..0000000000 --- a/doc/mod_mgmt/struct.TlsDataImage.html +++ /dev/null @@ -1,26 +0,0 @@ -TlsDataImage in mod_mgmt - Rust

    Struct mod_mgmt::TlsDataImage

    pub struct TlsDataImage { /* private fields */ }
    Expand description

    An initialized TLS area data image ready to be used by a new task.

    -

    The data is opaque, but one can obtain a pointer to the TLS area.

    -

    The enclosed opaque data is stored as a boxed slice (Box<[u8]>) -instead of a vector (Vec<u8>) because it is instantiated once upon task creation -and should never be expanded or shrunk.

    -

    The data is “immutable” with respect to Theseus task management functions -at the language level. -However, the data within this TLS area will be modified directly by code -that executes “in” this task, e.g., instructions that access the current TLS area.

    -

    Implementations§

    §

    impl TlsDataImage

    pub const fn empty() -> TlsDataImage

    Creates an empty TLS data image with no TLS section content.

    -

    pub fn set_as_current_tls_base(&self)

    Sets the current CPU’s TLS register to point to this TLS data image.

    -
      -
    • On x86_64, this writes to the FsBase MSR.
    • -
    • On ARMv8, this writes to TPIDR_EL0.
    • -
    -

    Trait Implementations§

    §

    impl Debug for TlsDataImage

    §

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

    Formats the value using the given formatter. Read more

    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, 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.
    \ No newline at end of file diff --git a/doc/mod_mgmt/struct.TlsInitializer.html b/doc/mod_mgmt/struct.TlsInitializer.html deleted file mode 100644 index 10d362f965..0000000000 --- a/doc/mod_mgmt/struct.TlsInitializer.html +++ /dev/null @@ -1,82 +0,0 @@ -TlsInitializer in mod_mgmt - Rust
    pub struct TlsInitializer { /* private fields */ }
    Expand description

    A “factory” that creates Thread-Local Storage (TLS) data images, -which are used to initialize a new Task’s TLS area.

    -

    Implementations§

    §

    impl TlsInitializer

    pub const fn empty() -> TlsInitializer

    Creates an empty TLS initializer with no TLS data sections.

    -

    pub fn add_existing_static_tls_section( - &mut self, - tls_section: LoadedSection, - offset: usize, - total_static_tls_size: usize -) -> Result<Arc<LoadedSection>, TlsInitializerError>

    Add a TLS section that has pre-determined offset, e.g., -one that was specified in the statically-linked base kernel image.

    -

    This function modifies the tls_section’s starting virtual address field -to hold the proper value such that this tls_section can be correctly used -as the source of a relocation calculation (e.g., when another section depends on it).

    -
      -
    • On x86_64, that value will be the negative offset from the end of -all the static TLS sections, i.e., where the TLS self pointer exists in memory, -to the start of this section in the TLS image. -
        -
      • VirtAddr = -1 * (total_static_tls_size - offset);
      • -
      -
    • -
    • On aarch64, that value will simply be the given offset. -
        -
      • VirtAddr = offset;.
      • -
      • However, on aarch64, the actual location of this section in the TLS data image -is given by offset + max(16, TLS_segment_align). -The ELF TLS ABI on aarch64 specifies that this augmented value is -the real offset used to access this TLS variable from the TLS base address -(from the beginning of all sections).
      • -
      -
    • -
    -
    Arguments
    -
      -
    • tls_section: the TLS section present in base kernel image.
    • -
    • offset: the offset of this section as determined by the linker. -This corresponds to the “value” of this section’s symbol in the ELF file.
    • -
    • total_static_tls_size: the total size of all statically-known TLS sections, -including both TLS BSS (.tbss) and TLS data (.tdata) sections.
    • -
    -
    Return
    -
      -
    • A reference to the newly added and properly modified section, if successful.
    • -
    • An error if inserting the given tls_section at the given offset -would overlap with an existing section. -An error occurring here would indicate a link-time bug -or a bug in the symbol parsing code that invokes this function.
    • -
    -

    pub fn add_new_dynamic_tls_section( - &mut self, - section: LoadedSection, - alignment: usize -) -> Result<(usize, Arc<LoadedSection>), TlsInitializerError>

    Inserts the given section into this TLS area at the next index -(i.e., offset into the TLS area) where the section will fit.

    -

    This also modifies the virtual address field of the given section -to hold the proper value based on that offset, which is necessary -for calculating relocation entries that depend on this section.

    -

    Returns a tuple of:

    -
      -
    1. The index at which the new section was inserted, -which is the offset from the beginning of the TLS area where the section data starts.
    2. -
    3. The modified section as a StrongSectionRef.
    4. -
    -

    Returns an Error if there is no remaining space that can fit the section.

    -

    pub fn invalidate(&mut self)

    Invalidates the cached data image in this TlsInitializer area.

    -

    This is useful for when a TLS section’s data has been modified, -e.g., while performing relocations, -and thus the data image needs to be re-created by re-reading the section data.

    -

    pub fn get_data(&mut self) -> TlsDataImage

    Returns a new copy of the TLS data image.

    -

    This function lazily generates the TLS image data on demand, if needed.

    -

    Trait Implementations§

    §

    impl Clone for TlsInitializer

    §

    fn clone(&self) -> TlsInitializer

    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
    §

    impl Debug for TlsInitializer

    §

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

    Formats the value using the given formatter. Read more

    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.
    \ No newline at end of file diff --git a/doc/mod_mgmt/type.TlsDataImage.html b/doc/mod_mgmt/type.TlsDataImage.html new file mode 100644 index 0000000000..212a0b033b --- /dev/null +++ b/doc/mod_mgmt/type.TlsDataImage.html @@ -0,0 +1 @@ +TlsDataImage in mod_mgmt - Rust

    Type Definition mod_mgmt::TlsDataImage

    pub type TlsDataImage = LocalStorageDataImage<Tls>;
    \ No newline at end of file diff --git a/doc/mod_mgmt/type.TlsInitializer.html b/doc/mod_mgmt/type.TlsInitializer.html new file mode 100644 index 0000000000..e7353699bf --- /dev/null +++ b/doc/mod_mgmt/type.TlsInitializer.html @@ -0,0 +1 @@ +TlsInitializer in mod_mgmt - Rust

    Type Definition mod_mgmt::TlsInitializer

    pub type TlsInitializer = LocalStorageInitializer<Tls>;
    \ No newline at end of file diff --git a/doc/pci/struct.PciLocation.html b/doc/pci/struct.PciLocation.html index 091fdf94c0..7e0e8703b5 100644 --- a/doc/pci/struct.PciLocation.html +++ b/doc/pci/struct.PciLocation.html @@ -2,7 +2,7 @@ This offers methods for reading and writing the PCI config space.

    Implementations§

    source§

    impl PciLocation

    source

    pub fn bus(&self) -> u8

    source

    pub fn slot(&self) -> u8

    source

    pub fn function(&self) -> u8

    source

    pub fn pci_set_command_bus_master_bit(&self)

    Sets the PCI device’s bit 3 in the command portion, which is apparently needed to activate DMA (??)

    source

    pub fn pci_set_interrupt_disable_bit(&self)

    Sets the PCI device’s command bit 10 to disable legacy interrupts

    -

    Trait Implementations§

    source§

    impl Clone for PciLocation

    source§

    fn clone(&self) -> PciLocation

    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 PciLocation

    source§

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

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

    impl Display for PciLocation

    source§

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

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

    impl Hash for PciLocation

    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 +

    Trait Implementations§

    source§

    impl Clone for PciLocation

    source§

    fn clone(&self) -> PciLocation

    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 PciLocation

    source§

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

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

    impl Display for PciLocation

    source§

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

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

    impl Hash for PciLocation

    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 PartialEq<PciLocation> for PciLocation

    source§

    fn eq(&self, other: &PciLocation) -> 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 diff --git a/doc/per_cpu/all.html b/doc/per_cpu/all.html deleted file mode 100644 index bdf42fcfcf..0000000000 --- a/doc/per_cpu/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate

    List of all items

    Structs

    Functions

    \ No newline at end of file diff --git a/doc/per_cpu/fn.init.html b/doc/per_cpu/fn.init.html deleted file mode 100644 index a76ea498e7..0000000000 --- a/doc/per_cpu/fn.init.html +++ /dev/null @@ -1,4 +0,0 @@ -init in per_cpu - Rust

    Function per_cpu::init

    source ·
    pub fn init(cpu_id: CpuId) -> Result<(), &'static str>
    Expand description

    Initializes the current CPU’s PerCpuData.

    -

    This must be invoked from (run on) the actual CPU with the given cpu_id; -the main bootstrap CPU cannot run this for all CPUs itself.

    -
    \ No newline at end of file diff --git a/doc/per_cpu/index.html b/doc/per_cpu/index.html deleted file mode 100644 index 9de53fcb61..0000000000 --- a/doc/per_cpu/index.html +++ /dev/null @@ -1,37 +0,0 @@ -per_cpu - Rust

    Crate per_cpu

    source ·
    Expand description

    Contains PerCpuData, the data stored on a per-CPU basis in Theseus.

    -

    Each CPU has its own instance of PerCpuData, and each CPU’s instance -can only be accessed by itself.

    -

    This per_cpu crate vs. the cpu_local crate

    -

    These two crates exist to solve a circular dependency problem: -the crate that defines the per-CPU data structure (this per_cpu crate) -must depend on all the foreign crates that define the types used for -each field in the per-CPU data structure. -However, those foreign crates also want to access these per-CPU states, -which would require depending on this per_cpu crate. -This would create a cyclic dependency, so we break it into two crates.

    -
      -
    1. -

      This crate per_cpu directly depends on many other kernel crates, -specifically the ones that define the types needed for each field of PerCpuData.

      -
        -
      • If you want to add another piece of per-CPU data, you can do that here -by modifying the PerCpuData struct, and then updating the const definitions -of offsets and other metadata in cpu_local::FixedCpuLocal.
      • -
      • To actually access per-CPU data, do not use this crate, -use cpu_local::CpuLocal instead.
      • -
      -
    2. -
    3. -

      The cpu_local crate is the “top-level” crate that is depended upon -by each of the crates that needs to access per-CPU data.

      -
        -
      • cpu_local is a mostly standalone crate that does not depend -on any of the specific types from other Theseus crates, -which allows other Theseus crates to depend upon it.
      • -
      • cpu_local effectively decouples the definitions
      • -
      • This per_cpu crate also depends on cpu_local in order to initialize itself -for each CPU right after that CPU has booted.
      • -
      -
    4. -
    -

    Structs

    • An immutable type wrapper for this CPU’s unique ID, kept in CPU-local storage.
    • The data stored on a per-CPU basis in Theseus.

    Functions

    • Initializes the current CPU’s PerCpuData.
    \ No newline at end of file diff --git a/doc/per_cpu/sidebar-items.js b/doc/per_cpu/sidebar-items.js deleted file mode 100644 index 15b45a5d25..0000000000 --- a/doc/per_cpu/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["init"],"struct":["CpuLocalCpuId","PerCpuData"]}; \ No newline at end of file diff --git a/doc/per_cpu/struct.CpuLocalCpuId.html b/doc/per_cpu/struct.CpuLocalCpuId.html deleted file mode 100644 index 83d23d9393..0000000000 --- a/doc/per_cpu/struct.CpuLocalCpuId.html +++ /dev/null @@ -1,14 +0,0 @@ -CpuLocalCpuId in per_cpu - Rust

    Struct per_cpu::CpuLocalCpuId

    source ·
    pub struct CpuLocalCpuId(_);
    Expand description

    An immutable type wrapper for this CPU’s unique ID, kept in CPU-local storage.

    -

    Derefs into a [CpuId].

    -

    Methods from Deref<Target = CpuId>§

    pub fn value(&self) -> u32

    Returns the inner raw value of this CpuId.

    -

    Trait Implementations§

    source§

    impl CpuLocalField for CpuLocalCpuId

    source§

    const FIELD: PerCpuField = PerCpuField::CpuId

    source§

    impl Deref for CpuLocalCpuId

    §

    type Target = CpuId

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.

    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, 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.
    \ No newline at end of file diff --git a/doc/per_cpu/struct.PerCpuData.html b/doc/per_cpu/struct.PerCpuData.html deleted file mode 100644 index 1171b91600..0000000000 --- a/doc/per_cpu/struct.PerCpuData.html +++ /dev/null @@ -1,22 +0,0 @@ -PerCpuData in per_cpu - Rust

    Struct per_cpu::PerCpuData

    source ·
    #[repr(C)]
    pub struct PerCpuData { /* private fields */ }
    Expand description

    The data stored on a per-CPU basis in Theseus.

    -

    Currently, we do not support additional arbitrary per-CPU states, e.g., -dynamically adding or removing states, or defining per-CPU states -outside this struct.

    -

    This struct is not directly accessible; per-CPU states are accessible -by other crates using the functions in the [cpu_local] crate.

    -

    Required traits

    -

    Each field in this struct must implement [cpu_local::PerCpuField], -which in turn mandates that each field have a unique type distinct from the type -of every other field. -Currently we achieve this with newtype wrappers

    -

    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, 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.
    \ No newline at end of file diff --git a/doc/preemption/fn.preemption_enabled.html b/doc/preemption/fn.preemption_enabled.html index 1a8532a8b3..d03e4a4888 100644 --- a/doc/preemption/fn.preemption_enabled.html +++ b/doc/preemption/fn.preemption_enabled.html @@ -1,4 +1,4 @@ -preemption_enabled in preemption - Rust
    pub fn preemption_enabled() -> bool
    Expand description

    Returns true if preemption is currently enabled on this CPU.

    +preemption_enabled in preemption - Rust
    pub fn preemption_enabled() -> bool
    Expand description

    Returns true if preemption is currently enabled on this CPU.

    Note that unless preemption or interrupts are disabled, this value can’t be used as a lock indicator or property. It is just a snapshot that offers no guarantee that preemption will continue to be enabled or disabled immediately after returning.

    diff --git a/doc/preemption/index.html b/doc/preemption/index.html index ea96859347..bc94929494 100644 --- a/doc/preemption/index.html +++ b/doc/preemption/index.html @@ -1,4 +1,4 @@ -preemption - Rust

    Crate preemption

    source ·
    Expand description

    Manages preemption on a per-CPU basis.

    +preemption - Rust

    Crate preemption

    source ·
    Expand description

    Manages preemption on a per-CPU basis.

    Supports enabling and disabling preemption for the purpose of safe task state management, e.g., through preemption-safe locks.

    Structs

    • A guard type that ensures preemption is disabled as long as it is held.

    Functions

    • Prevents preemption (preemptive task switching) from occurring diff --git a/doc/preemption/struct.PreemptionGuard.html b/doc/preemption/struct.PreemptionGuard.html index cc7f054964..145239ab25 100644 --- a/doc/preemption/struct.PreemptionGuard.html +++ b/doc/preemption/struct.PreemptionGuard.html @@ -1,4 +1,4 @@ -PreemptionGuard in preemption - Rust
      pub struct PreemptionGuard { /* private fields */ }
      Expand description

      A guard type that ensures preemption is disabled as long as it is held.

      +PreemptionGuard in preemption - Rust
      pub struct PreemptionGuard { /* private fields */ }
      Expand description

      A guard type that ensures preemption is disabled as long as it is held.

      Call hold_preemption() to obtain a PreemptionGuard.

      Preemption may be re-enabled when this guard is dropped, but not necessarily so, because other previous functions @@ -7,7 +7,7 @@ to move it across a “thread” boundary (into a different task). More specifically, it is invalid to move a PreemptionGuard across CPUs; this error condition is checked for when dropping it.

      -

      Implementations§

      source§

      impl PreemptionGuard

      source

      pub fn preemption_was_enabled(&self) -> bool

      Returns whether preemption was originally enabled when this guard was created.

      +

      Implementations§

      source§

      impl PreemptionGuard

      source

      pub fn preemption_was_enabled(&self) -> bool

      Returns whether preemption was originally enabled when this guard was created.

      Return
      • true: indicates that the caller function/task holding this guard @@ -17,8 +17,8 @@
        Return
        and that no transition occurred when the caller function/task obtained this guard.
      -
      source

      pub fn cpu_id(&self) -> CpuId

      Returns the ID of the CPU on which this guard was created.

      -

      Trait Implementations§

      source§

      impl Drop for PreemptionGuard

      source§

      fn drop(&mut self)

      Executes the destructor for this type. Read more
      source§

      impl !Send for PreemptionGuard

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +

      source

      pub fn cpu_id(&self) -> CpuId

      Returns the ID of the CPU on which this guard was created.

      +

      Trait Implementations§

      source§

      impl Debug for PreemptionGuard

      source§

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

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

      impl Drop for PreemptionGuard

      source§

      fn drop(&mut self)

      Executes the destructor for this type. Read more
      source§

      impl !Send for PreemptionGuard

      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.

      diff --git a/doc/search-index.js b/doc/search-index.js index 47803b4af2..9e480dbbcc 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -17,7 +17,8 @@ var searchIndex = JSON.parse('{\ "captain":{"doc":"The main initialization routine and setup logic of the OS. ","t":"DDMMMLLLLLLLLLLMFLLLLLLLLLLLLLLLL","n":["DropAfterInit","MulticoreBringupInfo","ap_gdt","ap_start_realmode_begin","ap_start_realmode_end","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","from","from","identity_mappings","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip"],"q":[[0,"captain"]],"d":["Items that must be held until the end of init() and should …","Information needed to bring up APs (secondary CPUs) on …","The address of the GDT set up for each AP (secondary CPU)","The starting virtual addresses of the ap_start realmode …","The ending virtual addresses (exclusive) of the ap_start …","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Initialize the Captain, which is the main crate that “…","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","",""],"i":[0,0,6,6,6,5,6,5,6,5,6,5,6,5,6,5,0,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6],"f":[0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],0,[[2,[4,[3]],5,6,[8,[7]]],[[10,[9]]]],[[]],[[]],[[[12,[11]]],[[12,[1,11]]]],[[[12,[11]]],[[12,[1,11]]]],[13,[[13,[1]]]],[13,[[13,[1]]]],[14,[[14,[1]]]],[14,[[14,[1]]]],[[],10],[[],10],[[],10],[[],10],[[],15],[[],15],[[]],[[]]],"c":[],"p":[[8,"Any"],[6,"MmiRef"],[3,"Stack"],[3,"NoDrop"],[3,"DropAfterInit"],[3,"MulticoreBringupInfo"],[3,"PhysicalAddress"],[4,"Option"],[15,"str"],[4,"Result"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[3,"TypeId"]]},\ "catch_unwind":{"doc":"Support for catching a panic while a panicked Task is …","t":"FF","n":["catch_unwind_with_arg","resume_unwind"],"q":[[0,"catch_unwind"]],"d":["Invokes the given closure f, catching a panic as it is …","Resumes the unwinding procedure after it was caught with …"],"i":[0,0],"f":[[1,[[3,[2]]]],[2,4]],"c":[],"p":[[8,"FnOnce"],[4,"KillReason"],[4,"Result"],[15,"never"]]},\ "cls":{"doc":"A library for defining CPU-local variables.","t":"IX","n":["CpuAtomicGuard","cpu_local"],"q":[[0,"cls"]],"d":["A trait abstracting over guards that ensure atomicity with …","A macro for declaring CPU-local variables."],"i":[0,0],"f":[0,0],"c":[],"p":[]},\ -"cls_macros":{"doc":"Exports the [cpu_local] macro.","t":"X","n":["cpu_local"],"q":[[0,"cls_macros"]],"d":["A macro for declaring CPU-local variables."],"i":[0],"f":[0],"c":[],"p":[]},\ +"cls_allocator":{"doc":"","t":"FFFF","n":["add_dynamic_section","add_static_section","reload","reload_current_cpu"],"q":[[0,"cls_allocator"]],"d":["Adds a dynamic CLS section to the global CLS initializer.","Adds a CLS section with a pre-determined offset to the …","","Generates a new data image for the current CPU and sets …"],"i":[0,0,0,0],"f":[[[1,2],[[4,[3]]]],[[1,2,2],[[4,[5,3]]]],[[]],[[]]],"c":[],"p":[[3,"LoadedSection"],[15,"usize"],[4,"LocalStorageInitializerError"],[4,"Result"],[6,"StrongSectionRef"]]},\ +"cls_macros":{"doc":"Exports the cpu_local macro.","t":"X","n":["cpu_local"],"q":[[0,"cls_macros"]],"d":["A macro for declaring CPU-local variables."],"i":[0],"f":[0],"c":[],"p":[]},\ "color":{"doc":"A simple representation of the standard RGB color model.","t":"RRRRDRRRRRRRRRRRRRLLLLLLLLLLLLLLLL","n":["BLACK","BLUE","BROWN","CYAN","Color","DARK_GRAY","GRAY","GREEN","LIGHT_BLUE","LIGHT_CYAN","LIGHT_GRAY","LIGHT_GREEN","MAGENTA","PINK","RED","TRANSPARENT","WHITE","YELLOW","blue","borrow","borrow_mut","clone","eq","fmt","from","green","into","new","red","set_transparency","transparency","try_from","try_into","type_id"],"q":[[0,"color"]],"d":["","","","","This structure represents a color value in the standard …","","","","","","","","","","","","","","Returns the blue component of this Color as a u8 value.","","","","","","Returns the argument unchanged.","Returns the green component of this Color as a u8 value.","Calls U::from(self).","Creates a new Color structure from a 4 bytes ARGB …","Returns the red component of this Color as a u8 value.","Sets the transparency of the color, in which 0 is opaque …","Returns the transparency component of this Color as a u8 …","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[[]],[[]],[1,1],[[1,1],3],[[1,4],5],[[]],[1,2],[[]],[6,1],[1,2],[[1,2]],[1,2],[[],7],[[],7],[[],8]],"c":[],"p":[[3,"Color"],[15,"u8"],[15,"bool"],[3,"Formatter"],[6,"Result"],[15,"u32"],[4,"Result"],[3,"TypeId"]]},\ "compositor":{"doc":"This crate defines a trait of Compositor . A compositor …","t":"IIDKLLKMLLKKMLLL","n":["CompositableRegion","Compositor","FramebufferUpdates","blend_buffers","borrow","borrow_mut","composite","coordinate_in_dest_framebuffer","from","into","row_range","size","src_framebuffer","try_from","try_into","type_id"],"q":[[0,"compositor"]],"d":["A CompositableRegion is an abstract region (i.e., a …","A compositor composites (combines or blends) a series of …","A source framebuffer to be composited, along with its …","Blends the pixels in the source framebuffer src_fb within …","","","Composites the framebuffers in the list of source …","The coordinate in the destination framebuffer where the …","Returns the argument unchanged.","Calls U::from(self).","Returns the range of rows covered by this region, given …","Returns the number of pixels in the region.","The source framebuffer to be composited.","","",""],"i":[0,0,0,12,13,13,14,13,13,13,12,12,13,13,13,13],"f":[0,0,0,[[[2,[1]],[2,[1]],3,[5,[4]]],[[7,[6]]]],[[]],[[]],[[8,[2,[1]],[0,[8,9]]],[[7,[6]]]],0,[[]],[[]],[[],[[5,[10]]]],[[],4],0,[[],7],[[],7],[[],11]],"c":[],"p":[[8,"Pixel"],[3,"Framebuffer"],[3,"Coord"],[15,"usize"],[3,"Range"],[15,"str"],[4,"Result"],[8,"IntoIterator"],[8,"Clone"],[15,"isize"],[3,"TypeId"],[8,"CompositableRegion"],[3,"FramebufferUpdates"],[8,"Compositor"]]},\ "console":{"doc":"Creation and management of virtual consoles or terminals …","t":"FF","n":["ignore_serial_port_input","start_connection_detection"],"q":[[0,"console"]],"d":["Configures the console connection listener to ignore …","Starts a new task that detects new console connections by …"],"i":[0,0],"f":[[1],[[],[[4,[2,3]]]]],"c":[],"p":[[15,"u16"],[3,"JoinableTaskRef"],[15,"str"],[4,"Result"]]},\ @@ -27,9 +28,8 @@ var searchIndex = JSON.parse('{\ "context_switch_sse":{"doc":"This crate contains structures and routines for context …","t":"DLLFLLLFOOLLLL","n":["ContextSSE","borrow","borrow_mut","context_switch_sse","from","into","new","read_first_register","restore_registers_sse","save_registers_sse","set_first_register","try_from","try_into","type_id"],"q":[[0,"context_switch_sse"]],"d":["The registers saved before a context switch and restored …","","","Switches context from an SSE Task to another SSE Task.","Returns the argument unchanged.","Calls U::from(self).","Creates a new ContextSSE struct that will cause the …","Reads the value of the first register from the actual CPU …","An assembly block for restoring SSE registers by popping …","An assembly block for saving SSE registers by pushing them …","Sets the value of the first regular (non-SSE) register to …","","",""],"i":[0,2,2,0,2,2,2,0,0,0,2,2,2,2],"f":[0,[[]],[[]],[[1,1]],[[]],[[]],[1,2],[[],1],0,0,[[2,1]],[[],3],[[],3],[[],4]],"c":[],"p":[[15,"usize"],[3,"ContextSSE"],[4,"Result"],[3,"TypeId"]]},\ "cow_arc":{"doc":"","t":"DDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["CowArc","CowWeak","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","clone_shallow","downgrade","fmt","fmt","from","from","into","into","is_shared","lock_as_mut","lock_as_ref","new","ptr_eq","to_owned","to_owned","try_from","try_from","try_into","try_into","try_lock_as_ref","type_id","type_id","upgrade"],"q":[[0,"cow_arc"]],"d":["A special form of an Arc reference that uses two nested Arc…","A weak reference to a CowArc, just like a Weak is to an Arc…","","","","","Creates a shared reference to this CowArc and returns …","","","","Creates a shallow clone of this CowArc that does not …","Downgrades this CowArc into a CowWeak weak reference.","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Returns true if this CowArc is in the Shared state, and …","This acquires the lock on the inner Mutex wrapping the …","This acquires the lock on the inner Mutex wrapping the …","Crates a new CowArc that wraps the given data. The new …","Returns true if the two CowArcs point to the same value …","","","","","","","This attempts to acquire the lock on the inner Mutex …","","","Just like Weak::upgrade(), attempts to upgrade this CowWeak"],"i":[0,0,1,2,1,2,1,2,1,2,1,1,1,2,1,2,1,2,1,1,1,1,1,1,2,1,2,1,2,1,1,2,2],"f":[0,0,[[]],[[]],[[]],[[]],[1,1],[2,2],[[]],[[]],[1,1],[1,2],[[[1,[3]],4],5],[[[2,[3]],4],5],[[]],[[]],[[]],[[]],[1,6],[1,[[9,[[8,[7]]]]]],[1,[[10,[7]]]],[[],1],[[1,1],6],[[]],[[]],[[],11],[[],11],[[],11],[[],11],[1,[[9,[[10,[7]]]]]],[[],12],[[],12],[2,[[9,[1]]]]],"c":[],"p":[[3,"CowArc"],[3,"CowWeak"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[15,"bool"],[3,"MutexGuard"],[3,"DerefsToMut"],[4,"Option"],[3,"DerefsTo"],[4,"Result"],[3,"TypeId"]]},\ "cpu":{"doc":"An abstraction for querying about CPUs (cores) in an SMP …","t":"DDFLLLLLLLLLFFLLLLLLLLLLLLLLLLFLLLLLLLLLLLL","n":["CpuId","OptionalCpuId","bootstrap_cpu","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cpu_count","current_cpu","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","hash","into","into","into_u8","is_bootstrap_cpu","partial_cmp","to_owned","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","type_id","type_id","value"],"q":[[0,"cpu"]],"d":["A unique identifier for a CPU core.","A wrapper around Option<CpuId> with a forced type …","Returns the ID of the bootstrap CPU (if known), which is …","","","","","","","","","","Returns the number of CPUs (SMP cores) that exist and are …","Returns the ID of the currently executing CPU.","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","A temporary function (will be removed later) that converts …","Returns true if the currently executing CPU is the …","","","","","","","","","","","","Returns the inner raw value of this CpuId."],"i":[0,0,0,3,1,3,1,3,1,3,1,1,0,0,1,3,1,1,1,1,1,1,3,3,1,1,1,3,1,1,0,1,3,1,1,3,1,1,3,1,3,1,1],"f":[0,0,[[],[[2,[1]]]],[[]],[[]],[[]],[[]],[3,3],[1,1],[[]],[[]],[[1,1],4],[[],5],[[],1],[[1,1],6],[[3,7],8],[[1,7],8],[[1,7],8],[[1,7],8],[[1,7],8],[[1,7],8],[[1,7],8],[[]],[[[2,[1]]],3],[[]],[9,1],[[1,10]],[[]],[[]],[1,11],[[],6],[[1,1],[[2,[4]]]],[[]],[[]],[[],12],[[],13],[5,[[13,[1]]]],[[],13],[[],13],[[],13],[[],14],[[],14],[1,5]],"c":[],"p":[[3,"CpuId"],[4,"Option"],[3,"OptionalCpuId"],[4,"Ordering"],[15,"u32"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"ApicId"],[8,"Hasher"],[15,"u8"],[3,"String"],[4,"Result"],[3,"TypeId"]]},\ -"cpu_local":{"doc":"Offers types and macros to declare and access CPU-local …","t":"NDINSENNLLLLLLLLFLLLLLLLLLLLLL","n":["CpuId","CpuLocal","CpuLocalField","DropAfterTaskSwitch","FIELD","PerCpuField","PreemptionCount","TaskSwitchPreemptionGuard","borrow","borrow","borrow_mut","borrow_mut","eq","from","from","get","init","into","into","new","offset","try_from","try_from","try_into","try_into","type_id","type_id","with","with_mut","with_preempt"],"q":[[0,"cpu_local"]],"d":["","A reference to a CPU-local variable.","This trait must be implemented for each field in …","","","The available CPU-local variables, i.e., fields in …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns a copy of this CpuLocal’s inner value of type T.","Initializes the CPU-local data region for this CPU.","Calls U::from(self).","Calls U::from(self).","Creates a new reference to a predefined CPU-local variable.","Returns the offset of this field in the per_cpu::PerCpuData…","","","","","","","Invokes the given func with an immutable reference to this …","Invokes the given func with a mutable reference to this …","Invokes the given func with an immutable reference to this …"],"i":[1,0,0,1,4,0,1,1,5,1,5,1,1,5,1,5,0,5,1,5,1,5,1,5,1,5,1,5,5,5],"f":[0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[1,1],2],[[]],[[]],[[[5,[[0,[3,4]]]]],[[0,[3,4]]]],[[6,7,8],[[10,[9]]]],[[]],[[]],[1,[[5,[4]]]],[1,7],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[[5,[4]],8]],[[[5,[4]],8]],[[[5,[4]],12,8]]],"c":[],"p":[[4,"PerCpuField"],[15,"bool"],[8,"Copy"],[8,"CpuLocalField"],[3,"CpuLocal"],[15,"u32"],[15,"usize"],[8,"FnOnce"],[15,"str"],[4,"Result"],[3,"TypeId"],[3,"PreemptionGuard"]]},\ -"crate_metadata":{"doc":"Defines types that contain metadata about crates loaded in …","t":"NRNRERRNRNNRNNDDDRRRDNREGDGDGRRRRNNNNGDGMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLMLLLLLLLLLLLLMMLMLLMMMLMMMMMMFLMMMLMMMLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLMLF","n":["Application","BSS_SECTION_NAME","Bss","CRATE_HASH_DELIMITER","CrateType","DATA_BSS_SECTION_FLAGS","DATA_SECTION_NAME","Data","EH_FRAME_SECTION_NAME","EhFrame","Executable","GCC_EXCEPT_TABLE_SECTION_NAME","GccExceptTable","Kernel","LoadedCrate","LoadedSection","LoadedSectionInner","MODULE_PREFIX_DELIMITER","RODATA_SECTION_FLAGS","RODATA_SECTION_NAME","RelocationEntry","Rodata","SECTION_HASH_DELIMITER","SectionType","Shndx","StrRef","StrongCrateRef","StrongDependency","StrongSectionRef","TEXT_SECTION_FLAGS","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME","Text","TlsBss","TlsData","Userspace","WeakCrateRef","WeakDependent","WeakSectionRef","addend","as_func","as_ref","as_str","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","copy_section_data_to","crate_name","crate_name_as_prefix","crate_name_without_hash","crates_dependent_on_me","crates_i_depend_on","data_pages","data_sections","data_sections_iter","debug_symbols_file","default","default_namespace_name","deref","deserialize","drop","eq","eq","eq","eq","find_section","find_weak_dependent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_elf_relocation","from_module_name","get_function_section","get_hash","global","global_sections","global_sections_iter","hash","inner","into","into","into","into","into","into","into","into","into","is_absolute","is_data_or_bss","is_tls","mapped_pages","mapped_pages_offset","name","name","name_without_hash","new","object_file","offset","parent_crate","partial_cmp","reexported_symbols","relocation","relocation","rodata_pages","section","section","section_name_str_ref","section_name_without_hash","sections","sections_dependent_on_me","sections_i_depend_on","serialize","size","text_pages","tls_sections","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","typ","typ","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","virt_addr","with_dependencies","write_relocation"],"q":[[0,"crate_metadata"]],"d":["","","A bss section is just like a data section, but is …","A crate’s name and its hash are separated by “-”, …","The type of a crate, based on its object file naming …",".data and .bss sections are read-write and non-executable.","","A data section contains data that is both readable and …","","The .eh_frame section contains information about stack …","","","A .gcc_except_table section contains landing pads for …","","Represents a single crate whose object file has been …","Represents a section that has been loaded and is part of a …","The parts of a LoadedSection that may be mutable, i.e., …","The Theseus Makefile appends prefixes onto bootloader …",".rodata sections are read-only and non-executable.","","The information necessary to calculate and write a …","An rodata section contains read-only data, i.e., constants.","A section’s demangled name and its hash are separated by …","The possible types of sections that can be loaded from a …","A Section Header iNDeX (SHNDX), as specified by the ELF …","A wrapper around an Arc<str>: an immutable shared …","A Strong reference to a LoadedCrate.","A representation that the owner A of (a LoadedSection …","A Strong reference (Arc) to a LoadedSection.",".text sections are read-only and executable.","","","","A text section contains executable code, i.e., functions. ","A .tbss section is a read-only section that holds all-zero …","A .tdata section is a read-only section that holds the …","","A Weak reference to a LoadedCrate.","A representation that the section A in this struct depends …","A Weak reference (Weak) to a LoadedSection.","The value that is added to the source section’s address …","Reinterprets this section’s underlying MappedPages …","","Obtain a reference to the inner str.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Copies the actual data contents of this LoadedSection to …","The name of this crate.","Returns this crate name as a symbol prefix, including a …","Returns the substring of this crate’s name that excludes …","Currently may contain duplicates!","Returns the set of crates that this crate depends on. …","A tuple of:","The set of .data and .bss sections in this crate. The Shndx…","A convenience function to iterate over only the data …","The file that contains debug symbols for this crate. …","","Returns the string suffix for use as the name of the …","","","","","","","","Returns the first LoadedSection that matches the given …","Returns the index of the first WeakDependent object in …","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns a tuple of (CrateType, &str, &str) based on the …","Returns the LoadedSection of type SectionType::Text that …","","Whether or not this section’s symbol was exported …","The set of global symbols in this crate, including regular …","A convenience function to iterate over only the global …","","The inner contents of a section that could possibly change …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the relocation type results in a …","Returns true if Data or Bss, otherwise false.","Returns true if TlsData or TlsBss, otherwise false.","The MappedPages that cover this section.","The offset into the mapped_pages where this section starts","Returns the const &str name of this SectionType.","The full string name of this section, a fully-qualified …","Returns the substring of this section’s name that …","Create a new LoadedSection, with an empty dependencies …","The object file that this crate was loaded from.","The offset from the starting virtual address of the target …","The LoadedCrate object that contains/owns this section","","The set of symbols that this crate’s global symbols are …","The details of the relocation action that was performed.","The details of the relocation action that was performed.","A tuple of:","A strong reference to the LoadedSection B that the owner …","A weak reference to the LoadedSection A that depends on …","Returns the default name for the given SectionType as a …","Returns the substring of the given section’s name that …","A map containing all the sections in this crate. In …","The list of sections in foreign crates that depend on this …","The list of sections in foreign crates that this section …","","The size in bytes of this section.","A tuple of:","The set of thread-local storage (TLS) symbols in this …","","","","","","","","","","","","","","","","","","","","","","","","","","The type of this section, e.g., .text, .rodata, .data, .bss…","The type of relocation calculation that is performed to …","","","","","","","","","","The starting VirtualAddress of this section (except for …","Same as [new()](#method.new), but uses the given …","Actually write the value of a relocation entry."],"i":[18,0,7,0,0,0,0,7,0,7,18,0,7,18,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,7,7,7,18,0,0,0,10,1,4,4,4,4,4,12,1,18,7,17,8,9,10,4,12,1,18,7,17,8,9,10,4,7,8,9,10,4,7,8,9,10,4,1,12,12,12,12,12,12,12,12,12,17,18,4,7,12,4,18,7,10,12,1,4,4,12,1,1,18,7,8,9,10,4,4,12,1,18,7,17,8,9,10,10,18,12,4,1,12,12,4,1,4,12,1,18,7,17,8,9,10,10,7,7,1,1,7,1,1,1,12,10,1,4,12,8,9,12,8,9,0,1,12,17,17,7,1,12,12,4,7,8,9,10,4,1,4,12,1,18,7,17,8,9,10,4,12,1,18,7,17,8,9,10,1,10,4,12,1,18,7,17,8,9,10,1,1,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,[[3,[2]]]],[4,2],[4,2],[4,2],[[]],[4,[[6,[5]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[4,4],[7,7],[8,8],[9,9],[10,10],[[]],[[]],[[]],[[]],[[]],[[4,4],11],[[1,1],[[3,[2]]]],0,[12,13],[12,2],[12,[[15,[14]]]],[12,[[15,[14]]]],0,0,[12,16],0,[[],17],[18,2],[4],[19,[[3,[7]]]],[12],[[4,4],20],[[18,18],20],[[7,7],20],[[10,10],20],[[12,21],[[23,[22]]]],[[1,22],[[23,[24]]]],[[4,25],[[3,[26]]]],[[4,25],[[3,[26]]]],[[12,25],27],[[1,25],27],[[1,25],27],[[18,25],27],[[7,25],[[3,[26]]]],[[8,25],27],[[9,25],27],[[10,25],27],[[]],[2,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[29,[28]]],10],[2,[[3,[2]]]],[[12,2],[[23,[22]]]],[[[0,[30,31]],32],28],0,0,[12,16],[[4,33]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[10,20],[7,20],[7,20],0,0,[7,2],0,[1,2],[[7,4,[36,[[35,[34]]]],24,37,24,20,14],1],0,0,0,[[4,4],[[23,[11]]]],0,0,0,0,0,0,[7,4],[2,2],0,0,0,[[7,38],3],0,0,0,[[]],[[]],[[]],[[]],[[]],[[],13],[[],13],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],0,0,[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],0,[[7,4,[36,[[35,[34]]]],24,37,24,20,14,[15,[8]],[15,[9]]],1],[[10,[6,[5]],24,37,20],[[3,[2]]]]],"c":[],"p":[[3,"LoadedSection"],[15,"str"],[4,"Result"],[3,"StrRef"],[15,"u8"],[15,"slice"],[4,"SectionType"],[3,"StrongDependency"],[3,"WeakDependent"],[3,"RelocationEntry"],[4,"Ordering"],[3,"LoadedCrate"],[3,"String"],[6,"WeakCrateRef"],[3,"Vec"],[8,"Iterator"],[3,"LoadedSectionInner"],[4,"CrateType"],[8,"Deserializer"],[15,"bool"],[8,"Fn"],[6,"StrongSectionRef"],[4,"Option"],[15,"usize"],[3,"Formatter"],[3,"Error"],[6,"Result"],[15,"u64"],[3,"Rela"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[8,"Hasher"],[3,"MappedPages"],[6,"Mutex"],[3,"Arc"],[3,"VirtualAddress"],[8,"Serializer"],[3,"TypeId"]]},\ -"crate_metadata_serde":{"doc":"Standalone crate containing (de)serializable types for …","t":"RNRNRNRNRNEDDGRRRNNNLLLLLLLLMMLLLLLLLLLLMMMLLLLLLMMMLLLMMLLLLLLLMLLLM","n":["BSS_SECTION_NAME","Bss","DATA_SECTION_NAME","Data","EH_FRAME_SECTION_NAME","EhFrame","GCC_EXCEPT_TABLE_SECTION_NAME","GccExceptTable","RODATA_SECTION_NAME","Rodata","SectionType","SerializedCrate","SerializedSection","Shndx","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME","Text","TlsBss","TlsData","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","crate_name","data_sections","deserialize","deserialize","deserialize","eq","fmt","fmt","fmt","from","from","from","global","global_sections","init_symbols","into","into","into","is_data_or_bss","is_tls","name","name","offset","sections","serialize","serialize","serialize","size","tls_sections","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","ty","type_id","type_id","type_id","virtual_address"],"q":[[0,"crate_metadata_serde"]],"d":["","A bss section is just like a data section, but is …","","A data section contains data that is both readable and …","","The .eh_frame section contains information about stack …","","A .gcc_except_table section contains landing pads for …","","An rodata section contains read-only data, i.e., constants.","The possible types of sections that can be loaded from a …","A (de)serializable representation of a loaded crate that …","A (de)serializable representation of a loaded section that …","A Section Header iNDeX (SHNDX), as specified by the ELF …","","","","A text section contains executable code, i.e., functions. ","A .tbss section is a read-only section that holds all-zero …","A .tdata section is a read-only section that holds the …","","","","","","","","","The name of the crate.","A set containing the .data and .bss sections of the crate.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Whether or not the section is global.","A set containing the global sectinos of the crate.","A map of symbol names to their constant values, which …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if Data or Bss, otherwise false.","Returns true if TlsData or TlsBss, otherwise false.","Returns the const &str name of this SectionType.","The full name of the section.","The offset into this section’s containing MappedPages …","A map containing all the sections of the crate.","","","","The size of the section.","A set containing the thread-local storage (TLS) sections …","","","","","","","","The type of the section.","","","","The starting virtual address of the range covered by this …"],"i":[0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,3,5,1,3,5,1,1,1,3,3,3,5,1,1,3,5,1,3,5,1,5,3,3,3,5,1,1,1,1,5,5,3,3,5,1,5,3,1,3,5,1,3,5,1,5,3,5,1,5],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[[]],0,0,[2,[[4,[3]]]],[2,[[4,[5]]]],[2,[[4,[1]]]],[[1,1],6],[[3,7],8],[[5,7],8],[[1,7],8],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[1,6],[1,6],[1,9],0,0,0,[[3,10],4],[[5,10],4],[[1,10],4],0,0,[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],0,[[],11],[[],11],[[],11],0],"c":[],"p":[[4,"SectionType"],[8,"Deserializer"],[3,"SerializedCrate"],[4,"Result"],[3,"SerializedSection"],[15,"bool"],[3,"Formatter"],[6,"Result"],[15,"str"],[8,"Serializer"],[3,"TypeId"]]},\ +"crate_metadata":{"doc":"Defines types that contain metadata about crates loaded in …","t":"NRNRNERRNRNNRNNDDDRRRDNREGDGDGRRRRNNNNGDGMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLMMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLMLLLLLLLLLLLLMMLMLLMMMLMMMMMMFLMMMLMMMLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLMLF","n":["Application","BSS_SECTION_NAME","Bss","CRATE_HASH_DELIMITER","Cls","CrateType","DATA_BSS_SECTION_FLAGS","DATA_SECTION_NAME","Data","EH_FRAME_SECTION_NAME","EhFrame","Executable","GCC_EXCEPT_TABLE_SECTION_NAME","GccExceptTable","Kernel","LoadedCrate","LoadedSection","LoadedSectionInner","MODULE_PREFIX_DELIMITER","RODATA_SECTION_FLAGS","RODATA_SECTION_NAME","RelocationEntry","Rodata","SECTION_HASH_DELIMITER","SectionType","Shndx","StrRef","StrongCrateRef","StrongDependency","StrongSectionRef","TEXT_SECTION_FLAGS","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME","Text","TlsBss","TlsData","Userspace","WeakCrateRef","WeakDependent","WeakSectionRef","addend","as_func","as_ref","as_str","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cls_sections","cmp","copy_section_data_to","crate_name","crate_name_as_prefix","crate_name_without_hash","crates_dependent_on_me","crates_i_depend_on","data_pages","data_sections","data_sections_iter","debug_symbols_file","default","default_namespace_name","deref","deserialize","drop","eq","eq","eq","eq","find_section","find_weak_dependent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_elf_relocation","from_module_name","get_function_section","get_hash","global","global_sections","global_sections_iter","hash","inner","into","into","into","into","into","into","into","into","into","is_absolute","is_data_or_bss","is_tls","mapped_pages","mapped_pages_offset","name","name","name_without_hash","new","object_file","offset","parent_crate","partial_cmp","reexported_symbols","relocation","relocation","rodata_pages","section","section","section_name_str_ref","section_name_without_hash","sections","sections_dependent_on_me","sections_i_depend_on","serialize","size","text_pages","tls_sections","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","typ","typ","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","virt_addr","with_dependencies","write_relocation"],"q":[[0,"crate_metadata"]],"d":["","","A bss section is just like a data section, but is …","A crate’s name and its hash are separated by “-”, …","A .cls section is a read-only section that holds the …","The type of a crate, based on its object file naming …",".data and .bss sections are read-write and non-executable.","","A data section contains data that is both readable and …","","The .eh_frame section contains information about stack …","","","A .gcc_except_table section contains landing pads for …","","Represents a single crate whose object file has been …","Represents a section that has been loaded and is part of a …","The parts of a LoadedSection that may be mutable, i.e., …","The Theseus Makefile appends prefixes onto bootloader …",".rodata sections are read-only and non-executable.","","The information necessary to calculate and write a …","An rodata section contains read-only data, i.e., constants.","A section’s demangled name and its hash are separated by …","The possible types of sections that can be loaded from a …","A Section Header iNDeX (SHNDX), as specified by the ELF …","A wrapper around an Arc<str>: an immutable shared …","A Strong reference to a LoadedCrate.","A representation that the owner A of (a LoadedSection …","A Strong reference (Arc) to a LoadedSection.",".text sections are read-only and executable.","","","","A text section contains executable code, i.e., functions. ","A .tbss section is a read-only section that holds all-zero …","A .tdata section is a read-only section that holds the …","","A Weak reference to a LoadedCrate.","A representation that the section A in this struct depends …","A Weak reference (Weak) to a LoadedSection.","The value that is added to the source section’s address …","Reinterprets this section’s underlying MappedPages …","","Obtain a reference to the inner str.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The set of CPU-local storage (CLS) symbols in this crate.","","Copies the actual data contents of this LoadedSection to …","The name of this crate.","Returns this crate name as a symbol prefix, including a …","Returns the substring of this crate’s name that excludes …","Currently may contain duplicates!","Returns the set of crates that this crate depends on. …","A tuple of:","The set of .data and .bss sections in this crate. The Shndx…","A convenience function to iterate over only the data …","The file that contains debug symbols for this crate. …","","Returns the string suffix for use as the name of the …","","","","","","","","Returns the first LoadedSection that matches the given …","Returns the index of the first WeakDependent object in …","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns a tuple of (CrateType, &str, &str) based on the …","Returns the LoadedSection of type SectionType::Text that …","","Whether or not this section’s symbol was exported …","The set of global symbols in this crate, including regular …","A convenience function to iterate over only the global …","","The inner contents of a section that could possibly change …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the relocation type results in a …","Returns true if Data or Bss, otherwise false.","Returns true if TlsData or TlsBss, otherwise false.","The MappedPages that cover this section.","The offset into the mapped_pages where this section starts","Returns the const &str name of this SectionType.","The full string name of this section, a fully-qualified …","Returns the substring of this section’s name that …","Create a new LoadedSection, with an empty dependencies …","The object file that this crate was loaded from.","The offset from the starting virtual address of the target …","The LoadedCrate object that contains/owns this section","","The set of symbols that this crate’s global symbols are …","The details of the relocation action that was performed.","The details of the relocation action that was performed.","A tuple of:","A strong reference to the LoadedSection B that the owner …","A weak reference to the LoadedSection A that depends on …","Returns the default name for the given SectionType as a …","Returns the substring of the given section’s name that …","A map containing all the sections in this crate. In …","The list of sections in foreign crates that depend on this …","The list of sections in foreign crates that this section …","","The size in bytes of this section.","A tuple of:","The set of thread-local storage (TLS) symbols in this …","","","","","","","","","","","","","","","","","","","","","","","","","","The type of this section, e.g., .text, .rodata, .data, .bss…","The type of relocation calculation that is performed to …","","","","","","","","","","The starting VirtualAddress of this section (except for …","Same as [new()](#method.new), but uses the given …","Actually write the value of a relocation entry."],"i":[18,0,7,0,7,0,0,0,7,0,7,18,0,7,18,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,7,7,7,18,0,0,0,10,1,4,4,4,4,4,12,1,18,17,7,8,9,10,4,12,1,18,17,7,8,9,10,4,7,8,9,10,4,7,8,9,10,12,4,1,12,12,12,12,12,12,12,12,12,17,18,4,7,12,4,18,7,10,12,1,4,4,12,1,1,18,7,8,9,10,4,4,12,1,18,17,7,8,9,10,10,18,12,4,1,12,12,4,1,4,12,1,18,17,7,8,9,10,10,7,7,1,1,7,1,1,1,12,10,1,4,12,8,9,12,8,9,0,1,12,17,17,7,1,12,12,4,7,8,9,10,4,1,4,12,1,18,17,7,8,9,10,4,12,1,18,17,7,8,9,10,1,10,4,12,1,18,17,7,8,9,10,1,1,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,[[3,[2]]]],[4,2],[4,2],[[]],[4,2],[4,[[6,[5]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[4,4],[7,7],[8,8],[9,9],[10,10],[[]],[[]],[[]],[[]],[[]],0,[[4,4],11],[[1,1],[[3,[2]]]],0,[12,13],[12,2],[12,[[15,[14]]]],[12,[[15,[14]]]],0,0,[12,16],0,[[],17],[18,2],[4],[19,[[3,[7]]]],[12],[[4,4],20],[[18,18],20],[[7,7],20],[[10,10],20],[[12,21],[[23,[22]]]],[[1,22],[[23,[24]]]],[[4,25],[[3,[26]]]],[[4,25],[[3,[26]]]],[[12,25],27],[[1,25],27],[[1,25],27],[[18,25],27],[[7,25],[[3,[26]]]],[[8,25],27],[[9,25],27],[[10,25],27],[[]],[2,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[29,[28]]],10],[2,[[3,[2]]]],[[12,2],[[23,[22]]]],[[[0,[30,31]],32],28],0,0,[12,16],[[4,33]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[10,20],[7,20],[7,20],0,0,[7,2],0,[1,2],[[7,4,[36,[[35,[34]]]],24,37,24,20,14],1],0,0,0,[[4,4],[[23,[11]]]],0,0,0,0,0,0,[7,4],[2,2],0,0,0,[[7,38],3],0,0,0,[[]],[[]],[[]],[[]],[[]],[[],13],[[],13],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],0,0,[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],[[],39],0,[[7,4,[36,[[35,[34]]]],24,37,24,20,14,[15,[8]],[15,[9]]],1],[[10,[6,[5]],24,37,20],[[3,[2]]]]],"c":[],"p":[[3,"LoadedSection"],[15,"str"],[4,"Result"],[3,"StrRef"],[15,"u8"],[15,"slice"],[4,"SectionType"],[3,"StrongDependency"],[3,"WeakDependent"],[3,"RelocationEntry"],[4,"Ordering"],[3,"LoadedCrate"],[3,"String"],[6,"WeakCrateRef"],[3,"Vec"],[8,"Iterator"],[3,"LoadedSectionInner"],[4,"CrateType"],[8,"Deserializer"],[15,"bool"],[8,"Fn"],[6,"StrongSectionRef"],[4,"Option"],[15,"usize"],[3,"Formatter"],[3,"Error"],[6,"Result"],[15,"u64"],[3,"Rela"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[8,"Hasher"],[3,"MappedPages"],[6,"Mutex"],[3,"Arc"],[3,"VirtualAddress"],[8,"Serializer"],[3,"TypeId"]]},\ +"crate_metadata_serde":{"doc":"Standalone crate containing (de)serializable types for …","t":"RNRRRNRNRNRNRNEDDGRRRNNNLLLLLLLLMMMLLLLLLLLLLMMMLLLLLLMMMLLLMMLLLLLLLMLLLM","n":["BSS_SECTION_NAME","Bss","CLS_SECTION_FLAG","CLS_SECTION_NAME","CLS_SYMBOL_TYPE","Cls","DATA_SECTION_NAME","Data","EH_FRAME_SECTION_NAME","EhFrame","GCC_EXCEPT_TABLE_SECTION_NAME","GccExceptTable","RODATA_SECTION_NAME","Rodata","SectionType","SerializedCrate","SerializedSection","Shndx","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME","Text","TlsBss","TlsData","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cls_sections","crate_name","data_sections","deserialize","deserialize","deserialize","eq","fmt","fmt","fmt","from","from","from","global","global_sections","init_symbols","into","into","into","is_data_or_bss","is_tls","name","name","offset","sections","serialize","serialize","serialize","size","tls_sections","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","ty","type_id","type_id","type_id","virtual_address"],"q":[[0,"crate_metadata_serde"]],"d":["","A bss section is just like a data section, but is …","The flag identifying CLS sections.","","The type identifying CLS symbols.","A .cls section is a read-only section that holds the …","","A data section contains data that is both readable and …","","The .eh_frame section contains information about stack …","","A .gcc_except_table section contains landing pads for …","","An rodata section contains read-only data, i.e., constants.","The possible types of sections that can be loaded from a …","A (de)serializable representation of a loaded crate that …","A (de)serializable representation of a loaded section that …","A Section Header iNDeX (SHNDX), as specified by the ELF …","","","","A text section contains executable code, i.e., functions. ","A .tbss section is a read-only section that holds all-zero …","A .tdata section is a read-only section that holds the …","","","","","","","","","The CLS section of the crate.","The name of the crate.","A set containing the .data and .bss sections of the crate.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Whether or not the section is global.","A set containing the global sections of the crate.","A map of symbol names to their constant values, which …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if Data or Bss, otherwise false.","Returns true if TlsData or TlsBss, otherwise false.","Returns the const &str name of this SectionType.","The full name of the section.","The offset into this section’s containing MappedPages …","A map containing all the sections of the crate.","","","","The size of the section.","A set containing the thread-local storage (TLS) sections …","","","","","","","","The type of the section.","","","","The starting virtual address of the range covered by this …"],"i":[0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,3,5,1,3,5,1,1,1,3,3,3,3,5,1,1,3,5,1,3,5,1,5,3,3,3,5,1,1,1,1,5,5,3,3,5,1,5,3,1,3,5,1,3,5,1,5,3,5,1,5],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[[]],0,0,0,[2,[[4,[3]]]],[2,[[4,[5]]]],[2,[[4,[1]]]],[[1,1],6],[[3,7],8],[[5,7],8],[[1,7],8],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[1,6],[1,6],[1,9],0,0,0,[[3,10],4],[[5,10],4],[[1,10],4],0,0,[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],0,[[],11],[[],11],[[],11],0],"c":[],"p":[[4,"SectionType"],[8,"Deserializer"],[3,"SerializedCrate"],[4,"Result"],[3,"SerializedSection"],[15,"bool"],[3,"Formatter"],[6,"Result"],[15,"str"],[8,"Serializer"],[3,"TypeId"]]},\ "crate_name_utils":{"doc":"Utility functions for parsing and processing crate names …","t":"FFFFF","n":["crate_name_from_path","get_containing_crate_name","get_containing_crate_name_ranges","is_valid_crate_name_char","replace_containing_crate_name"],"q":[[0,"crate_name_utils"]],"d":["Returns the crate name that is derived from a crate object …","Parses the given symbol string to try to find the name of …","Same as get_containing_crate_name(), but returns the …","Crate names must be only alphanumeric characters, an …","Replaces the old_crate_name substring in the given …"],"i":[0,0,0,0,0],"f":[[1,2],[2,[[3,[2]]]],[2,[[3,[[5,[4]]]]]],[6,7],[[2,2,2],[[9,[8]]]]],"c":[],"p":[[3,"Path"],[15,"str"],[3,"Vec"],[15,"usize"],[3,"Range"],[15,"char"],[15,"bool"],[3,"String"],[4,"Option"]]},\ "crate_swap":{"doc":"Defines functions and types for crate swapping, used in …","t":"ENNNNGDGLLLLFLLLLLLLLLLFLLLLLL","n":["InvalidSwapRequest","NewCrateAbsolutePathNotFound","NewCratePathNotAbsolute","NewCratePrefixNotFound","OldCrateNotFound","StateTransferFunction","SwapRequest","SwapRequestList","borrow","borrow","borrow_mut","borrow_mut","clear_unloaded_crate_cache","eq","fmt","fmt","from","from","get_hash","hash","into","into","new","swap_crates","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"crate_swap"]],"d":["The possible errors that can occur when trying to create a …","The given absolute Path for the new crate object file …","The given Path for the new crate object file was not an …","A single crate object file could not be found by matching …","The old crate was not found in the old CrateNamespace. The …","A state transfer function is an arbitrary function called …","This struct is used to specify the details of a …","A list of one or more SwapRequests that is used by the …","","","","","Clears the cache of unloaded (swapped-out) crates saved …","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Create a new SwapRequest that, when given to swap_crates()…","Swaps in new crates that can optionally replace existing …","","","","","",""],"i":[0,3,3,3,3,0,0,0,3,1,3,1,0,1,3,1,3,1,1,1,3,1,1,0,3,1,3,1,3,1],"f":[0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[1,1],2],[[3,4],5],[[1,4],5],[[]],[[]],[[[0,[6,7]],8],9],[[1,10]],[[]],[[]],[[[12,[11]],[14,[13]],15,[12,[[14,[13]]]],2],[[16,[1,3]]]],[[[14,[13]],17,[12,[18]],[20,[19]],21,2,2],[[16,[11]]]],[[],16],[[],16],[[],16],[[],16],[[],22],[[],22]],"c":[],"p":[[3,"SwapRequest"],[15,"bool"],[4,"InvalidSwapRequest"],[3,"Formatter"],[6,"Result"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[8,"Hasher"],[15,"str"],[4,"Option"],[3,"CrateNamespace"],[3,"Arc"],[4,"IntoCrateObjectFile"],[4,"Result"],[6,"SwapRequestList"],[3,"NamespaceDir"],[3,"String"],[3,"Vec"],[6,"MmiRef"],[3,"TypeId"]]},\ "debug_info":{"doc":"Support for DWARF debug information from ELF files.","t":"DENNLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["DebugSections","DebugSymbols","Loaded","Unloaded","borrow","borrow","borrow_mut","borrow_mut","debug_abbrev","debug_info","debug_line","debug_loc","debug_pubnames","debug_pubtypes","debug_ranges","debug_str","find_subprogram_containing","from","from","get_loaded","into","into","load","try_from","try_from","try_into","try_into","type_id","type_id","unload"],"q":[[0,"debug_info"]],"d":["The set of debug sections that we need to use from a crate …","An enum describing the possible forms of debug information …","The debug information has already been parsed from the file","Debug information that hasn’t yet been parsed from the …","","","","","Returns the ".debug_abbrev" section.","Returns the ".debug_info" section.","Returns the ".debug_line" section.","Returns the ".debug_loc" section.","Returns the ".debug_pubnames" section.","Returns the ".debug_pubtypes" section.","Returns the ".debug_ranges" section.","Returns the ".debug_str" section.","Finds the subprogram that contains the given instruction …","Returns the argument unchanged.","Returns the argument unchanged.","A convenience method for accessing the already-loaded …","Calls U::from(self).","Calls U::from(self).","Loads the debug symbols from the enclosed weak file …","","","","","","","Unloads these DebugSymbols, returning the enclosed …"],"i":[0,0,16,16,1,16,1,16,1,1,1,1,1,1,1,1,1,1,16,16,1,16,16,1,16,1,16,1,16,16],"f":[0,0,0,0,[[]],[[]],[[]],[[]],[1,[[4,[[3,[2]]]]]],[1,[[5,[[3,[2]]]]]],[1,[[6,[[3,[2]]]]]],[1,[[8,[[7,[[3,[2]]]]]]]],[1,[[9,[[3,[2]]]]]],[1,[[10,[[3,[2]]]]]],[1,[[11,[[3,[2]]]]]],[1,[[12,[[3,[2]]]]]],[[1,13],[[15,[[8,[14]]]]]],[[]],[[]],[16,[[8,[1]]]],[[]],[[]],[[16,17,18],[[20,[1,19]]]],[[],20],[[],20],[[],20],[[],20],[[],21],[[],21],[16,[[8,[1]]]]],"c":[],"p":[[3,"DebugSections"],[6,"NativeEndian"],[3,"EndianSlice"],[3,"DebugAbbrev"],[3,"DebugInfo"],[3,"DebugLine"],[3,"DebugLoc"],[4,"Option"],[3,"DebugPubNames"],[3,"DebugPubTypes"],[3,"DebugRanges"],[3,"DebugStr"],[3,"VirtualAddress"],[3,"DebugInfoOffset"],[6,"Result"],[4,"DebugSymbols"],[6,"StrongCrateRef"],[3,"CrateNamespace"],[15,"str"],[4,"Result"],[3,"TypeId"]]},\ @@ -43,7 +43,7 @@ var searchIndex = JSON.parse('{\ "dreadnought":{"doc":"An asynchronous executor.","t":"IFLLLLLALLLLLLLOLLOALALDDDDDGNNEDQDDDDIINNIDNNDDDDDDDDDDDNGDDDDDDEDQDDDQDDDDNDDDDDDIIDDDDDEDDIDLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFFFFFLLLLLLFLLLLLLFLLLLFKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLLLLLLLLLLLFLFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFFFFFKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNENNDNGLLLLLLLLLLLLLFLLLLLLLDSSSSSDSLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLL","n":["FutureExt","block_on","boxed","boxed_local","flatten","flatten_stream","fuse","future","inspect","into_stream","left_future","map","map_into","never_error","now_or_never","pin_mut","poll_unpin","right_future","select_biased","task","then","time","unit_error","AbortHandle","AbortRegistration","Abortable","Aborted","AndThen","BoxFuture","Done","Done","Either","ErrInto","Error","Flatten","FlattenSink","FlattenStream","Fuse","FusedFuture","Future","Future","Future","FutureExt","FutureObj","Gone","Gone","Inspect","InspectErr","InspectOk","IntoFuture","IntoStream","Join","Join3","Join4","Join5","JoinAll","Lazy","Left","LocalBoxFuture","LocalFutureObj","Map","MapErr","MapInto","MapOk","MapOkOrElse","MaybeDone","NeverError","Ok","OkInto","OptionFuture","OrElse","Output","Pending","PollFn","PollImmediate","Ready","Right","Select","SelectAll","SelectOk","Then","TryFlatten","TryFlattenStream","TryFuture","TryFutureExt","TryJoin","TryJoin3","TryJoin4","TryJoin5","TryJoinAll","TryMaybeDone","TrySelect","UnitError","UnsafeFutureObj","UnwrapOrElse","abort","abortable","and_then","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","boxed","boxed_local","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","drop","drop","drop","eq","err","err_into","factor_first","factor_second","flatten","flatten_sink","flatten_stream","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_iter","from_iter","from_iter","from_iter","fuse","inspect","inspect_err","inspect_ok","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future","into_future_obj","into_inner","into_inner","into_inner","into_raw","into_raw","into_stream","is_aborted","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","is_terminated","join","join3","join4","join5","join_all","lazy","left_future","map","map_err","map_into","map_ok","map_ok_or_else","maybe_done","never_error","new","new","new","new_pair","now_or_never","ok","ok_into","or_else","output_mut","output_mut","pending","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll","poll_close","poll_close","poll_close","poll_close","poll_flush","poll_flush","poll_flush","poll_flush","poll_fn","poll_immediate","poll_next","poll_next","poll_next","poll_next","poll_next","poll_next","poll_next","poll_ready","poll_ready","poll_ready","poll_ready","poll_unpin","ready","right_future","select","select_all","select_ok","size_hint","size_hint","size_hint","size_hint","size_hint","start_send","start_send","start_send","start_send","take_output","take_output","terminated","then","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_flatten","try_flatten_stream","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_join","try_join3","try_join4","try_join5","try_join_all","try_maybe_done","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll","try_poll_next","try_poll_next","try_poll_next","try_poll_next","try_poll_next","try_poll_next","try_poll_unpin","try_select","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unit_error","unwrap_or_else","Cancelled","Error","Exception","Join","JoinableAsyncTaskRef","Panic","Result","abort","borrow","borrow","borrow_mut","borrow_mut","fmt","from","from","into","into","into_future","is_finished","poll","spawn_async","try_from","try_from","try_into","try_into","try_poll","type_id","type_id","Duration","MAX","MICROSECOND","MILLISECOND","NANOSECOND","SECOND","Sleep","ZERO","add","add_assign","as_micros","as_millis","as_nanos","as_secs","as_secs_f32","as_secs_f64","borrow","borrow","borrow_decode","borrow_mut","borrow_mut","checked_add","checked_div","checked_mul","checked_sub","clone","clone_into","cmp","decode","default","deserialize","div","div_assign","div_duration_f32","div_duration_f64","div_f32","div_f64","encode","eq","fmt","from","from","from_micros","from_millis","from_nanos","from_secs","from_secs_f32","from_secs_f64","get_hash","hash","into","into","into_future","is_zero","mul","mul_assign","mul_f32","mul_f64","new","partial_cmp","poll","saturating_add","saturating_mul","saturating_sub","serialize","sleep","sub","sub_assign","subsec_micros","subsec_millis","subsec_nanos","sum","sum","to_owned","try_from","try_from","try_from_secs_f32","try_from_secs_f64","try_into","try_into","type_id","type_id"],"q":[[0,"dreadnought"],[23,"dreadnought::future"],[841,"dreadnought::task"],[869,"dreadnought::time"]],"d":["An extension trait for Futures that provides a variety of …","Executes a future to completion.","Wrap the future in a Box, pinning it.","Wrap the future in a Box, pinning it.","Flatten the execution of this future when the output of …","Flatten the execution of this future when the successful …","Fuse a future such that poll will never again be called …","Asynchronous values.","Do something with the output of a future before passing it …","Convert this future into a single element stream.","Wrap this future in an Either future, making it the …","Map this future’s output to a different type, returning …","Map this future’s output to a different type, returning …","Turns a Future<Output = T> into a …","Evaluates and consumes the future, returning the resulting …","Pins a value on the stack.","A convenience for calling Future::poll on Unpin future …","Wrap this future in an Either future, making it the …","Polls multiple futures and streams simultaneously, …","Asynchronous tasks based on Theseus’s native OS task …","Chain on a computation for when a future finished, passing …","Utilities for tracking time.","Turns a Future<Output = T> into a …","A handle to an Abortable task.","A registration handle for an Abortable task. Values of …","A future/stream which can be remotely short-circuited …","Indicator that the Abortable task was aborted.","Future for the and_then method.","An owned dynamically typed Future for use in cases where …","The output of the completed future","The output of the completed future","Combines two different futures, streams, or sinks having …","Future for the err_into method.","The type of failures yielded by this future","Future for the flatten method.","Sink for the flatten_sink method.","Stream for the flatten_stream method.","Future for the fuse method.","A future which tracks whether or not the underlying future …","A future represents an asynchronous computation obtained …","A not-yet-completed future","A not-yet-completed future","An extension trait for Futures that provides a variety of …","A custom trait object for polling futures, roughly akin to …","The empty variant after the result of a MaybeDone has been …","The empty variant after the result of a TryMaybeDone has …","Future for the inspect method.","Future for the inspect_err method.","Future for the inspect_ok method.","Future for the into_future method.","Stream for the into_stream method.","Future for the join function.","Future for the join3 function.","Future for the join4 function.","Future for the join5 function.","Future for the join_all function.","Future for the lazy function.","First branch of the type","BoxFuture, but without the Send requirement.","A custom trait object for polling futures, roughly akin to …","Future for the map method.","Future for the map_err method.","Future for the map_into combinator.","Future for the map_ok method.","Future for the map_ok_or_else method.","A future that may have completed.","Future for the never_error combinator.","The type of successful values yielded by this future","Future for the ok_into method.","A future representing a value which may or may not be …","Future for the or_else method.","The type of value produced on completion.","Future for the pending() function.","Future for the poll_fn function.","Future for the poll_immediate function.","Future for the ready function.","Second branch of the type","Future for the select() function.","Future for the select_all function.","Future for the select_ok function.","Future for the then method.","Future for the try_flatten method.","Future for the try_flatten_stream method.","A convenience for futures that return Result values that …","Adapters specific to Result-returning futures","Future for the try_join function.","Future for the try_join3 function.","Future for the try_join4 function.","Future for the try_join5 function.","Future for the try_join_all function.","A future that may have completed with an error.","Future for the try_select() function.","Future for the unit_error combinator.","A custom implementation of a future trait object for …","Future for the unwrap_or_else method.","Abort the Abortable stream/future associated with this …","Creates a new Abortable future and an AbortHandle which …","Executes another future after this one resolves …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrap the future in a Box, pinning it.","Wrap the future in a Box, pinning it.","","","","","","","","","","","","","","","","","","Drops the future represented by the given fat pointer.","","","","Create a future that is immediately ready with an error …","Maps this future’s Error to a new error type using the …","Factor out a homogeneous type from an either of pairs.","Factor out a homogeneous type from an either of pairs.","Flatten the execution of this future when the output of …","Flattens the execution of this future when the successful …","Flatten the execution of this future when the successful …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Fuse a future such that poll will never again be called …","Do something with the output of a future before passing it …","Do something with the error value of a future before …","Do something with the success value of a future before …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Wraps a TryFuture into a type that implements Future.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Converts the LocalFutureObj into a FutureObj.","Unwraps the value from this immediately ready future.","Consumes this combinator, returning the underlying futures.","Extract the value of an either over two equivalent types.","Convert an owned instance into a (conceptually owned) fat …","","Convert this future into a single element stream.","Checks whether the task has been aborted. Note that all …","Returns true if the underlying future should no longer be …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Joins the result of two futures, waiting for them both to …","Same as join, but with more futures.","Same as join, but with more futures.","Same as join, but with more futures.","Creates a future which represents a collection of the …","Creates a new future that allows delayed execution of a …","Wrap this future in an Either future, making it the …","Map this future’s output to a different type, returning …","Maps this future’s error value to a different value.","Map this future’s output to a different type, returning …","Maps this future’s success value to a different value.","Maps this future’s success value to a different value, …","Wraps a future into a MaybeDone","Turns a Future<Output = T> into a …","Create a LocalFutureObj from a custom trait object …","Create a FutureObj from a custom trait object …","Creates a new Abortable future/stream using an existing …","Creates an (AbortHandle, AbortRegistration) pair which can …","Evaluates and consumes the future, returning the resulting …","Create a future that is immediately ready with a success …","Maps this future’s Ok to a new type using the Into trait.","Executes another future if this one resolves to an error. …","Returns an Option containing a mutable reference to the …","Returns an Option containing a mutable reference to the …","Creates a future which never resolves, representing a …","Attempt to resolve the future to a final value, registering","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Creates a new future wrapping around a function returning …","Creates a future that is immediately ready with an Option …","","","","","","","","","","","","A convenience for calling Future::poll on Unpin future …","Creates a future that is immediately ready with a value.","Wrap this future in an Either future, making it the …","Waits for either one of two differently-typed futures to …","Creates a new future which will select over a list of …","Creates a new future which will select the first …","","","","","","","","","","Attempt to take the output of a MaybeDone without driving …","Attempt to take the output of a TryMaybeDone without …","Creates a new Fuse-wrapped future which is already …","Chain on a computation for when a future finished, passing …","","","","","","","","","","Flatten the execution of this future when the successful …","Flatten the execution of this future when the successful …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Joins the result of two futures, waiting for them both to …","Same as try_join, but with more futures.","Same as try_join, but with more futures.","Same as try_join, but with more futures.","Creates a future which represents either a collection of …","Wraps a future into a TryMaybeDone","Poll this TryFuture as if it were a Future.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A convenience method for calling TryFuture::try_poll on …","Waits for either one of two differently-typed futures to …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Turns a Future<Output = T> into a …","Unwraps this future’s output, producing a future with …","","An error returned from polling a JoinableAsyncTaskRef.","","A Join error should not occur; this indicates a BUG in …","An owned permission to join an async task.","","","Abort the task associated with the handle.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","Returns whether the task associated with the handle has …","","Spawns a new asynchronous task, returning a …","","","","","","","","A Duration type to represent a span of time, typically …","The maximum duration.","The duration of one microsecond.","The duration of one millisecond.","The duration of one nanosecond.","The duration of one second.","Future returned by [sleep].","A duration of zero time.","","","Returns the total number of whole microseconds contained …","Returns the total number of whole milliseconds contained …","Returns the total number of nanoseconds contained by this …","Returns the number of whole seconds contained by this …","Returns the number of seconds contained by this Duration …","Returns the number of seconds contained by this Duration …","","","","","","Checked Duration addition. Computes self + other, …","Checked Duration division. Computes self / other, …","Checked Duration multiplication. Computes self * other, …","Checked Duration subtraction. Computes self - other, …","","","","","","","","","Divide Duration by Duration and return f32.","Divide Duration by Duration and return f64.","Divide Duration by f32.","Divide Duration by f64.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of whole …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","","","Calls U::from(self).","Calls U::from(self).","","Returns true if this Duration spans no time.","","","Multiplies Duration by f32.","Multiplies Duration by f64.","Creates a new Duration from the specified number of whole …","","","Saturating Duration addition. Computes self + other, …","Saturating Duration multiplication. Computes self * other, …","Saturating Duration subtraction. Computes self - other, …","","Waits until the specified number of ticks has elapsed.","","","Returns the fractional part of this Duration, in whole …","Returns the fractional part of this Duration, in whole …","Returns the fractional part of this Duration, in …","","","","","","The checked version of from_secs_f32.","The checked version of from_secs_f64.","","","",""],"i":[0,0,106,106,106,106,106,0,106,106,106,106,106,106,106,0,106,106,0,0,106,0,106,0,0,0,0,0,0,57,58,0,0,24,0,0,0,0,0,0,57,58,0,0,57,58,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,24,0,0,0,1,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,107,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,106,106,26,28,29,30,13,31,23,32,26,28,29,30,13,31,23,32,28,76,33,1,32,0,107,13,13,106,107,106,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,32,33,33,33,33,33,33,40,40,40,40,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,43,44,64,70,106,106,107,107,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,33,40,107,41,43,44,9,7,14,15,21,11,16,22,45,46,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,33,30,64,13,76,1,106,31,74,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,13,13,0,0,0,0,0,0,106,106,107,106,107,107,0,106,33,40,31,23,106,0,107,107,57,58,0,1,33,40,41,43,44,9,7,14,15,21,11,16,22,45,46,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,8,47,37,13,8,47,37,13,0,0,8,12,47,37,29,13,31,8,47,37,13,106,0,106,0,0,0,8,12,47,37,13,8,47,37,13,57,58,9,106,26,28,29,30,13,31,23,32,32,107,107,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,0,0,0,0,0,0,24,33,40,41,44,9,7,14,15,21,11,16,22,45,46,25,48,36,49,50,51,52,53,54,55,56,26,58,30,65,66,67,68,69,70,13,31,8,12,47,37,13,31,107,0,33,40,41,43,44,9,7,8,14,12,15,21,11,16,22,45,46,47,37,25,48,36,49,50,51,52,53,54,55,56,26,57,58,28,29,30,59,60,61,62,63,64,65,66,67,68,69,70,13,31,71,23,32,106,107,83,0,83,83,0,83,0,82,82,83,82,83,83,82,83,82,83,82,82,82,0,82,83,82,83,82,82,83,0,86,86,86,86,86,0,86,86,86,86,86,86,86,86,86,102,86,86,102,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,102,86,86,86,86,86,86,86,86,86,102,86,102,86,86,86,86,86,86,86,102,86,86,86,86,0,86,86,86,86,86,86,86,86,102,86,86,86,102,86,102,86],"f":[0,[1],[[[0,[2,3]]],[[6,[[5,[1,4]]]]]],[2,[[6,[[5,[1,4]]]]]],[2,[[7,[2]]]],[2,[[8,[2]]]],[2,[[9,[2]]]],0,[[2,10],[[11,[2,10]]]],[2,[[12,[2]]]],[2,[[13,[2,1]]]],[[2,10],[[14,[2,10]]]],[2,[[15,[2]]]],[2,[[16,[2]]]],[2,17],0,[[18,19],20],[2,[[13,[1,2]]]],0,0,[[2,10],[[21,[2,1,10]]]],0,[2,[[22,[2]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[23],[1],[[2,10],[[25,[2,24,10]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[0,[2,3]]],[[6,[[5,[1,4]]]]]],[2,[[6,[[5,[1,4]]]]]],[26,26],[[[28,[27]]],[[28,[27]]]],[[[29,[27]]],[[29,[27]]]],[[[30,[27]]],[[30,[27]]]],[[[13,[27,27]]],[[13,[27,27]]]],[[[31,[27]]],[[31,[27]]]],[23,23],[32,32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],28],[1],[33],[1],[[32,32],34],[[],[[30,[35]]]],[2,[[36,[2]]]],[13],[13],[2,[[7,[2]]]],[2,[[37,[2]]]],[2,[[8,[2]]]],[[33,38],[[35,[39]]]],[[40,38],[[35,[39]]]],[[41,38],[[35,[39]]]],[[[43,[[0,[1,42]]]],38],[[35,[39]]]],[[[44,[[0,[24,42]]]],38],[[35,[39]]]],[[[9,[42]],38],[[35,[39]]]],[[[7,[1]],38],[[35,[39]]]],[[[8,[1]],38],[[35,[39]]]],[[14,38],[[35,[39]]]],[[12,38],[[35,[39]]]],[[15,38],[[35,[39]]]],[[21,38],[[35,[39]]]],[[11,38],[[35,[39]]]],[[16,38],[[35,[39]]]],[[22,38],[[35,[39]]]],[[[45,[42]],38],[[35,[39]]]],[[46,38],[[35,[39]]]],[[[47,[24]],38],[[35,[39]]]],[[37,38],[[35,[39]]]],[[25,38],[[35,[39]]]],[[48,38],[[35,[39]]]],[[36,38],[[35,[39]]]],[[49,38],[[35,[39]]]],[[50,38],[[35,[39]]]],[[51,38],[[35,[39]]]],[[52,38],[[35,[39]]]],[[53,38],[[35,[39]]]],[[54,38],[[35,[39]]]],[[55,38],[[35,[39]]]],[[[56,[42]],38],[[35,[39]]]],[[[26,[42]],38],[[35,[39]]]],[[[57,[[0,[42,1]]]],38],[[35,[39]]]],[[[58,[[0,[42,24]]]],38],[[35,[39]]]],[[[28,[42]],38],[[35,[39]]]],[[[29,[42]],38],[[35,[39]]]],[[[30,[42]],38],[[35,[39]]]],[[[59,[[0,[1,42]],[0,[1,42]]]],38],[[35,[39]]]],[[[60,[[0,[1,42]],[0,[1,42]],[0,[1,42]]]],38],[[35,[39]]]],[[[61,[[0,[1,42]],[0,[1,42]],[0,[1,42]],[0,[1,42]]]],38],[[35,[39]]]],[[[62,[[0,[1,42]],[0,[1,42]],[0,[1,42]],[0,[1,42]],[0,[1,42]]]],38],[[35,[39]]]],[[[63,[42,42]],38],[[35,[39]]]],[[[64,[42]],38],[[35,[39]]]],[[[65,[[0,[24,42]],[0,[24,42]]]],38],[[35,[39]]]],[[[66,[[0,[24,42]],[0,[24,42]],[0,[24,42]]]],38],[[35,[39]]]],[[[67,[[0,[24,42]],[0,[24,42]],[0,[24,42]],[0,[24,42]]]],38],[[35,[39]]]],[[[68,[[0,[24,42]],[0,[24,42]],[0,[24,42]],[0,[24,42]],[0,[24,42]]]],38],[[35,[39]]]],[[[69,[42,42]],38],[[35,[39]]]],[[[70,[42]],38],[[35,[39]]]],[[[13,[42,42]],38],[[35,[39]]]],[[[31,[42]],38],[[35,[39]]]],[[71,38],[[35,[39]]]],[[23,38],[[35,[39]]]],[[32,38],[[35,[39]]]],[[32,38],[[35,[39]]]],[[[6,[[5,[1,4]]]]],33],[[[5,[1,4]]],33],[[[6,[[5,[1,4]]]]],33],[[[5,[1,4]]],33],[[]],[40,33],[[[5,[1,4]]],40],[[[5,[[0,[1,3]],4]]],40],[[[6,[[5,[1,4]]]]],40],[[]],[[[6,[[5,[[0,[1,3]],4]]]]],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[17,28],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[72,[[43,[1]]]],[72,[[44,[24]]]],[72,[[64,[[0,[1,18]]]]]],[72,[[70,[[0,[24,18]]]]]],[2,[[9,[2]]]],[[2,10],[[11,[2,10]]]],[[2,10],[[51,[2,10]]]],[[2,10],[[50,[2,10]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,[[45,[2]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[33,40],[30],[64,[[73,[4]]]],[13],[[],1],[1,1],[2,[[12,[2]]]],[31,34],[[],34],[[[9,[1]]],34],[[[7,[1]]],34],[[[8,[1]]],34],[14,34],[12,34],[15,34],[21,34],[11,34],[16,34],[22,34],[[[45,[[0,[24,74]]]]],34],[46,34],[[[47,[24]]],34],[37,34],[25,34],[48,34],[36,34],[49,34],[50,34],[51,34],[52,34],[53,34],[54,34],[55,34],[[[56,[10]]],34],[26,34],[[[57,[1]]],34],[[[58,[24]]],34],[[[28,[74]]],34],[[[29,[1]]],34],[30,34],[[[59,[74,74]]],34],[[[60,[74,74,74]]],34],[[[61,[74,74,74,74]]],34],[[[62,[74,74,74,74,74]]],34],[[[63,[[0,[1,18]],[0,[1,18]]]]],34],[[[13,[75,75]]],34],[[[13,[74,74]]],34],[[1,1],[[59,[1,1]]]],[[1,1,1],[[60,[1,1,1]]]],[[1,1,1,1],[[61,[1,1,1,1]]]],[[1,1,1,1,1],[[62,[1,1,1,1,1]]]],[72,43],[10,[[56,[10]]]],[2,[[13,[2,1]]]],[[2,10],[[14,[2,10]]]],[[2,10],[[53,[2,10]]]],[2,[[15,[2]]]],[[2,10],[[52,[2,10]]]],[[2,10,10],[[54,[2,10,10]]]],[1,[[57,[1]]]],[2,[[16,[2]]]],[76,33],[[[0,[76,3]]],40],[71,31],[[]],[2,17],[[],[[30,[35]]]],[2,[[49,[2]]]],[[2,10],[[48,[2,24,10]]]],[[[6,[[57,[1]]]]],17],[[[6,[[58,[24]]]]],17],[[],26],[[6,19],20],[[[6,[33]],19],20],[[[6,[40]],19],20],[[[6,[[41,[77]]]],19],20],[[[6,[[43,[1]]]],19],20],[[[6,[[44,[24]]]],19],20],[[[6,[[9,[1]]]],19],20],[[[6,[[7,[1]]]],19],20],[[[6,[14]],19],20],[[[6,[15]],19],20],[[[6,[21]],19],20],[[[6,[11]],19],20],[[[6,[16]],19],20],[[[6,[22]],19],20],[[[6,[[45,[24]]]],19],20],[[[6,[46]],19],20],[[[6,[25]],19],20],[[[6,[48]],19],20],[[[6,[36]],19],20],[[[6,[49]],19],20],[[[6,[50]],19],20],[[[6,[51]],19],20],[[[6,[52]],19],20],[[[6,[53]],19],20],[[[6,[54]],19],20],[[[6,[55]],19],20],[[[6,[[56,[10]]]],19],20],[[[6,[26]],19],20],[[[6,[[57,[1]]]],19],20],[[[6,[[58,[24]]]],19],20],[[[6,[[28,[1]]]],19],20],[[[6,[[29,[1]]]],19],[[20,[17]]]],[[[6,[30]],19],20],[[[6,[[59,[1,1]]]],19],20],[[[6,[[60,[1,1,1]]]],19],20],[[[6,[[61,[1,1,1,1]]]],19],20],[[[6,[[62,[1,1,1,1,1]]]],19],20],[[[6,[[63,[[0,[1,18]],[0,[1,18]]]]]],19],20],[[[6,[[64,[[0,[1,18]]]]]],19],20],[[[6,[[65,[24,24]]]],19],20],[[[6,[[66,[24,24,24]]]],19],20],[[[6,[[67,[24,24,24,24]]]],19],20],[[[6,[[68,[24,24,24,24,24]]]],19],20],[[[6,[[69,[[0,[18,24]],[0,[18,24]]]]]],19],20],[[[6,[[70,[[0,[24,18]]]]]],19],20],[[[6,[[13,[1,1]]]],19],20],[[[6,[[31,[1]]]],19],20],[[[6,[[8,[1]]]],19],[[20,[35]]]],[[[6,[[47,[24]]]],19],[[20,[35]]]],[[[6,[37]],19],[[20,[35]]]],[[[6,[[13,[78,78]]]],19],[[20,[35]]]],[[[6,[[8,[1]]]],19],[[20,[35]]]],[[[6,[[47,[24]]]],19],[[20,[35]]]],[[[6,[37]],19],[[20,[35]]]],[[[6,[[13,[78,78]]]],19],[[20,[35]]]],[77,[[41,[77]]]],[1,[[29,[1]]]],[[[6,[[8,[1]]]],19],[[20,[17]]]],[[[6,[12]],19],[[20,[17]]]],[[[6,[[47,[24]]]],19],[[20,[17]]]],[[[6,[37]],19],[[20,[17]]]],[[[6,[[29,[1]]]],19],[[20,[17]]]],[[[6,[[13,[79,79]]]],19],[[20,[17]]]],[[[6,[[31,[79]]]],19],[[20,[17]]]],[[[6,[[8,[1]]]],19],[[20,[35]]]],[[[6,[[47,[24]]]],19],[[20,[35]]]],[[[6,[37]],19],[[20,[35]]]],[[[6,[[13,[78,78]]]],19],[[20,[35]]]],[[18,19],20],[[],30],[2,[[13,[1,2]]]],[[[0,[1,18]],[0,[1,18]]],[[63,[[0,[1,18]],[0,[1,18]]]]]],[72,64],[72,70],[[[8,[1]]]],[12],[[[47,[24]]]],[37],[[[13,[79,79]]]],[[[6,[[8,[1]]]]],35],[[[6,[[47,[24]]]]],35],[[[6,[37]]],35],[[[6,[[13,[78,78]]]]],35],[[[6,[[57,[1]]]]],17],[[[6,[[58,[24]]]]],17],[[],[[9,[1]]]],[[2,10],[[21,[2,1,10]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],80],[2,[[46,[2]]]],[2,[[47,[2]]]],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[24,24],[[65,[24,24]]]],[[24,24,24],[[66,[24,24,24]]]],[[24,24,24,24],[[67,[24,24,24,24]]]],[[24,24,24,24,24],[[68,[24,24,24,24,24]]]],[72,44],[24,[[58,[24]]]],[[6,19],[[20,[35]]]],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],20],[[6,19],[[20,[[17,[35]]]]]],[[6,19],[[20,[[17,[35]]]]]],[[6,19],[[20,[[17,[35]]]]]],[[6,19],[[20,[[17,[35]]]]]],[[6,19],[[20,[[17,[35]]]]]],[[6,19],[[20,[[17,[35]]]]]],[[18,19],[[20,[35]]]],[[[0,[24,18]],[0,[24,18]]],[[69,[[0,[24,18]],[0,[24,18]]]]]],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[[],81],[2,[[22,[2]]]],[[2,10],[[55,[2,10]]]],0,0,0,0,0,0,0,[82],[[]],[[]],[[]],[[]],[[83,38],84],[[]],[[]],[[]],[[]],[[]],[82,34],[[[6,[82]],19],20],[[[0,[1,3]]],[[35,[82,85]]]],[[],35],[[],35],[[],35],[[],35],[[6,19],20],[[],81],[[],81],0,0,0,0,0,0,0,0,[[86,86],86],[[86,86]],[86,87],[86,87],[86,87],[86,88],[86,89],[86,90],[[]],[[]],[91,[[35,[86,92]]]],[[]],[[]],[[86,86],[[17,[86]]]],[[86,93],[[17,[86]]]],[[86,93],[[17,[86]]]],[[86,86],[[17,[86]]]],[86,86],[[]],[[86,86],94],[95,[[35,[86,92]]]],[[],86],[96,[[35,[86]]]],[[86,93],86],[[86,93]],[[86,86],89],[[86,86],90],[[86,89],86],[[86,90],86],[[86,97],[[35,[98]]]],[[86,86],34],[[86,38],[[35,[39]]]],[[]],[[]],[88,86],[88,86],[88,86],[88,86],[89,86],[90,86],[[[0,[99,2]],100],88],[[86,101]],[[]],[[]],[[]],[86,34],[[86,93],86],[[86,93]],[[86,89],86],[[86,90],86],[[88,93],86],[[86,86],[[17,[94]]]],[[[6,[102]],19],20],[[86,86],86],[[86,93],86],[[86,86],86],[[86,103],35],[86,102],[[86,86],86],[[86,86]],[86,93],[86,93],[86,93],[104,86],[104,86],[[]],[[],35],[[],35],[89,[[35,[86,105]]]],[90,[[35,[86,105]]]],[[],35],[[],35],[[],81],[[],81]],"c":[],"p":[[8,"Future"],[8,"Sized"],[8,"Send"],[3,"Global"],[3,"Box"],[3,"Pin"],[3,"Flatten"],[3,"FlattenStream"],[3,"Fuse"],[8,"FnOnce"],[3,"Inspect"],[3,"IntoStream"],[4,"Either"],[3,"Map"],[3,"MapInto"],[3,"NeverError"],[4,"Option"],[8,"Unpin"],[3,"Context"],[4,"Poll"],[3,"Then"],[3,"UnitError"],[3,"AbortHandle"],[8,"TryFuture"],[3,"AndThen"],[3,"Pending"],[8,"Clone"],[3,"OptionFuture"],[3,"PollImmediate"],[3,"Ready"],[3,"Abortable"],[3,"Aborted"],[3,"LocalFutureObj"],[15,"bool"],[4,"Result"],[3,"ErrInto"],[3,"FlattenSink"],[3,"Formatter"],[3,"Error"],[3,"FutureObj"],[3,"PollFn"],[8,"Debug"],[3,"JoinAll"],[3,"TryJoinAll"],[3,"IntoFuture"],[3,"TryFlatten"],[3,"TryFlattenStream"],[3,"OrElse"],[3,"OkInto"],[3,"InspectOk"],[3,"InspectErr"],[3,"MapOk"],[3,"MapErr"],[3,"MapOkOrElse"],[3,"UnwrapOrElse"],[3,"Lazy"],[4,"MaybeDone"],[4,"TryMaybeDone"],[3,"Join"],[3,"Join3"],[3,"Join4"],[3,"Join5"],[3,"Select"],[3,"SelectAll"],[3,"TryJoin"],[3,"TryJoin3"],[3,"TryJoin4"],[3,"TryJoin5"],[3,"TrySelect"],[3,"SelectOk"],[3,"AbortRegistration"],[8,"IntoIterator"],[3,"Vec"],[8,"FusedFuture"],[8,"FusedStream"],[8,"UnsafeFutureObj"],[8,"FnMut"],[8,"Sink"],[8,"Stream"],[3,"String"],[3,"TypeId"],[3,"JoinableAsyncTaskRef"],[4,"Error"],[6,"Result"],[15,"str"],[3,"Duration"],[15,"u128"],[15,"u64"],[15,"f32"],[15,"f64"],[8,"BorrowDecoder"],[4,"DecodeError"],[15,"u32"],[4,"Ordering"],[8,"Decoder"],[8,"Deserializer"],[8,"Encoder"],[4,"EncodeError"],[8,"Hash"],[8,"BuildHasher"],[8,"Hasher"],[3,"Sleep"],[8,"Serializer"],[8,"Iterator"],[3,"TryFromFloatSecsError"],[8,"FutureExt"],[8,"TryFutureExt"]]},\ "e1000":{"doc":"","t":"DRRLLLFLLLLLLLALLLLDLLMMMFLMMLMMMMMMMMMMMMFMMMMMLLLL","n":["E1000Nic","E1000_DEV","INTEL_VEND","borrow","borrow_mut","from","get_e1000_nic","init","init_interrupts","into","mac_address","receive","send","spoof_mac","test_e1000_driver","try_from","try_into","type_id","vzip","arp_packet","borrow","borrow_mut","dest1","dest2","dest3","dhcp_request_packet","from","h_type","hlen","into","oper","p_type","packet_type","plen","sha1","sha2","sha3","source1","source2","source3","spa1","spa2","test_e1000_nic_driver","tha1","tha2","tha3","tpa1","tpa2","try_from","try_into","type_id","vzip"],"q":[[0,"e1000"],[19,"e1000::test_e1000_driver"]],"d":["Struct representing an e1000 network interface card.","","","","","Returns the argument unchanged.","Returns a reference to the E1000Nic wrapped in a …","Initializes the new E1000 network interface card that is …","Initializes the interrupt handler and enables interrupts …","Calls U::from(self).","Returns the MAC address.","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,15,15,15,15,15,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,15,15,15,15,15,15,15,15,15],"f":[0,0,0,[[]],[[]],[[]],[[],[[3,[[2,[1]]]]]],[4,[[6,[[2,[1]],5]]]],[[1,[8,[7]]],[[6,[5]]]],[[]],[1,[[10,[9]]]],[1,[[3,[11]]]],[[1,12]],[[1,[10,[9]]]],0,[[],6],[[],6],[[],13],[[]],0,[[]],[[]],0,0,0,[[],[[6,[5]]]],[[]],0,0,[[]],0,0,0,0,0,0,0,0,0,0,0,0,[[[3,[14]]]],0,0,0,0,0,[[],6],[[],6],[[],13],[[]]],"c":[],"p":[[3,"E1000Nic"],[6,"IrqSafeMutex"],[4,"Option"],[3,"PciDevice"],[15,"str"],[4,"Result"],[3,"NetworkInterface"],[3,"Arc"],[15,"u8"],[15,"array"],[3,"ReceivedFrame"],[3,"TransmitBuffer"],[3,"TypeId"],[15,"u64"],[3,"arp_packet"]]},\ "early_printer":{"doc":"A basic ASCII text printer for early text output to a …","t":"DLLMLMFLLMOLOMFLLLML","n":["EarlyFramebufferPrinter","borrow","borrow_mut","format","from","height","init","into","into_mapping","paddr","print","print_char","println","stride","take","try_from","try_into","type_id","width","write_str"],"q":[[0,"early_printer"]],"d":["A text printer for writing characters to an early …","","","The format of this framebuffer.","Returns the argument unchanged.","The height in pixels of the framebuffer.","Initializes a simple graphical framebuffer for early text …","Calls U::from(self).","Returns the memory mapping for the underlying framebuffer, …","The starting physical address of the framebuffer.","Prints the formatted output to the early framebuffer …","Prints the given character to the current location in this …","Prints the formatted output with an appended newline (‘\\\\n…","The stride in pixels of the framebuffer.","De-initializes and returns the early graphical framebuffer,","","","","The width in pixels of the framebuffer.",""],"i":[0,6,6,6,6,6,0,6,6,6,0,6,0,6,0,6,6,6,6,6],"f":[0,[[]],[[]],0,[[]],0,[[1,[3,[2]]],[[5,[4]]]],[[]],[6,[[3,[[9,[7,8]]]]]],0,0,[[6,10,7,7]],0,0,[[],[[3,[6]]]],[[],5],[[],5],[[],11],0,[[6,4],12]],"c":[],"p":[[3,"FramebufferInfo"],[3,"PageTable"],[4,"Option"],[15,"str"],[4,"Result"],[3,"EarlyFramebufferPrinter"],[15,"u32"],[3,"Mutable"],[3,"BorrowedSliceMappedPages"],[15,"char"],[3,"TypeId"],[6,"Result"]],"a":{"clean up":[14],"deinit":[14]}},\ -"early_tls":{"doc":"Handles initialization of TLS data images during early OS …","t":"FFF","n":["drop","insert","reload"],"q":[[0,"early_tls"]],"d":["Clears the early TLS image","Insert the current early TLS image with the given …","Loads the existing (previously-initialized) early TLS …"],"i":[0,0,0],"f":[[[]],[1],[[]]],"c":[],"p":[[3,"TlsDataImage"]]},\ +"early_tls":{"doc":"Handles initialization of TLS data images during early OS …","t":"FFF","n":["drop","insert","reload"],"q":[[0,"early_tls"]],"d":["Clears the early TLS image","Insert the current early TLS image with the given …","Loads the existing (previously-initialized) early TLS …"],"i":[0,0,0],"f":[[[]],[1],[[]]],"c":[],"p":[[6,"TlsDataImage"]]},\ "environment":{"doc":"","t":"DENNGLLLLLLLLLLLLLLLLLLLLLLMM","n":["Environment","Error","NotADirectory","NotFound","Result","borrow","borrow","borrow_mut","borrow_mut","chdir","cwd","default","fmt","from","from","get","into","into","set","to_string","try_from","try_from","try_into","try_into","type_id","type_id","unset","variables","working_dir"],"q":[[0,"environment"]],"d":["A structure that contains environment state for a given …","The error type for environment operations.","A filesystem node was, unexpectedly, not a directory.","A filesystem node wasn’t found.","A specialized Result type for environment operations.","","","","","Changes the current working directory.","Returns the absolute file path of the current working …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the value of the environment variable with the …","Calls U::from(self).","Calls U::from(self).","Sets an environment variable with the given key and value.","","","","","","","","Unsets the environment variable with the given key.","","The “current working directory”, i.e., where a task’…"],"i":[0,0,5,5,0,1,5,1,5,1,1,1,5,1,5,1,1,5,1,5,1,5,1,5,1,5,1,1,1],"f":[0,0,0,0,0,[[]],[[]],[[]],[[]],[[1,2],3],[1,4],[[],1],[[5,6],7],[[]],[[]],[[1,8],[[9,[4]]]],[[]],[[]],[[1,4,4]],[[],4],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[1,8]],0,0],"c":[],"p":[[3,"Environment"],[3,"Path"],[6,"Result"],[3,"String"],[4,"Error"],[3,"Formatter"],[6,"Result"],[15,"str"],[4,"Option"],[4,"Result"],[3,"TypeId"]],"a":{"change":[9],"current":[10],"dir":[10],"getcwd":[10],"remove_var":[26],"set_var":[18],"var":[15],"working":[10]}},\ "event_types":{"doc":"","t":"ENNDNDNNNLLLLLLLLLLLLMLMLLLMLLLMLLLMMLLLLMMMLLLLLLLLLLLL","n":["Event","ExitEvent","KeyboardEvent","KeyboardInputEvent","MouseMovementEvent","MousePositionEvent","MousePositionEvent","OutputEvent","WindowResizeEvent","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coordinate","default","fifth_button_hold","fmt","fmt","fmt","fourth_button_hold","from","from","from","gcoordinate","into","into","into","key_event","left_button_hold","new","new_keyboard_event","new_output_event","new_window_resize_event","right_button_hold","scrolling_down","scrolling_up","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"event_types"]],"d":["","","An input event from a keyboard","A keyboard event, indicating that one or more keys were …","An input event from a mouse","An event describing mouse position rather than movement …","The event tells application about mouse’s position …","An event indicating that another entity wants to print the …","Tells an application that the window manager has resized …","","","","","","","","","","","","","the relative position in window","","whether the fifth button holds","","","","whether the fourth button holds","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","the global position in window","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The key input event from i/o device","whether the left button holds","Create a new key board input event. key is the key input …","Create a new keyboard event","Create a new output event","Create a new window resize event","whether the right button holds","whether the mouse is scrolling down","whether the mouse is scrolling up","","","","","","","","","","","",""],"i":[0,2,2,0,2,0,2,2,2,1,2,3,1,2,3,1,2,3,1,2,3,1,1,1,1,2,3,1,1,2,3,1,1,2,3,3,1,3,2,2,2,1,1,1,1,2,3,1,2,3,1,2,3,1,2,3],"f":[0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[[]],[[]],[[]],0,[[],1],0,[[1,4],5],[[2,4],5],[[3,4],5],0,[[]],[[]],[[]],0,[[]],[[]],[[]],0,0,[6,3],[6,2],[[[8,[7]]],2],[9,2],0,0,0,[[]],[[]],[[]],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[],11]],"c":[],"p":[[3,"MousePositionEvent"],[4,"Event"],[3,"KeyboardInputEvent"],[3,"Formatter"],[6,"Result"],[3,"KeyEvent"],[3,"String"],[8,"Into"],[3,"Rectangle"],[4,"Result"],[3,"TypeId"]]},\ "exceptions_early":{"doc":"Early exception handlers that do nothing but print an …","t":"HFF","n":["EARLY_IDT","double_fault_handler","init"],"q":[[0,"exceptions_early"]],"d":["An initial Interrupt Descriptor Table (IDT) with only very …","exception 0x08","Initializes an early IDT with a basic set of early …"],"i":[0,0,0],"f":[0,[[1,2],3],[[[5,[4]]]]],"c":[],"p":[[3,"InterruptStackFrame"],[15,"u64"],[15,"never"],[3,"VirtualAddress"],[4,"Option"]]},\ @@ -79,6 +79,7 @@ var searchIndex = JSON.parse('{\ "keyboard":{"doc":"A basic driver for a keyboard connected to the legacy PS/2 …","t":"F","n":["init"],"q":[[0,"keyboard"]],"d":["Initialize the PS/2 keyboard driver and register its …"],"i":[0],"f":[[[1,[3,[2]]],[[5,[4]]]]],"c":[],"p":[[3,"PS2Keyboard"],[4,"Event"],[3,"Queue"],[15,"str"],[4,"Result"]]},\ "keycodes_ascii":{"doc":"","t":"NSSNNNNNNNSSSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNREDDENNNNNNNNNSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSSSSSNNNNNNNNNNNNNNNNNNNNMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLFLLLLLLLLLLLLLLLLLLLLL","n":["A","ALT","ALT_GR","Alt","AltReleased","B","Backslash","Backspace","Backtick","C","CAPS_LOCK","CONTROL_LEFT","CONTROL_RIGHT","CapsLock","Comma","Control","ControlReleased","D","Delete","Down","E","End","Enter","Equals","Escape","F","F1","F10","F11","F12","F2","F3","F4","F5","F6","F7","F8","F9","G","H","Home","I","Insert","J","K","KEY_RELEASED_OFFSET","KeyAction","KeyEvent","KeyboardModifiers","Keycode","L","Left","LeftBracket","LeftShift","LeftShiftReleased","M","Menu","Minus","N","NUM_LOCK","NonUsBackslash","Num0","Num1","Num2","Num3","Num4","Num5","Num6","Num7","Num8","Num9","NumLock","O","OverflowError","P","Pad5","PadMinus","PadMultiply","PadPlus","PageDown","PageUp","Pause","Period","Pressed","Q","Quote","R","Released","Right","RightBracket","RightShift","RightShiftReleased","S","SCROLL_LOCK","SHIFT_LEFT","SHIFT_RIGHT","SUPER_KEY_LEFT","SUPER_KEY_RIGHT","ScrollLock","Semicolon","Slash","Space","SuperKeyLeft","SuperKeyLeftReleased","SuperKeyRight","SuperKeyRightReleased","T","Tab","U","Unknown1","Unknown2","Unknown3","Up","V","W","X","Y","Z","action","all","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","cmp","complement","contains","default","difference","empty","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","insert","intersection","intersects","into","into","into","into","is_all","is_alt","is_alt_gr","is_caps_lock","is_control","is_empty","is_letter","is_num_lock","is_scroll_lock","is_shift","is_super_key","keycode","modifiers","new","new","not","partial_cmp","remove","scancode_to_ascii","set","sub","sub_assign","symmetric_difference","to_ascii","toggle","try_from","try_from","try_from","try_from","try_from","try_from_primitive","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","union"],"q":[[0,"keycodes_ascii"]],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The offset that a keyboard adds to the scancode to …","Whether a keyboard event was a key press or a key released.","The KeyEvent that should be delivered to applications upon …","The set of modifier keys that can be held down while other …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if the Alt key is held down.","Returns true if the AltGr key is held down.","Returns true if the Caps Lock key is held down.","Returns true if a Control key is held down (either left or …","Returns true if no flags are currently stored.","returns true if this keycode was a letter from A-Z","Returns true if the Num Lock key is held down.","Returns true if the Scroll Lock key is held down.","Returns true if a Shift key is held down (either left or …","Returns true if a Super key is held down (either left or …","","","Returns a new KeyboardModifiers struct with no keys …","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","convenience function for obtaining the ascii value for a …","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","Obtains the ascii value for a keycode under the given …","Toggles the specified flags in-place.","","","","","","","","","","","","","","","Returns the union of between the flags in self and other."],"i":[5,1,1,5,5,5,5,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,5,5,5,3,5,5,5,5,5,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,3,4,5,1,3,4,5,1,3,4,5,1,1,1,1,1,1,1,3,5,1,1,1,1,1,1,3,4,5,1,3,4,5,1,1,1,1,1,1,1,1,1,3,4,5,1,1,1,1,1,1,5,1,1,1,1,4,4,1,4,1,1,1,0,1,1,1,1,5,1,1,3,4,5,5,5,1,3,4,5,1,3,4,5,1],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[1,1],1],[[1,1]],[[1,1],1],[[1,1]],[1,2],[[1,1],1],[[1,1]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[3,3],[4,4],[5,5],[[1,1],6],[1,1],[[1,1],7],[[],1],[[1,1],1],[[],1],[[1,1],7],[[3,3],7],[[5,5],7],[[1,8]],[[1,9],10],[[1,9],10],[[1,9],10],[[1,9],10],[[1,9],10],[[3,9],10],[[4,9],10],[[5,9],10],[[]],[[]],[[]],[[]],[2,[[11,[1]]]],[2,1],[2,1],[8,1],[[1,12]],[[1,1]],[[1,1],1],[[1,1],7],[[]],[[]],[[]],[[]],[1,7],[1,7],[1,7],[1,7],[1,7],[1,7],[5,7],[1,7],[1,7],[1,7],[1,7],0,0,[[],1],[[5,3,1],4],[1,1],[[1,1],[[11,[6]]]],[[1,1]],[[1,13],[[11,[14]]]],[[1,1,7]],[[1,1],1],[[1,1]],[[1,1],1],[[5,1],[[11,[14]]]],[[1,1]],[[],15],[[],15],[[],15],[13,[[15,[5,[16,[5]]]]]],[[],15],[[],[[15,[5,[16,[5]]]]]],[[],15],[[],15],[[],15],[[],15],[[],17],[[],17],[[],17],[[],17],[[1,1],1]],"c":[],"p":[[3,"KeyboardModifiers"],[15,"u16"],[4,"KeyAction"],[3,"KeyEvent"],[4,"Keycode"],[4,"Ordering"],[15,"bool"],[8,"IntoIterator"],[3,"Formatter"],[6,"Result"],[4,"Option"],[8,"Hasher"],[15,"u8"],[15,"char"],[4,"Result"],[3,"TryFromPrimitiveError"],[3,"TypeId"]]},\ "libterm":{"doc":"A basic terminal emulator library.","t":"RRNEDLLLLLAMLLLLLLLLLLLLLLLLLLLLLLLLLLLMDLLLLLLLLLLMLLLLLLLLM","n":["FONT_BACKGROUND_COLOR","FONT_FOREGROUND_COLOR","OffEndBound","ScrollError","Terminal","borrow","borrow","borrow_mut","borrow_mut","clear","cursor","cursor","display_cursor","from","from","get_cursor_offset_from_end","get_event","get_text_dimensions","insert_char","into","into","move_screen_line_down","move_screen_line_up","move_screen_page_down","move_screen_page_up","move_screen_to_begin","move_screen_to_end","new","print_to_terminal","refresh_display","remove_char","resize","try_from","try_from","try_into","try_into","type_id","type_id","update_cursor_pos","window","Cursor","blink","borrow","borrow_mut","default","disable","display","enable","from","into","offset_from_end","offset_from_end","reset","set_offset_from_end","set_underlying_char","show","try_from","try_into","type_id","underlying_char","underlying_char"],"q":[[0,"libterm"],[40,"libterm::cursor"]],"d":["","","Occurs when a index-calculation returns an index that is …","Error type for tracking different scroll errors that a …","An instance of a graphical terminal emulator.","","","","","Clear the scrollback buffer and reset the scroll positions.","","The cursor of the terminal.","Display the cursor of the terminal.","Returns the argument unchanged.","Returns the argument unchanged.","Gets the position of the cursor relative to the end of …","Gets an event from the window’s event queue.","Gets the width and height of the text displayable in …","Insert a character to the terminal.","Calls U::from(self).","Calls U::from(self).","Scroll the screen a line down.","Scroll the screen a line up.","Scroll the screen a page down.","Scroll the screen a page up.","Scroll the screen to the very beginning.","Scroll the screen to the very end.","Creates a new terminal and adds it to the window manager …","Adds a string to be printed to the terminal to the …","Actually refresh the screen. Currently it’s expensive.","Remove a character from the terminal.","Resizes this terminal and its underlying text display and …","","","","","","","Updates the position of a cursor.","The terminal’s own window.","The cursor structure used in the terminal. A cursor is a …","Let a cursor blink. It is invoked in a loop.","","","","Disable a cursor","Display a cursor in a framebuffer","Enable a cursor","Returns the argument unchanged.","Calls U::from(self).","Gets the position of the cursor relative to the end of the …","The position of the cursor relative to the end of terminal …","Reset the state of the cursor as unseen","Sets the position of the cursor relative to the end of the …","Sets the character at the position of the cursor","Whether a cursor is seen","","","","Gets the character at the position of the cursor","The underlying character at the position of the cursor. It …"],"i":[0,0,17,0,0,17,1,17,1,1,0,1,1,17,1,1,1,1,1,17,1,1,1,1,1,1,1,1,1,1,1,1,17,1,17,1,17,1,1,1,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12],"f":[0,0,0,0,0,[[]],[[]],[[]],[[]],[1],0,0,[1,[[3,[2]]]],[[]],[[]],[1,4],[1,[[6,[5]]]],[1],[[1,7,4],[[3,[2]]]],[[]],[[]],[1,[[3,[2]]]],[1,[[3,[2]]]],[1,[[3,[2]]]],[1,[[3,[2]]]],[1,[[3,[2]]]],[1,[[3,[2]]]],[[],[[3,[1,2]]]],[[1,8]],[1,[[3,[2]]]],[[1,4],[[3,[2]]]],[[1,9],[[3,[2]]]],[[],3],[[],3],[[],3],[[],3],[[],10],[[],10],[[1,4,11]],0,0,[12,13],[[]],[[]],[[],12],[12],[[12,14,4,4,[16,[15]]],[[3,[9,2]]]],[12],[[]],[[]],[12,4],0,[12],[[12,4]],[[12,11]],[12,13],[[],3],[[],3],[[],10],[12,11],0],"c":[],"p":[[3,"Terminal"],[15,"str"],[4,"Result"],[15,"usize"],[4,"Event"],[4,"Option"],[15,"char"],[3,"String"],[3,"Rectangle"],[3,"TypeId"],[15,"u8"],[3,"Cursor"],[15,"bool"],[3,"Coord"],[8,"Pixel"],[3,"Framebuffer"],[4,"ScrollError"]]},\ +"local_storage_initializer":{"doc":"Logic for generating thread-local storage (TLS) and …","t":"DGGNIDDENNDGGLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Cls","ClsDataImage","ClsInitializer","InvalidVirtualAddress","LocalStorage","LocalStorageDataImage","LocalStorageInitializer","LocalStorageInitializerError","NoRemainingSpace","OverlapWithExistingSection","Tls","TlsDataImage","TlsInitializer","add_existing_static_section","add_new_dynamic_section","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_data","inherit","into","into","into","into","into","invalidate","new","new","set_as_current_cls","set_as_current_tls","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id"],"q":[[0,"local_storage_initializer"]],"d":["","","","The included virtual address calculated for a CLS/TLS …","","An initialized data image ready to be used by a CPU/new …","A “factory” that creates local storage data images.","Errors that may occur when adding sections to a …","There was insufficient space to insert a CLS/TLS section …","Inserting a CLS/TLS section at the included offset would …","","","","Add a CLS/TLS section that has pre-determined offset, e.g.,","Inserts the given section into this CLS/TLS area at the …","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns a new copy of the data image.","Inherits the data from another data image.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Invalidates the cached data image in this …","Creates an empty local storage initializer with no data …","Creates an empty data image.","Sets the data image.","Sets the data image.","","","","","","","","","","","","","","","",""],"i":[0,0,0,6,0,0,0,0,6,6,0,0,0,2,2,2,12,13,6,14,2,12,13,6,14,2,2,2,12,13,6,14,2,12,13,6,14,2,14,2,12,13,6,14,2,2,14,14,14,2,2,12,13,6,14,2,12,13,6,14,2,12,13,6,14],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,[[[2,[1]],3,4,4],[[7,[5,6]]]],[[[2,[1]],3,4],[[7,[6]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[2,[[0,[1,8]]]]],[[2,[[0,[1,8]]]]]],[[]],[[[2,[[0,[1,9]]]],10],11],[[12,10],11],[[13,10],11],[[6,10],11],[[[14,[[0,[1,9]]]],10],11],[[]],[[]],[[]],[[]],[[]],[[[2,[1]]],[[14,[1]]]],[[[14,[1]],[14,[1]]]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]]]],[[],[[2,[1]]]],[[],[[14,[1]]]],[[[14,[12]]]],[[[14,[13]]]],[[]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],15],[[],15],[[],15],[[],15],[[],15]],"c":[],"p":[[8,"LocalStorage"],[3,"LocalStorageInitializer"],[3,"LoadedSection"],[15,"usize"],[6,"StrongSectionRef"],[4,"LocalStorageInitializerError"],[4,"Result"],[8,"Clone"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[3,"Cls"],[3,"Tls"],[3,"LocalStorageDataImage"],[3,"TypeId"]]},\ "lockable":{"doc":"Traits for items that are “Lockable”, e.g., Mutexes.","t":"QQIIKKKKKKK","n":["Guard","GuardMut","Lockable","LockableSized","get_mut","into_inner","is_locked","lock","lock_mut","try_lock","try_lock_mut"],"q":[[0,"lockable"]],"d":["The immutable “guard” type returned by the Self::lock()…","The mutable “guard” type returned by the …","A trait representing types that can be locked, e.g., Mutex…","An extension of the Lockable trait that adds the …","Returns a mutable reference to the underlying data.","Consumes the lock, returning the underlying data.","Returns true if this lock is currently locked. ","Obtain the lock in a blocking fashion, returning an …","Obtain the lock in a blocking fashion, returning a mutable …","Attempt to obtain the lock in a non-blocking fashion, …","Attempt to obtain the lock in a non-blocking fashion, …"],"i":[3,3,0,0,3,4,3,3,3,3,3],"f":[0,0,0,0,[[]],[[]],[[],1],[[]],[[]],[[],2],[[],2]],"c":[],"p":[[15,"bool"],[4,"Option"],[8,"Lockable"],[8,"LockableSized"]]},\ "locked_idt":{"doc":"A simple wrapper struct around an x86_64 Interrupt …","t":"DLLLLLLLLLLL","n":["LockedIdt","borrow","borrow_mut","fmt","from","into","load","lock","new","try_from","try_into","type_id"],"q":[[0,"locked_idt"]],"d":["A thread-safe and interrupt-safe wrapper around …","","","","Returns the argument unchanged.","Calls U::from(self).","Obtains the lock on the inner IDT and loads it into the …","Obtains the lock on the inner IDT and returns a guard that …","Creates a new IDT filled with non-present entries.","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1],"f":[0,[[]],[[]],[[1,2],3],[[]],[[]],[1],[1,[[5,[4]]]],[[],1],[[],6],[[],6],[[],7]],"c":[],"p":[[3,"LockedIdt"],[3,"Formatter"],[6,"Result"],[3,"InterruptDescriptorTable"],[6,"IrqSafeMutexGuard"],[4,"Result"],[3,"TypeId"]]},\ "logger":{"doc":"A basic logger implementation for system-wide logging in …","t":"RRRFFFFFF","n":["DEFAULT_LOG_LEVEL","EARLY_LOG_BUFFER_SIZE","LOG_MAX_WRITERS","early_init","init","set_log_level","take_early_log_writers","write_fmt","write_str"],"q":[[0,"logger"]],"d":["By default, Theseus will print all log levels, including …","The size of the buffer used to save early log messages.","The maximum number of output streams that a logger can …","Initializes Theseus’s early system logger for use before …","Initialize the fully-featured Theseus system logger.","Set the log level, which determines whether a given log …","Removes all of the writers (output streams) from the early …","Convenience function for writing formatted arguments to …","Convenience function for writing a simple string to the …"],"i":[0,0,0,0,0,0,0,0,0],"f":[0,0,0,[[[2,[1]],3]],[[[2,[1]],3]],[1],[[],[[5,[[2,[4]]]]]],[6,7],[8,7]],"c":[],"p":[[4,"Level"],[4,"Option"],[8,"IntoIterator"],[3,"SerialPort"],[15,"array"],[3,"Arguments"],[6,"Result"],[15,"str"]]},\ @@ -91,7 +92,7 @@ var searchIndex = JSON.parse('{\ "memory_x86_64":{"doc":"This crate implements the virtual memory subsystem …","t":"QDIIQQQQIQQDKLLLLMKMFKMLLKLLFFMLLLLLKKKKKKKKMKKKKKMMFFLLLLLL","n":["AdditionalReservedMemoryRegions","AggregatedSectionMemoryBounds","BootInformation","ElfSection","ElfSection","ElfSections","MemoryRegion","MemoryRegions","Module","Module","Modules","SectionMemoryBounds","additional_reserved_memory_regions","borrow","borrow","borrow_mut","borrow_mut","data","elf_sections","end","find_section_memory_bounds","flags","flags","fmt","fmt","framebuffer_info","from","from","get_p4","get_vga_mem_addr","init","into","into","is_empty","is_empty","is_empty","kernel_end","len","len","len","memory_regions","modules","name","name","rodata","rsdp","stack_size","start","start","start","start","text","tlb_flush_all","tlb_flush_virt_addr","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"memory_x86_64"]],"d":["","The address bounds and flags of the initial kernel …","","","","","","","","","","The address bounds and mapping flags of a section’s …","Returns additional reserved memory regions that aren’t …","","","","","","Returns the kernel’s ELF sections.","The ending virtual address and physical address.","Finds the addresses in memory of the main kernel sections, …","Returns the section’s flags.","The page table entry flags that should be used for mapping …","","","Returns information about the graphical framebuffer, if …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the current top-level page table address.","Gets the physical memory occupied by vga.","","Calls U::from(self).","Calls U::from(self).","Returns whether the section is empty.","Returns whether the module is empty.","Returns whether the boot information is empty.","Returns the end of the kernel’s image in memory.","Returns the section’s length in memory, as opposed to …","Returns the module’s length.","Returns the boot information’s length.","Returns memory regions describing the physical memory.","Returns the modules found in the kernel image.","Returns the section’s name.","Returns the module’s name.","","Returns the RSDP if it was provided by the bootloader.","Returns the stack size in bytes.","Returns the section’s starting virtual address.","Returns the module’s starting physical address.","Returns the boot information’s starting virtual address.","The starting virtual address and physical address.","","Flushes the whole TLB. ","Flushes the specific virtual address in TLB. ","","","","","",""],"i":[3,0,0,0,3,3,3,3,0,3,3,0,3,6,9,6,9,9,3,6,0,17,6,6,9,3,6,9,0,0,9,6,9,17,18,3,3,17,18,3,3,3,17,18,9,3,3,17,18,3,6,9,0,0,6,9,6,9,6,9],"f":[0,0,0,0,0,0,0,0,0,0,0,0,[[],[[2,[1]]]],[[]],[[]],[[]],[[]],0,[[],[[2,[1]]]],0,[[3,4],[[2,[1]]]],[[],5],0,[[6,7],8],[[9,7],8],[[],[[11,[10]]]],[[]],[[]],[[],12],[[],[[2,[1]]]],0,[[]],[[]],[[],13],[[],13],[[],13],[[],[[2,[14,1]]]],[[],15],[[],15],[[],15],[[],[[2,[1]]]],[[]],[[],1],[[],[[2,[1,1]]]],0,[[],[[11,[12]]]],[[],[[2,[15,1]]]],[[],14],[[],12],[[],[[11,[14]]]],0,0,[[]],[14],[[],2],[[],2],[[],2],[[],2],[[],16],[[],16]],"c":[],"p":[[15,"str"],[4,"Result"],[8,"BootInformation"],[8,"Fn"],[3,"ElfSectionFlags"],[3,"SectionMemoryBounds"],[3,"Formatter"],[6,"Result"],[3,"AggregatedSectionMemoryBounds"],[3,"FramebufferInfo"],[4,"Option"],[3,"PhysicalAddress"],[15,"bool"],[3,"VirtualAddress"],[15,"usize"],[3,"TypeId"],[8,"ElfSection"],[8,"Module"]]},\ "mlx5":{"doc":"A mlx5 driver for a ConnectX-5 100GbE Network Interface …","t":"RRDRLLLFLLLLLLLL","n":["CONNECTX5_DEV","CONNECTX5_EX_DEV","ConnectX5Nic","MLX_VEND","borrow","borrow_mut","from","get_mlx5_nic","init","into","mac_address","send","send_fastpath","try_from","try_into","type_id"],"q":[[0,"mlx5"]],"d":["Device ID for the ConnectX-5 NIC","Device ID for the ConnectX-5-EX NIC","Struct representing a ConnectX-5 network interface card.","Vendor ID for Mellanox","","","Returns the argument unchanged.","Returns a reference to the NIC wrapped in a IrqSafeMutex, …","Initializes the new ConnectX-5 network interface card that …","Calls U::from(self).","Returns the MAC address of the physical function ","Adds a packet to be sent to the transmit queue and returns …","Adds a packet to be sent to the transmit queue.","","",""],"i":[0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1],"f":[0,0,0,0,[[]],[[]],[[]],[[],[[3,[[2,[1]]]]]],[[4,5,5,6],[[8,[[2,[1]],7]]]],[[]],[1,[[10,[9]]]],[[1,11],[[8,[7]]]],[[1,12,[13,[9]]]],[[],8],[[],8],[[],14]],"c":[],"p":[[3,"ConnectX5Nic"],[6,"IrqSafeMutex"],[4,"Option"],[3,"PciDevice"],[15,"usize"],[15,"u16"],[15,"str"],[4,"Result"],[15,"u8"],[15,"array"],[3,"TransmitBuffer"],[3,"PhysicalAddress"],[15,"slice"],[3,"TypeId"]]},\ "mlx_ethernet":{"doc":"This crate defines the layout of memory objects that make …","t":"DDDDDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAAALLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLFAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLANENNNNNNNNNNNNNNNNNNNNNEDDDENEDDEEENNNNNNNNNNNNNNNNNDENNNNNNNNNNNNNNNNENNNNNNNNNNNNNNEENNNENNNNENNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLNDENNNLLLLLLLLLLLLLLLLLLLNNDENLLLLLLLLLLLLLLLLLLLNNNDELLLLLLLLLLLLLLLLLLLLLDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Cqn","Eqn","FgId","FtId","Lkey","Pd","Rqn","Sqn","Td","Tirn","Tisn","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","command_queue","completion_queue","event_queue","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","initialization_segment","into","into","into","into","into","into","into","into","into","into","into","log_page_size","receive_queue","send_queue","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","work_queue","AccessRegister","AccessRegisterOpMod","AllocPd","AllocTransportDomain","AllocUar","AllocationFail","AllocationSuccess","BadBlockNumber","BadCommandType","BadIndex","BadInputLen","BadInputPointer","BadOp","BadOutputLen","BadOutputPointer","BadParam","BadPkt","BadResState","BadResource","BadResourceState","BadSize","BadSysState","BootPages","CmdState","Command","CommandBuilder","CommandCompletionStatus","CommandDeliveryStatus","CommandNotCompleted","CommandOpcode","CommandQueue","CommandQueueEntry","CommandQueueError","CommandReturnStatus","CommandTransportType","Completed","CreateCq","CreateEq","CreateFlowGroup","CreateFlowTable","CreateRq","CreateSq","CreateTir","CreateTis","EnableHca","EswVport","Ethernet","EthernetOffloadCapabilities","EthernetOffloadCapabilities","ExceedLim","GeneralDeviceCapabilities","GeneralDeviceCapabilities","HCACapabilities","HcaPortType","HcaReturnPages","IB","IncorrectCommandOpcode","InitHca","InitPages","Initialized","InputLenErr","InternalErr","InternalError","InvalidCommandDeliveryStatus","InvalidCommandOpcode","InvalidCommandReturnStatus","InvalidMailboxOffset","InvalidPortType","InvalidSQState","ManagePages","ManagePagesOpMod","MissingInput","MissingInputPages","ModifyNicVportContext","ModifyRq","ModifySq","NoCommandEntryAvailable","NoResources","NotImplemented","OK","OutputLenErr","PCIe","PageAllocationFailed","Posted","QueryHcaCap","QueryHcaCapCurrentOpMod","QueryHcaCapMaxOpMod","QueryIssi","QueryNicVportContext","QueryPages","QueryPagesOpMod","QueryRq","QuerySpecialContexts","QuerySq","QueryVportState","QueryVportStateOpMod","Read","RegularPages","ReservedNotZero","ResourceBusy","SetDriverVersion","SetFlowTableEntry","SetFlowTableRoot","SetIssi","SignatureErr","Success","TokenErr","UnimplementedOpcode","Uplink","VnicVport","Write","allocated_pages","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","collapsed_cq","complete","cqn","create","create_and_execute_command","db_page","default","eq","eq","eqn","flow_group_id","flow_table_id","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_command_status","get_cq_number","get_delivery_status","get_device_capabilities","get_eq_number","get_flow_group_id","get_flow_table_id","get_max_mtu","get_port_type","get_protection_domain","get_query_issi_command_output","get_query_pages_command_output","get_receive_queue_number","get_reserved_lkey","get_return_status","get_send_queue_number","get_sq_state","get_tir_context_number","get_tis_context_number","get_transport_domain","get_uar","get_vport_mac_address","get_vport_state","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","mtu","new","opmod","owned_by_hw","pd","post","queue_size","rqn","sqn","td","tirn","tisn","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from_primitive","try_from_primitive","try_from_primitive","try_from_primitive","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","uar","wait_for_command_completion","CompletionQueue","CompletionQueueDoorbellRecord","CompletionQueueEntry","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","check_packet_transmission","default","default","dump","dump","fmt","from","from","from","init","init","into","into","into","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","EventQueue","EventQueueEntry","borrow","borrow","borrow_mut","borrow_mut","default","dump","dump","fmt","from","from","init","init","into","into","try_from","try_from","try_into","try_into","type_id","type_id","Abort","InitializationSegment","InitializingState","NotAllowed","WaitingPermetion","WaitingResources","borrow","borrow","borrow_mut","borrow_mut","cmdq_entry_stride","device_is_initializing","fmt","from","from","into","into","num_cmdq_entries","set_physical_address_of_cmdq","try_from","try_from","try_into","try_into","type_id","type_id","Error","Ready","ReceiveQueue","ReceiveQueueState","Reset","borrow","borrow","borrow_mut","borrow_mut","create","fmt","from","from","into","into","refill","try_from","try_from","try_from","try_from_primitive","try_into","try_into","type_id","type_id","Error","Ready","Reset","SendQueue","SendQueueState","borrow","borrow","borrow_mut","borrow_mut","create","dump","fmt","from","from","into","into","nop","send","try_from","try_from","try_from","try_from_primitive","try_into","try_into","type_id","type_id","DoorbellRecord","WorkQueueEntryReceive","WorkQueueEntrySend","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","default","default","default","dump","dump","from","from","from","init","init","into","into","into","nop","send","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_buffer_info"],"q":[[0,"mlx_ethernet"],[140,"mlx_ethernet::command_queue"],[461,"mlx_ethernet::completion_queue"],[493,"mlx_ethernet::event_queue"],[515,"mlx_ethernet::initialization_segment"],[540,"mlx_ethernet::receive_queue"],[564,"mlx_ethernet::send_queue"],[590,"mlx_ethernet::work_queue"]],"d":["completion queue number","event queue number","flow group id","flow table id","","protection domain","receive queue number","send queue number","transport domain","transport interface receive number","transport interface send number","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Defines the Command Queue that is used to pass commands …","Completion Queues (CQ) are circular buffers used by the …","Event Queues (EQ) are circular buffers used by the HCA to …","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","This module defines the layout of the initialization …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Find the page size of the given num_bytes in units of 4KiB …","The Receive Queue (RQ) object holds the descriptor ring …","The Send Queue (SQ) object holds the descriptor ring used …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The Work Queue (WQ) contains a contiguous memory buffer …","","Possible values of the opcode modifer when the opcode is …","","","","","","","","","","","","","","","","","","","","","","The possible states a command can be in as it is updated …","A struct representing a Command Queue Entry in the Command …","Struct that makes it easier to pass the variety of …","","Return codes written by HW in the delivery status field of …","Trying to access the command entry before HW is done …","Command opcode written by SW in opcode field of the input …","A buffer of fixed-size entries that is used to pass …","Layout of a command passed to the NIC. The fields include …","Possible reasons for failure when executing a command","Command status written by HW in status field of the output …","Type of transport that carries the command.","The command has been processed by HW and output is ready …","","","","","","","","","","","","","","","","","The HCA capabilities are stored in this struct after being …","Possible values of the port type field returned when …","","Infiniband","Opcode value in the command entry is not what was expected","","","Command entries have been filled, but it is still owned by …","","","","Delivery status in the command entry is not a valid value","Opcode in the command entry is not a valid value","Return status in the command entry is not a valid value","Offset in a page is too large to map a …","The returned port type is not a valid value","The returned state of the SQ is invalid","","Possible values of the opcode modifer when the opcode is …","Any other input is not passed to a command that requires …","Allocated pages are not passed to a command that requires …","","","","All command entries are currently being used","","Some function has not been implemented for the given opcode","","","","A call to create a MappedPages failed","The command has been issued to the HW by ringing the …","","Possible values of the opcode modifer when the opcode is …","Possible values of the opcode modifer when the opcode is …","","","","Possible values of the opcode modifer when the opcode is …","","","","","Possible values of the opcode modifer when the opcode is …","","","","","","","","","","","","Initializing a comand entry for the given opcode has not …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Polls a completion bit until the command has been …","","Create a command queue object.","Find an command queue entry that is not in use","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the status of command delivery. This only informs …","Get the device capabilities, which is the output of the …","","","","Get the maximum value the MTU can be set to, which is the …","Get the number of pages requested by the NIC, which is the …","Get the protection domain number, which is the output of …","Get the current ISSI version and the supported ISSI …","Get the number of pages requested by the NIC, which is the …","","Get the value of the reserved Lkey for Base Memory …","Returns the status of command execution. A None returned …","","","","","Get the transport domain number, which is the output of …","Get the User Access Region (UAR) number, which is the …","Get the port mac address, which is the output of the …","Get the Vport state in the format (max_tx_speed, …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Returns true if the command is currently under the …","","Posts an initialized command by ringing the doorbell in …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Waits for ownership bit to be cleared, and then returns …","A data structure that contains the CQ buffer and is used …","A structure containing information of recently-posted CQ …","The layout of an entry in the CQ buffer.","","","","","","","Checks if a packet is transmitted by comparing the …","","","Prints out all entries in the CQ","Prints out the fields of a CQE in the format used by other …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Creates a completion queue by mapping the buffer as a …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","A data structure that contains the EQ buffer and is used …","The layout of an entry in the EQ buffer.","","","","","","Prints out all entries in the EQ","Prints out the fields of an EQE in the format used by …","","Returns the argument unchanged.","Returns the argument unchanged.","Creates an event queue by mapping the buffer as a slice of …","","Calls U::from(self).","Calls U::from(self).","","","","","","","","The initialization segment is located at offset 0 of PCI …","The possible values of the initialization state of the …","","","","","","","","Returns the required stride of command queue entries …","Returns true if the device is still initializing, and …","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Returns the maximum number of entries that can be in the …","Sets the physical address of the command queue within the …","","","","","","","","","A data structure that contains the RQ ring of descriptors …","The possible states the RQ can be in.","","","","","","Creates a RQ by mapping the buffer as a slice of …","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Refills the receive queue by updating WQEs with new packet …","","","","","","","","","","","","A data structure that contains the SQ ring of descriptors …","The possible states the SQ can be in.","","","","","Creates a SQ by mapping the buffer as a slice of …","Prints out all entries in the SQ","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Perform all the steps to complete a NOP: initialize the …","Perform all the steps to send a packet: initialize the …","","","","","","","","","The layout of a doorbell record in memory. A doorbell …","WQEs are built from multiple segments. In the case of …","WQEs are built from multiple segments. In the case of Send …","","","","","","","","","","Prints out the fields of a WQE in the format used by other …","Prints out the fields of a WQE in the format used by other …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","set a WQE to an initial state","set a WQE to an initial state","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Fill the control segment of the WQE to execute a NOP.","Fill the control, ethernet and data segments of the WQE to …","","","","","","","","","","Fill the data segment of the WQE to receive packets."],"i":[0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,0,0,0,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,0,20,0,20,20,20,59,59,35,35,36,36,35,36,36,35,36,36,36,36,36,36,36,60,0,0,0,0,0,32,0,0,0,0,0,0,34,20,20,20,20,20,20,20,20,20,61,37,21,22,36,21,22,0,0,59,37,32,20,60,34,35,35,36,32,32,32,32,32,32,20,0,32,32,20,20,20,32,36,32,36,35,62,32,34,20,0,0,20,20,20,0,20,20,20,20,0,23,60,35,36,20,20,20,20,35,35,35,32,61,61,23,17,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,20,21,22,23,20,21,22,23,17,24,17,25,25,17,26,20,34,17,17,17,35,20,36,37,38,26,39,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,25,25,26,25,25,25,25,25,25,25,25,25,25,25,26,25,25,25,25,25,25,25,25,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,17,17,17,26,17,24,17,17,17,17,17,17,20,21,22,23,62,32,59,60,61,24,17,25,35,35,20,20,36,36,21,22,23,37,37,34,38,26,39,35,20,36,37,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,17,25,0,0,0,43,44,45,43,44,45,43,44,45,43,44,44,43,44,45,43,44,43,44,45,43,44,45,43,44,45,43,44,45,0,0,48,47,48,47,47,48,47,47,48,47,48,47,48,47,48,47,48,47,48,47,63,0,0,63,63,63,63,31,63,31,31,31,31,63,31,63,31,31,31,63,31,63,31,63,31,52,52,0,0,52,51,52,51,52,51,52,51,52,51,52,51,51,52,52,52,51,52,51,52,54,54,54,0,0,53,54,53,54,53,53,54,53,54,53,54,53,53,53,54,54,54,53,54,53,54,0,0,0,56,57,58,56,57,58,56,57,58,57,58,56,57,58,57,58,56,57,58,57,57,56,57,58,56,57,58,56,57,58,58],"f":[0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[1,12],13],[[2,12],13],[[3,12],13],[[4,12],13],[[5,12],13],[[6,12],13],[[7,12],13],[[8,12],13],[[9,12],13],[[10,12],13],[[11,12],13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[14,14],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[17,[19,[18]]],17],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[20,20],[21,21],[22,22],[23,23],[[]],[[]],[[]],[[]],[17,17],[[24,25],24],[[17,3],17],[[[28,[26,27]],29],[[15,[25,30]]]],[[25,17,31],[[15,[24,32]]]],[[17,18],17],[[],26],[[20,20],33],[[34,34],33],[[17,7],17],[[17,11],17],[[17,10],17],[[35,12],13],[[20,12],13],[[36,12],13],[[37,12],13],[[38,12],13],[[26,12],13],[[39,12],13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[25,24],[[15,[38,32]]]],[[25,24],[[15,[32]]]],[26,[[15,[35,32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[26,[[15,[36,32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[17,40],17],[20,17],[[17,40],17],[26,33],[[17,4],17],[[24,31],24],[[17,14],17],[[17,1],17],[[17,2],17],[[17,5],17],[[17,8],17],[[17,9],17],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[14,[[15,[35,[41,[35]]]]]],[[],15],[14,[[15,[20,[41,[20]]]]]],[42,[[15,[36,[41,[36]]]]]],[[],15],[[],15],[[],15],[[],15],[42,[[15,[37,[41,[37]]]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],[[15,[35,[41,[35]]]]]],[[],[[15,[20,[41,[20]]]]]],[[],[[15,[36,[41,[36]]]]]],[[],[[15,[37,[41,[37]]]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[17,14],17],[[25,24]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[43,29,40]],[[],44],[[],45],[43],[[44,29]],[[44,12],13],[[]],[[]],[[]],[[46,29,46,3],[[15,[43,30]]]],[44],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],0,0,[[]],[[]],[[]],[[]],[[],47],[48],[[47,29]],[[47,12],13],[[]],[[]],[[46,29,7],[[15,[48,30]]]],[47],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[31,42],[31,33],[[31,12],13],[[]],[[]],[[]],[[]],[31,42],[[31,18],[[15,[30]]]],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],0,0,0,0,0,[[]],[[]],[[]],[[]],[[46,29,14,[50,[49]],1,6,43],[[15,[51,30]]]],[[52,12],13],[[]],[[]],[[]],[[]],[51,[[15,[30]]]],[[],15],[[],15],[42,[[15,[52,[41,[52]]]]]],[[],[[15,[52,[41,[52]]]]]],[[],15],[[],15],[[],16],[[],16],0,0,0,0,0,[[]],[[]],[[]],[[]],[[46,29,46,46,2,9,6],[[15,[53,30]]]],[53],[[54,12],13],[[]],[[]],[[]],[[]],[53,40],[[53,18,[55,[42]]],40],[[],15],[[],15],[42,[[15,[54,[41,[54]]]]]],[[],[[15,[54,[41,[54]]]]]],[[],15],[[],15],[[],16],[[],16],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],56],[[],57],[[],58],[[57,29]],[[58,29]],[[]],[[]],[[]],[57],[58],[[]],[[]],[[]],[[57,14,14]],[[57,14,14,14,18,[55,[42]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],[[58,14,18,14]]],"c":[],"p":[[3,"Rqn"],[3,"Sqn"],[3,"Cqn"],[3,"Pd"],[3,"Td"],[3,"Lkey"],[3,"Eqn"],[3,"Tirn"],[3,"Tisn"],[3,"FtId"],[3,"FgId"],[3,"Formatter"],[6,"Result"],[15,"u32"],[4,"Result"],[3,"TypeId"],[3,"CommandBuilder"],[3,"PhysicalAddress"],[3,"Vec"],[4,"CommandOpcode"],[4,"QueryHcaCapMaxOpMod"],[4,"QueryHcaCapCurrentOpMod"],[4,"AccessRegisterOpMod"],[3,"Command"],[3,"CommandQueue"],[3,"CommandQueueEntry"],[3,"Mutable"],[3,"BorrowedSliceMappedPages"],[15,"usize"],[15,"str"],[3,"InitializationSegment"],[4,"CommandQueueError"],[15,"bool"],[4,"CmdState"],[4,"CommandDeliveryStatus"],[4,"CommandReturnStatus"],[4,"HcaPortType"],[3,"CommandCompletionStatus"],[3,"HCACapabilities"],[15,"u16"],[3,"TryFromPrimitiveError"],[15,"u8"],[3,"CompletionQueue"],[3,"CompletionQueueEntry"],[3,"CompletionQueueDoorbellRecord"],[3,"MappedPages"],[3,"EventQueueEntry"],[3,"EventQueue"],[3,"ReceiveBuffer"],[3,"Queue"],[3,"ReceiveQueue"],[4,"ReceiveQueueState"],[3,"SendQueue"],[4,"SendQueueState"],[15,"slice"],[3,"DoorbellRecord"],[3,"WorkQueueEntrySend"],[3,"WorkQueueEntryReceive"],[4,"ManagePagesOpMod"],[4,"QueryPagesOpMod"],[4,"QueryVportStateOpMod"],[4,"CommandTransportType"],[4,"InitializingState"]]},\ -"mod_mgmt":{"doc":"","t":"NDNRNRDERRNRRNNNRNERNDDDRRDNRRDNREGDGDGGRRRRNNNDDNGDGLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLFLLLLFMMLMLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLLLLLLLLLLLLLFFLLLLLLMMLLFMLLLLLLLLLLLLLLLLLLLFLLLMMLLLLMLLLLMMMALLMMMFALMMMFLMMMLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLMLLFDLLLMLMMFLLLF","n":["AbsolutePath","AppCrateRef","Application","BSS_SECTION_NAME","Bss","CRATE_HASH_DELIMITER","CrateNamespace","CrateType","DATA_BSS_SECTION_FLAGS","DATA_SECTION_NAME","Data","EH_FRAME_SECTION_NAME","EXTRA_FILES_DIRECTORY_NAME","EhFrame","Executable","File","GCC_EXCEPT_TABLE_SECTION_NAME","GccExceptTable","IntoCrateObjectFile","KERNEL_TEXT_ADDR_RANGE","Kernel","LoadedCrate","LoadedSection","LoadedSectionInner","MODULE_PREFIX_DELIMITER","NAMESPACES_DIRECTORY_NAME","NamespaceDir","Prefix","RODATA_SECTION_FLAGS","RODATA_SECTION_NAME","RelocationEntry","Rodata","SECTION_HASH_DELIMITER","SectionType","Shndx","StrRef","StrongCrateRef","StrongDependency","StrongSectionRef","SymbolMap","TEXT_SECTION_FLAGS","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME","Text","TlsBss","TlsData","TlsDataImage","TlsInitializer","Userspace","WeakCrateRef","WeakDependent","WeakSectionRef","add_existing_static_tls_section","add_new_dynamic_tls_section","add_symbols","addend","as_func","as_ref","as_str","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_on_write","cmp","copy_section_data_to","crate_name","crate_name_as_prefix","crate_name_from_path","crate_name_without_hash","crate_names","crates_dependent_on_me","crates_i_depend_on","create_application_namespace","data_pages","data_sections","data_sections_iter","debug_symbols_file","default","default_namespace_name","deref","deref","deref","deserialize","dir","drop","drop","dump_symbol_map","dump_symbol_map_recursive","empty","empty","eq","eq","eq","eq","find_section","find_symbol_table","find_symbols_starting_with","find_symbols_starting_with_and_namespace","find_weak_dependent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_crate","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_elf_relocation","from_module_name","get_containing_crate_name","get_containing_crate_name_ranges","get_crate","get_crate_and_namespace","get_crate_containing_address","get_crate_object_file","get_crate_object_file_starting_with","get_crate_object_files_starting_with","get_crate_starting_with","get_crates_starting_with","get_data","get_file_and_dir_names_starting_with","get_file_starting_with","get_files_starting_with","get_function_section","get_hash","get_initial_kernel_namespace","get_namespaces_directory","get_section_containing_address","get_symbol","get_symbol_and_namespace","get_symbol_or_load","get_symbol_starting_with","get_tls_initializer_data","global","global_sections","global_sections_iter","hash","init","inner","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","invalidate","is_absolute","is_data_or_bss","is_tls","is_valid_crate_name_char","load_crate","load_crate_as_application","load_crates","mapped_pages","mapped_pages_offset","method_get_crate_object_file_starting_with","method_get_crate_object_files_starting_with","name","name","name","name_without_hash","new","new","new","object_file","offset","parent_crate","parse_nano_core","partial_cmp","recursive_namespace","reexported_symbols","relocation","relocation","replace_containing_crate_name","replace_nano_core_crates","rewrite_section_dependents","rodata_pages","section","section","section_name_str_ref","section_name_without_hash","sections","sections_dependent_on_me","sections_i_depend_on","serialize","set_as_current_tls_base","size","text_pages","tls_sections","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","typ","typ","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","virt_addr","with_dependencies","write_crate_object_file","write_relocation","NanoCoreItems","borrow","borrow_mut","from","init_symbol_values","into","nano_core_crate_ref","num_new_symbols","parse_nano_core","try_from","try_into","type_id","replace_nano_core_crates"],"q":[[0,"mod_mgmt"],[325,"mod_mgmt::parse_nano_core"],[337,"mod_mgmt::replace_nano_core_crates"]],"d":["An absolute path that points to the crate object file. ","An application crate that has been loaded into a …","","","A bss section is just like a data section, but is …","A crate’s name and its hash are separated by “-”, …","This struct represents a namespace of crates and their “…","The type of a crate, based on its object file naming …",".data and .bss sections are read-write and non-executable.","","A data section contains data that is both readable and …","","The name of the directory that contains all other “…","The .eh_frame section contains information about stack …","","A direct reference to the crate object file. This will be …","","A .gcc_except_table section contains landing pads for …","A type that can be converted into a crate object file.","The range of virtual addresses from which we allocate …","","Represents a single crate whose object file has been …","Represents a section that has been loaded and is part of a …","The parts of a LoadedSection that may be mutable, i.e., …","The Theseus Makefile appends prefixes onto bootloader …","The name of the directory that contains all of the …","A wrapper around a Directory reference that offers special …","A string prefix that will be used to search for the crate …",".rodata sections are read-only and non-executable.","","The information necessary to calculate and write a …","An rodata section contains read-only data, i.e., constants.","A section’s demangled name and its hash are separated by …","The possible types of sections that can be loaded from a …","A Section Header iNDeX (SHNDX), as specified by the ELF …","A wrapper around an Arc<str>: an immutable shared …","A Strong reference to a LoadedCrate.","A representation that the owner A of (a LoadedSection …","A Strong reference (Arc) to a LoadedSection.","A “symbol map” from a fully-qualified demangled symbol …",".text sections are read-only and executable.","","","","A text section contains executable code, i.e., functions. ","A .tbss section is a read-only section that holds all-zero …","A .tdata section is a read-only section that holds the …","An initialized TLS area data image ready to be used by a …","A “factory” that creates Thread-Local Storage (TLS) …","","A Weak reference to a LoadedCrate.","A representation that the section A in this struct depends …","A Weak reference (Weak) to a LoadedSection.","Add a TLS section that has pre-determined offset, e.g., …","Inserts the given section into this TLS area at the next …","Adds only global symbols in the given sections iterator to …","The value that is added to the source section’s address …","Reinterprets this section’s underlying MappedPages …","","Obtain a reference to the inner str.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Duplicates this CrateNamespace into a new CrateNamespace, …","","Copies the actual data contents of this LoadedSection to …","The name of this crate.","Returns this crate name as a symbol prefix, including a …","Returns the crate name that is derived from a crate object …","Returns the substring of this crate’s name that excludes …","Returns a list of all of the crate names currently loaded …","Currently may contain duplicates!","Returns the set of crates that this crate depends on. …","Create a new application CrateNamespace that uses the …","A tuple of:","The set of .data and .bss sections in this crate. The Shndx…","A convenience function to iterate over only the data …","The file that contains debug symbols for this crate. …","","Returns the string suffix for use as the name of the …","","","","","Returns the directory that this CrateNamespace is based on.","","","Simple debugging function that returns the entire symbol …","Same as dump_symbol_map(), but includes symbols from …","Creates an empty TLS initializer with no TLS data sections.","Creates an empty TLS data image with no TLS section …","","","","","Returns the first LoadedSection that matches the given …","Returns a reference to the symbol table in the given …","Returns a copied list of the corresponding LoadedSections …","Similar to find_symbols_starting_with, but also includes a …","Returns the index of the first WeakDependent object in …","","","","","","","","","","","","","","","Iterates over all crates in this namespace and calls the …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns a tuple of (CrateType, &str, &str) based on the …","Parses the given symbol string to try to find the name of …","Same as get_containing_crate_name(), but returns the …","Acquires the lock on this CrateNamespace’s crate list …","Acquires the lock on this CrateNamespace’s crate list …","Finds the crate that contains the given VirtualAddress in …","Gets the given object file based on its crate name prefix. ","Like get_crate_starting_with(), but for crate object files …","Like get_crates_starting_with(), but for crate object file…","Finds the LoadedCrate whose name starts with the given …","Finds the LoadedCrates whose names start with the given …","Returns a new copy of the TLS data image.","Returns the list of file and directory names in this …","Finds the single file in this directory whose name starts …","Returns the list of files in this Directory whose name …","Returns the LoadedSection of type SectionType::Text that …","","Returns a reference to the default kernel namespace, …","Returns the top-level directory that contains all of the …","Finds the section that contains the given VirtualAddress …","Finds the corresponding LoadedSection reference for the …","Like get_symbol(), but also returns the exact …","Finds the corresponding LoadedSection reference for the …","Returns a weak reference to the LoadedSection whose name …","Returns a new copy of this namespace’s initial TLS area, …","Whether or not this section’s symbol was exported …","The set of global symbols in this crate, including regular …","A convenience function to iterate over only the global …","","Initializes the module management system based on the …","The inner contents of a section that could possibly change …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Invalidates the cached data image in this TlsInitializer …","Returns true if the relocation type results in a …","Returns true if Data or Bss, otherwise false.","Returns true if TlsData or TlsBss, otherwise false.","Crate names must be only alphanumeric characters, an …","Loads the specified crate into memory, allowing it to be …","Loads the specified application crate into this …","This function first loads all of the given crates’ …","The MappedPages that cover this section.","The offset into the mapped_pages where this section starts","Same as get_crate_object_file_starting_with(), but is a …","Same as get_crate_object_files_starting_with(), but is a …","Returns the const &str name of this SectionType.","Returns the name of this CrateNamespace, which is just …","The full string name of this section, a fully-qualified …","Returns the substring of this section’s name that …","Create a new LoadedSection, with an empty dependencies …","Creates a new CrateNamespace that is completely empty (no …","Creates a new NamespaceDir that wraps the given DirRef.","The object file that this crate was loaded from.","The offset from the starting virtual address of the target …","The LoadedCrate object that contains/owns this section","Routines for parsing the nano_core, the fully-linked, …","","Returns the recursive namespace that this CrateNamespace …","The set of symbols that this crate’s global symbols are …","The details of the relocation action that was performed.","The details of the relocation action that was performed.","Replaces the old_crate_name substring in the given …","Routines for replacing the crates that comprise the …","Finds all of the weak dependents (sections that depend on …","A tuple of:","A strong reference to the LoadedSection B that the owner …","A weak reference to the LoadedSection A that depends on …","Returns the default name for the given SectionType as a …","Returns the substring of the given section’s name that …","A map containing all the sections in this crate. In …","The list of sections in foreign crates that depend on this …","The list of sections in foreign crates that this section …","","Sets the current CPU’s TLS register to point to this TLS …","The size in bytes of this section.","A tuple of:","The set of thread-local storage (TLS) symbols in this …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The type of this section, e.g., .text, .rodata, .data, .bss…","The type of relocation calculation that is performed to …","","","","","","","","","","","","","","","","The starting VirtualAddress of this section (except for …","Same as [new()](#method.new), but uses the given …","Insert the given crate object file based on its crate type …","Actually write the value of a relocation entry.","The items returned from the parse_nano_core() routine.","","","Returns the argument unchanged.","The symbols in the .init ELF section, which maps the symbol…","Calls U::from(self).","A reference to the newly-created nano_core crate.","The number of new symbols in the nano_core crate added to …","Parses and/or deserializes the file containing details …","","","","See the module-level documentation for how this works. "],"i":[40,0,29,0,14,0,0,0,0,0,14,0,0,14,29,40,0,14,0,0,29,0,0,0,0,0,0,40,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,29,0,0,0,1,1,7,17,2,11,11,11,11,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,11,1,14,15,16,17,18,11,1,14,15,16,17,18,7,11,2,20,20,0,20,7,20,20,0,20,20,20,20,28,29,11,30,18,14,7,20,30,7,7,1,34,11,29,14,17,20,0,7,7,2,11,11,1,34,20,2,2,29,14,15,16,17,40,18,7,11,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,17,29,0,0,7,7,7,18,7,7,7,7,1,18,18,18,20,11,0,0,7,7,7,7,7,7,2,20,20,11,0,2,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,1,17,14,14,0,7,7,7,2,2,7,7,14,7,2,2,2,7,18,20,17,2,0,11,7,20,15,16,0,0,7,20,15,16,0,2,20,28,28,14,34,2,20,20,11,1,14,15,16,17,18,11,2,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,2,17,11,1,34,20,2,29,14,28,15,16,17,40,30,7,18,2,2,18,0,0,63,63,63,63,63,63,63,0,63,63,63,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2,3,3],[[6,[[4,[2]],5]]]],[[1,2,3],[[6,[5]]]],[[7,8,9],3],0,[2,[[6,[10]]]],[11,10],[11,10],[11,[[13,[12]]]],[[]],[11,10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[11,11],[1,1],[14,14],[15,15],[16,16],[17,17],[18,18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[7,7],[[11,11],19],[[2,2],[[6,[10]]]],0,[20,21],[22,10],[20,10],[[7,9],[[23,[11]]]],[20,[[23,[[24,[20]],25]]]],[20,[[23,[[24,[20]],25]]]],[[[26,[[4,[7]]]]],[[6,[[4,[7]],10]]]],0,0,[20,27],0,[[],28],[29,10],[11],[30,31],[18,32],[33,[[6,[14]]]],[7,18],[20],[30],[7,21],[7,21],[[],1],[[],34],[[11,11],9],[[29,29],9],[[14,14],9],[[17,17],9],[[20,35],[[26,[[4,[2]]]]]],[36,[[6,[[13,[37]],10]]]],[[7,10],23],[[7,10],23],[[2,[4,[2]]],[[26,[3]]]],[[11,38],[[6,[39]]]],[[11,38],[[6,[39]]]],[[1,38],[[6,[39]]]],[[34,38],[[6,[39]]]],[[20,38],[[6,[39]]]],[[2,38],[[6,[39]]]],[[2,38],[[6,[39]]]],[[29,38],[[6,[39]]]],[[14,38],[[6,[39]]]],[[15,38],[[6,[39]]]],[[16,38],[[6,[39]]]],[[17,38],[[6,[39]]]],[[40,38],41],[[18,38],41],[[7,9,42]],[10,11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[44,[43]]],17],[10,[[6,[10]]]],[10,[[23,[10,25]]]],[10,[[23,[[45,[3]],25]]]],[[7,10],[[26,[31]]]],[[[4,[7]],10],26],[[7,46,9],[[26,[31]]]],[[18,10],[[26,[47]]]],[[[4,[7]],10],26],[[[4,[7]],10],23],[[[4,[7]],10],26],[[[4,[7]],10],23],[1,34],[[18,10],[[23,[21]]]],[[18,10],[[26,[47]]]],[[18,10],[[23,[47]]]],[[20,10],[[26,[[4,[2]]]]]],[[[0,[48,49]],50],43],[[],[[26,[[4,[7]]]]]],[[],[[26,[32]]]],[[7,46,9],26],[[7,10],51],[[7,10],26],[[7,10,[26,[7]],52,9],51],[[7,10],51],[7,34],0,0,[20,27],[[11,53]],[[[23,[54]],55],[[6,[[4,[7]],10]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1],[17,9],[14,9],[14,9],[56,9],[[7,47,[26,[7]],52,9],[[6,[10]]]],[[[4,[7]],47,52,9],[[6,[30,10]]]],[[7,27,[26,[7]],52,9],[[6,[10]]]],0,0,[[7,10],26],[[7,10],23],[14,10],[7,10],0,[2,10],[[14,11,[4,[[59,[57,58]]]],3,46,3,9,[24,[20]]],2],[[21,18,[26,[[4,[7]]]]],7],[32,18],0,0,0,0,[[11,11],[[26,[19]]]],[7,[[26,[[4,[7]]]]]],0,0,0,[[10,10,10],[[26,[21]]]],0,[[60,60,52],[[6,[10]]]],0,0,0,[14,11],[10,10],0,0,0,[[14,61],6],[34],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],21],[[],21],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],0,0,[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],[[],62],0,[[14,11,[4,[[59,[57,58]]]],3,46,3,9,[24,[20]],[23,[15,25]],[23,[16,25]]],2],[[18,10,[13,[12]]],[[6,[47,10]]]],[[17,[13,[12]],3,46,9],[[6,[10]]]],0,[[]],[[]],[[]],0,[[]],0,0,[[[4,[7]],57,57,57,9],[[6,[63]]]],[[],6],[[],6],[[],62],[[[4,[7]],31,52],[[6,[10]]]]],"c":[],"p":[[3,"TlsInitializer"],[3,"LoadedSection"],[15,"usize"],[3,"Arc"],[4,"TlsInitializerError"],[4,"Result"],[3,"CrateNamespace"],[8,"IntoIterator"],[15,"bool"],[15,"str"],[3,"StrRef"],[15,"u8"],[15,"slice"],[4,"SectionType"],[3,"StrongDependency"],[3,"WeakDependent"],[3,"RelocationEntry"],[3,"NamespaceDir"],[4,"Ordering"],[3,"LoadedCrate"],[3,"String"],[3,"Path"],[3,"Vec"],[3,"CowWeak"],[3,"Global"],[4,"Option"],[8,"Iterator"],[3,"LoadedSectionInner"],[4,"CrateType"],[3,"AppCrateRef"],[6,"StrongCrateRef"],[6,"DirRef"],[8,"Deserializer"],[3,"TlsDataImage"],[8,"Fn"],[3,"ElfFile"],[3,"Entry64"],[3,"Formatter"],[3,"Error"],[4,"IntoCrateObjectFile"],[6,"Result"],[8,"FnMut"],[15,"u64"],[3,"Rela"],[3,"Range"],[3,"VirtualAddress"],[6,"FileRef"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[6,"WeakSectionRef"],[6,"MmiRef"],[8,"Hasher"],[3,"BootloaderModule"],[3,"MemoryManagementInfo"],[15,"char"],[3,"MappedPages"],[3,"Spin"],[3,"Mutex"],[6,"StrongSectionRef"],[8,"Serializer"],[3,"TypeId"],[3,"NanoCoreItems"]]},\ +"mod_mgmt":{"doc":"","t":"NDNRNRNDERRNRRNNNRNERNDDDRRDNRRDNREGDGDGGRRRRNNNGGNGDGLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLFLLLLFMMLMLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLLLLLLLLLLLLFFLLLLLLMMLLFMLLLLLLLLLLLLLLLLFLLLMMLLLLMLLLLMMMALLMMMFALMMMFLMMMLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLMLLFDLLLMLMMFLLLF","n":["AbsolutePath","AppCrateRef","Application","BSS_SECTION_NAME","Bss","CRATE_HASH_DELIMITER","Cls","CrateNamespace","CrateType","DATA_BSS_SECTION_FLAGS","DATA_SECTION_NAME","Data","EH_FRAME_SECTION_NAME","EXTRA_FILES_DIRECTORY_NAME","EhFrame","Executable","File","GCC_EXCEPT_TABLE_SECTION_NAME","GccExceptTable","IntoCrateObjectFile","KERNEL_TEXT_ADDR_RANGE","Kernel","LoadedCrate","LoadedSection","LoadedSectionInner","MODULE_PREFIX_DELIMITER","NAMESPACES_DIRECTORY_NAME","NamespaceDir","Prefix","RODATA_SECTION_FLAGS","RODATA_SECTION_NAME","RelocationEntry","Rodata","SECTION_HASH_DELIMITER","SectionType","Shndx","StrRef","StrongCrateRef","StrongDependency","StrongSectionRef","SymbolMap","TEXT_SECTION_FLAGS","TEXT_SECTION_NAME","TLS_BSS_SECTION_NAME","TLS_DATA_SECTION_NAME","Text","TlsBss","TlsData","TlsDataImage","TlsInitializer","Userspace","WeakCrateRef","WeakDependent","WeakSectionRef","add_symbols","addend","as_func","as_ref","as_str","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_on_write","cls_sections","cmp","copy_section_data_to","crate_name","crate_name_as_prefix","crate_name_from_path","crate_name_without_hash","crate_names","crates_dependent_on_me","crates_i_depend_on","create_application_namespace","data_pages","data_sections","data_sections_iter","debug_symbols_file","default","default_namespace_name","deref","deref","deref","deserialize","dir","drop","drop","dump_symbol_map","dump_symbol_map_recursive","eq","eq","eq","eq","find_section","find_symbol_table","find_symbols_starting_with","find_symbols_starting_with_and_namespace","find_weak_dependent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_crate","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_elf_relocation","from_module_name","get_containing_crate_name","get_containing_crate_name_ranges","get_crate","get_crate_and_namespace","get_crate_containing_address","get_crate_object_file","get_crate_object_file_starting_with","get_crate_object_files_starting_with","get_crate_starting_with","get_crates_starting_with","get_file_and_dir_names_starting_with","get_file_starting_with","get_files_starting_with","get_function_section","get_hash","get_initial_kernel_namespace","get_namespaces_directory","get_section_containing_address","get_symbol","get_symbol_and_namespace","get_symbol_or_load","get_symbol_starting_with","get_tls_initializer_data","global","global_sections","global_sections_iter","hash","init","inner","into","into","into","into","into","into","into","into","into","into","into","into","into","is_absolute","is_data_or_bss","is_tls","is_valid_crate_name_char","load_crate","load_crate_as_application","load_crates","mapped_pages","mapped_pages_offset","method_get_crate_object_file_starting_with","method_get_crate_object_files_starting_with","name","name","name","name_without_hash","new","new","new","object_file","offset","parent_crate","parse_nano_core","partial_cmp","recursive_namespace","reexported_symbols","relocation","relocation","replace_containing_crate_name","replace_nano_core_crates","rewrite_section_dependents","rodata_pages","section","section","section_name_str_ref","section_name_without_hash","sections","sections_dependent_on_me","sections_i_depend_on","serialize","size","text_pages","tls_sections","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","typ","typ","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","virt_addr","with_dependencies","write_crate_object_file","write_relocation","NanoCoreItems","borrow","borrow_mut","from","init_symbol_values","into","nano_core_crate_ref","num_new_symbols","parse_nano_core","try_from","try_into","type_id","replace_nano_core_crates"],"q":[[0,"mod_mgmt"],[301,"mod_mgmt::parse_nano_core"],[313,"mod_mgmt::replace_nano_core_crates"]],"d":["An absolute path that points to the crate object file. ","An application crate that has been loaded into a …","","","A bss section is just like a data section, but is …","A crate’s name and its hash are separated by “-”, …","A .cls section is a read-only section that holds the …","This struct represents a namespace of crates and their “…","The type of a crate, based on its object file naming …",".data and .bss sections are read-write and non-executable.","","A data section contains data that is both readable and …","","The name of the directory that contains all other “…","The .eh_frame section contains information about stack …","","A direct reference to the crate object file. This will be …","","A .gcc_except_table section contains landing pads for …","A type that can be converted into a crate object file.","The range of virtual addresses from which we allocate …","","Represents a single crate whose object file has been …","Represents a section that has been loaded and is part of a …","The parts of a LoadedSection that may be mutable, i.e., …","The Theseus Makefile appends prefixes onto bootloader …","The name of the directory that contains all of the …","A wrapper around a Directory reference that offers special …","A string prefix that will be used to search for the crate …",".rodata sections are read-only and non-executable.","","The information necessary to calculate and write a …","An rodata section contains read-only data, i.e., constants.","A section’s demangled name and its hash are separated by …","The possible types of sections that can be loaded from a …","A Section Header iNDeX (SHNDX), as specified by the ELF …","A wrapper around an Arc<str>: an immutable shared …","A Strong reference to a LoadedCrate.","A representation that the owner A of (a LoadedSection …","A Strong reference (Arc) to a LoadedSection.","A “symbol map” from a fully-qualified demangled symbol …",".text sections are read-only and executable.","","","","A text section contains executable code, i.e., functions. ","A .tbss section is a read-only section that holds all-zero …","A .tdata section is a read-only section that holds the …","","","","A Weak reference to a LoadedCrate.","A representation that the section A in this struct depends …","A Weak reference (Weak) to a LoadedSection.","Adds only global symbols in the given sections iterator to …","The value that is added to the source section’s address …","Reinterprets this section’s underlying MappedPages …","","Obtain a reference to the inner str.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Duplicates this CrateNamespace into a new CrateNamespace, …","The set of CPU-local storage (CLS) symbols in this crate.","","Copies the actual data contents of this LoadedSection to …","The name of this crate.","Returns this crate name as a symbol prefix, including a …","Returns the crate name that is derived from a crate object …","Returns the substring of this crate’s name that excludes …","Returns a list of all of the crate names currently loaded …","Currently may contain duplicates!","Returns the set of crates that this crate depends on. …","Create a new application CrateNamespace that uses the …","A tuple of:","The set of .data and .bss sections in this crate. The Shndx…","A convenience function to iterate over only the data …","The file that contains debug symbols for this crate. …","","Returns the string suffix for use as the name of the …","","","","","Returns the directory that this CrateNamespace is based on.","","","Simple debugging function that returns the entire symbol …","Same as dump_symbol_map(), but includes symbols from …","","","","","Returns the first LoadedSection that matches the given …","Returns a reference to the symbol table in the given …","Returns a copied list of the corresponding LoadedSections …","Similar to find_symbols_starting_with, but also includes a …","Returns the index of the first WeakDependent object in …","","","","","","","","","","","","","Iterates over all crates in this namespace and calls the …","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns a tuple of (CrateType, &str, &str) based on the …","Parses the given symbol string to try to find the name of …","Same as get_containing_crate_name(), but returns the …","Acquires the lock on this CrateNamespace’s crate list …","Acquires the lock on this CrateNamespace’s crate list …","Finds the crate that contains the given VirtualAddress in …","Gets the given object file based on its crate name prefix. ","Like get_crate_starting_with(), but for crate object files …","Like get_crates_starting_with(), but for crate object file…","Finds the LoadedCrate whose name starts with the given …","Finds the LoadedCrates whose names start with the given …","Returns the list of file and directory names in this …","Finds the single file in this directory whose name starts …","Returns the list of files in this Directory whose name …","Returns the LoadedSection of type SectionType::Text that …","","Returns a reference to the default kernel namespace, …","Returns the top-level directory that contains all of the …","Finds the section that contains the given VirtualAddress …","Finds the corresponding LoadedSection reference for the …","Like get_symbol(), but also returns the exact …","Finds the corresponding LoadedSection reference for the …","Returns a weak reference to the LoadedSection whose name …","Returns a new copy of this namespace’s initial TLS area, …","Whether or not this section’s symbol was exported …","The set of global symbols in this crate, including regular …","A convenience function to iterate over only the global …","","Initializes the module management system based on the …","The inner contents of a section that could possibly change …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the relocation type results in a …","Returns true if Data or Bss, otherwise false.","Returns true if TlsData or TlsBss, otherwise false.","Crate names must be only alphanumeric characters, an …","Loads the specified crate into memory, allowing it to be …","Loads the specified application crate into this …","This function first loads all of the given crates’ …","The MappedPages that cover this section.","The offset into the mapped_pages where this section starts","Same as get_crate_object_file_starting_with(), but is a …","Same as get_crate_object_files_starting_with(), but is a …","Returns the const &str name of this SectionType.","Returns the name of this CrateNamespace, which is just …","The full string name of this section, a fully-qualified …","Returns the substring of this section’s name that …","Create a new LoadedSection, with an empty dependencies …","Creates a new CrateNamespace that is completely empty (no …","Creates a new NamespaceDir that wraps the given DirRef.","The object file that this crate was loaded from.","The offset from the starting virtual address of the target …","The LoadedCrate object that contains/owns this section","Routines for parsing the nano_core, the fully-linked, …","","Returns the recursive namespace that this CrateNamespace …","The set of symbols that this crate’s global symbols are …","The details of the relocation action that was performed.","The details of the relocation action that was performed.","Replaces the old_crate_name substring in the given …","Routines for replacing the crates that comprise the …","Finds all of the weak dependents (sections that depend on …","A tuple of:","A strong reference to the LoadedSection B that the owner …","A weak reference to the LoadedSection A that depends on …","Returns the default name for the given SectionType as a …","Returns the substring of the given section’s name that …","A map containing all the sections in this crate. In …","The list of sections in foreign crates that depend on this …","The list of sections in foreign crates that this section …","","The size in bytes of this section.","A tuple of:","The set of thread-local storage (TLS) symbols in this …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The type of this section, e.g., .text, .rodata, .data, .bss…","The type of relocation calculation that is performed to …","","","","","","","","","","","","","","The starting VirtualAddress of this section (except for …","Same as [new()](#method.new), but uses the given …","Insert the given crate object file based on its crate type …","Actually write the value of a relocation entry.","The items returned from the parse_nano_core() routine.","","","Returns the argument unchanged.","The symbols in the .init ELF section, which maps the symbol…","Calls U::from(self).","A reference to the newly-created nano_core crate.","The number of new symbols in the nano_core crate added to …","Parses and/or deserializes the file containing details …","","","","See the module-level documentation for how this works. "],"i":[37,0,27,0,11,0,11,0,0,0,0,11,0,0,11,27,37,0,11,0,0,27,0,0,0,0,0,0,37,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,0,0,27,0,0,0,1,14,5,8,8,8,8,8,17,5,27,26,11,12,13,14,37,28,1,15,8,17,5,27,26,11,12,13,14,37,28,1,15,8,11,12,13,14,15,8,11,12,13,14,15,1,17,8,5,17,17,0,17,1,17,17,0,17,17,17,17,26,27,8,28,15,11,1,17,28,1,1,8,27,11,14,17,0,1,1,5,8,8,17,5,5,27,11,12,13,14,37,15,1,8,8,17,5,27,26,11,12,13,14,37,28,1,15,14,27,0,0,1,1,1,15,1,1,1,1,15,15,15,17,8,0,0,1,1,1,1,1,1,5,17,17,8,0,5,8,17,5,27,26,11,12,13,14,37,28,1,15,14,11,11,0,1,1,1,5,5,1,1,11,1,5,5,5,1,15,17,14,5,0,8,1,17,12,13,0,0,1,17,12,13,0,5,17,26,26,11,5,17,17,8,11,12,13,14,15,8,5,8,17,5,27,26,11,12,13,14,37,28,1,15,8,17,5,27,26,11,12,13,14,37,28,1,15,5,14,8,17,5,27,26,11,12,13,14,37,28,1,15,5,5,15,0,0,61,61,61,61,61,61,61,0,61,61,61,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2,3],4],0,[5,[[7,[6]]]],[8,6],[8,6],[8,6],[8,[[10,[9]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,8],[11,11],[12,12],[13,13],[14,14],[15,15],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],0,[[8,8],16],[[5,5],[[7,[6]]]],0,[17,18],[19,6],[17,6],[[1,3],[[20,[8]]]],[17,[[20,[[21,[17]],22]]]],[17,[[20,[[21,[17]],22]]]],[[[24,[[23,[1]]]]],[[7,[[23,[1]],6]]]],0,0,[17,25],0,[[],26],[27,6],[8],[28,29],[15,30],[31,[[7,[11]]]],[1,15],[17],[28],[1,18],[1,18],[[8,8],3],[[27,27],3],[[11,11],3],[[14,14],3],[[17,32],[[24,[[23,[5]]]]]],[33,[[7,[[10,[34]],6]]]],[[1,6],20],[[1,6],20],[[5,[23,[5]]],[[24,[4]]]],[[8,35],[[7,[36]]]],[[8,35],[[7,[36]]]],[[17,35],[[7,[36]]]],[[5,35],[[7,[36]]]],[[5,35],[[7,[36]]]],[[27,35],[[7,[36]]]],[[11,35],[[7,[36]]]],[[12,35],[[7,[36]]]],[[13,35],[[7,[36]]]],[[14,35],[[7,[36]]]],[[37,35],38],[[15,35],38],[[1,3,39]],[[]],[6,8],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[41,[40]]],14],[6,[[7,[6]]]],[6,[[20,[6,22]]]],[6,[[20,[[42,[4]],22]]]],[[1,6],[[24,[29]]]],[[[23,[1]],6],24],[[1,43,3],[[24,[29]]]],[[15,6],[[24,[44]]]],[[[23,[1]],6],24],[[[23,[1]],6],20],[[[23,[1]],6],24],[[[23,[1]],6],20],[[15,6],[[20,[18]]]],[[15,6],[[24,[44]]]],[[15,6],[[20,[44]]]],[[17,6],[[24,[[23,[5]]]]]],[[[0,[45,46]],47],40],[[],[[24,[[23,[1]]]]]],[[],[[24,[30]]]],[[1,43,3],24],[[1,6],48],[[1,6],24],[[1,6,[24,[1]],49,3],48],[[1,6],48],[1,50],0,0,[17,25],[[8,51]],[[[20,[52]],53],[[7,[[23,[1]],6]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[14,3],[11,3],[11,3],[54,3],[[1,44,[24,[1]],49,3],[[7,[6]]]],[[[23,[1]],44,49,3],[[7,[28,6]]]],[[1,25,[24,[1]],49,3],[[7,[6]]]],0,0,[[1,6],24],[[1,6],20],[11,6],[1,6],0,[5,6],[[11,8,[23,[[57,[55,56]]]],4,43,4,3,[21,[17]]],5],[[18,15,[24,[[23,[1]]]]],1],[30,15],0,0,0,0,[[8,8],[[24,[16]]]],[1,[[24,[[23,[1]]]]]],0,0,0,[[6,6,6],[[24,[18]]]],0,[[58,58,49],[[7,[6]]]],0,0,0,[11,8],[6,6],0,0,0,[[11,59],7],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],18],[[],18],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],0,0,[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],[[],60],0,[[11,8,[23,[[57,[55,56]]]],4,43,4,3,[21,[17]],[20,[12,22]],[20,[13,22]]],5],[[15,6,[10,[9]]],[[7,[44,6]]]],[[14,[10,[9]],4,43,3],[[7,[6]]]],0,[[]],[[]],[[]],0,[[]],0,0,[[[23,[1]],55,55,55,3],[[7,[61]]]],[[],7],[[],7],[[],60],[[[23,[1]],29,49],[[7,[6]]]]],"c":[],"p":[[3,"CrateNamespace"],[8,"IntoIterator"],[15,"bool"],[15,"usize"],[3,"LoadedSection"],[15,"str"],[4,"Result"],[3,"StrRef"],[15,"u8"],[15,"slice"],[4,"SectionType"],[3,"StrongDependency"],[3,"WeakDependent"],[3,"RelocationEntry"],[3,"NamespaceDir"],[4,"Ordering"],[3,"LoadedCrate"],[3,"String"],[3,"Path"],[3,"Vec"],[3,"CowWeak"],[3,"Global"],[3,"Arc"],[4,"Option"],[8,"Iterator"],[3,"LoadedSectionInner"],[4,"CrateType"],[3,"AppCrateRef"],[6,"StrongCrateRef"],[6,"DirRef"],[8,"Deserializer"],[8,"Fn"],[3,"ElfFile"],[3,"Entry64"],[3,"Formatter"],[3,"Error"],[4,"IntoCrateObjectFile"],[6,"Result"],[8,"FnMut"],[15,"u64"],[3,"Rela"],[3,"Range"],[3,"VirtualAddress"],[6,"FileRef"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[6,"WeakSectionRef"],[6,"MmiRef"],[6,"TlsDataImage"],[8,"Hasher"],[3,"BootloaderModule"],[3,"MemoryManagementInfo"],[15,"char"],[3,"MappedPages"],[3,"Spin"],[3,"Mutex"],[6,"StrongSectionRef"],[8,"Serializer"],[3,"TypeId"],[3,"NanoCoreItems"]]},\ "mouse":{"doc":"A basic driver for a mouse connected to the legacy PS/2 …","t":"F","n":["init"],"q":[[0,"mouse"]],"d":["Initialize the PS/2 mouse driver and register its …"],"i":[0],"f":[[[1,[3,[2]]],[[5,[4]]]]],"c":[],"p":[[3,"PS2Mouse"],[4,"Event"],[3,"Queue"],[15,"str"],[4,"Result"]]},\ "mouse_data":{"doc":"","t":"DDDLLLLLLMLLLLLLLLLLLLLLLLLLLLLLMLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMM","n":["MouseButtons","MouseEvent","MouseMovementRelative","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","buttons","clone","clone","clone","fifth","fifth_or_err","fmt","fmt","fmt","fourth","fourth_or_err","from","from","from","from_bytes","into","into","into","into_bytes","left","left_or_err","middle","middle_or_err","movement","new","new","new","right","right_or_err","scroll_movement","set_fifth","set_fifth_checked","set_fourth","set_fourth_checked","set_left","set_left_checked","set_middle","set_middle_checked","set_right","set_right_checked","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","with_fifth","with_fifth_checked","with_fourth","with_fourth_checked","with_left","with_left_checked","with_middle","with_middle_checked","with_right","with_right_checked","x_movement","y_movement"],"q":[[0,"mouse_data"]],"d":["","","","","","","","","","","","","","Returns the value of fifth.","Returns the value of fifth.","","","","Returns the value of fourth.","Returns the value of fourth.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Converts the given bytes directly into the bitfield struct.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns the underlying bits.","Returns the value of left.","Returns the value of left.","Returns the value of middle.","Returns the value of middle.","","","Returns an instance with zero initialized data.","","Returns the value of right.","Returns the value of right.","","Sets the value of fifth to the given value.","Sets the value of fifth to the given value.","Sets the value of fourth to the given value.","Sets the value of fourth to the given value.","Sets the value of left to the given value.","Sets the value of left to the given value.","Sets the value of middle to the given value.","Sets the value of middle to the given value.","Sets the value of right to the given value.","Sets the value of right to the given value.","","","","","","","","","","Returns a copy of the bitfield with the value of fifth set …","Returns a copy of the bitfield with the value of fifth set …","Returns a copy of the bitfield with the value of fourth …","Returns a copy of the bitfield with the value of fourth …","Returns a copy of the bitfield with the value of left set …","Returns a copy of the bitfield with the value of left set …","Returns a copy of the bitfield with the value of middle …","Returns a copy of the bitfield with the value of middle …","Returns a copy of the bitfield with the value of right set …","Returns a copy of the bitfield with the value of right set …","",""],"i":[0,0,0,1,2,3,1,2,3,3,1,2,3,2,2,1,2,3,2,2,1,2,3,2,1,2,3,2,2,2,2,2,3,1,2,3,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,3,1,2,3,1,2,3,2,2,2,2,2,2,2,2,2,2,1,1],"f":[0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,[1,1],[2,2],[3,3],[2],[2,[[5,[4]]]],[[1,6],7],[[2,6],7],[[3,6],7],[2],[2,[[5,[4]]]],[[]],[[]],[[]],[[[9,[8]]],2],[[]],[[]],[[]],[2,[[9,[8]]]],[2],[2,[[5,[4]]]],[2],[2,[[5,[4]]]],0,[[10,10,11],1],[[],2],[[2,1],3],[2],[2,[[5,[4]]]],0,[2],[2,[[5,[12]]]],[2],[2,[[5,[12]]]],[2],[2,[[5,[12]]]],[2],[2,[[5,[12]]]],[2],[2,[[5,[12]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],13],[[],13],[[],13],[2,2],[2,[[5,[2,12]]]],[2,2],[2,[[5,[2,12]]]],[2,2],[2,[[5,[2,12]]]],[2,2],[2,[[5,[2,12]]]],[2,2],[2,[[5,[2,12]]]],0,0],"c":[],"p":[[3,"MouseMovementRelative"],[3,"MouseButtons"],[3,"MouseEvent"],[3,"InvalidBitPattern"],[4,"Result"],[3,"Formatter"],[6,"Result"],[15,"u8"],[15,"array"],[15,"i16"],[15,"i8"],[3,"OutOfBounds"],[3,"TypeId"]]},\ "multicore_bringup":{"doc":"Initialization and bring-up of secondary CPUs.","t":"DDMMMLLLLLLLLLLLLLFLLFLLLLLLLLLLLLLLL","n":["GraphicInfo","MulticoreBringupInfo","ap_gdt","ap_start_realmode_begin","ap_start_realmode_end","bits_per_pixel","blue_position","blue_size","borrow","borrow","borrow_mut","borrow_mut","bytes_per_scanline","clone","clone_into","fmt","from","from","get_graphic_info","green_position","green_size","handle_ap_cores","height","into","into","physical_address","red_position","red_size","to_owned","total_memory_size_in_bytes","try_from","try_from","try_into","try_into","type_id","type_id","width"],"q":[[0,"multicore_bringup"]],"d":["A structure to access information about the graphical …","Information needed to bring up APs (secondary CPUs) on …","The address of the GDT set up for each AP (secondary CPU)","The starting virtual addresses of the ap_start realmode …","The ending virtual addresses (exclusive) of the ap_start …","The size of each pixel, in number of bits, not bytes.","The position of the least significant bit of a pixel’s …","The size of a pixel’s Blue value, in number of bits.","","","","","The number of bytes in each row or line of the framebuffer…","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns information about the currently-active graphical …","The position of the least significant bit of a pixel’s …","The size of a pixel’s Green value, in number of bits.","Starts up and sets up AP cores based on system information …","Returns the visible height of the screen, in pixels.","Calls U::from(self).","Calls U::from(self).","Returns the physical address of the primary framebuffer …","The position of the least significant bit of a pixel’s …","The size of a pixel’s Red value, in number of bits.","","Returns the total size in bytes of the VGA graphics memory.","","","","","","","Returns the visible width of the screen, in pixels."],"i":[0,0,8,8,8,1,1,1,8,1,8,1,1,1,1,1,8,1,0,1,1,0,1,8,1,1,1,1,1,1,8,1,8,1,8,1,1],"f":[0,0,0,0,0,[1,2],[1,2],[1,2],[[]],[[]],[[]],[[]],[1,3],[1,1],[[]],[[1,4],5],[[]],[[]],[[],[[6,[1]]]],[1,2],[1,2],[[7,8],[[11,[9,10]]]],[1,3],[[]],[[]],[1,9],[1,2],[1,2],[[]],[1,9],[[],11],[[],11],[[],11],[[],11],[[],12],[[],12],[1,3]],"c":[],"p":[[3,"GraphicInfo"],[15,"u8"],[15,"u16"],[3,"Formatter"],[6,"Result"],[4,"Option"],[6,"MmiRef"],[3,"MulticoreBringupInfo"],[15,"u32"],[15,"str"],[4,"Result"],[3,"TypeId"]]},\ @@ -111,7 +112,6 @@ var searchIndex = JSON.parse('{\ "panic_wrapper":{"doc":"Provides types and simple routines for handling panics. …","t":"F","n":["panic_wrapper"],"q":[[0,"panic_wrapper"]],"d":["Performs the standard panic handling routine, which …"],"i":[0],"f":[[1,[[3,[2]]]]],"c":[],"p":[[3,"PanicInfo"],[15,"str"],[4,"Result"]]},\ "path":{"doc":"","t":"NRRNDENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["CurrentDir","EXTENSION_DELIMITER","PATH_DELIMITER","ParentDir","Path","PathComponent","RootDir","as_string","basename","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","components","deref","deref_mut","eq","extension","file_stem","fmt","fmt","from","from","from","get","get_absolute","get_dir","get_file","hash","into","into","is_absolute","new","rcomponents","relative","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"path"]],"d":["","","","","A structure that represents a relative or absolute path to …","","","","Returns just the file name, i.e., the trailling component …","","","","","","","Returns an iterator over the components of this Path, …","","","","Returns the file extension, if present. If there are …","Like basename(), but excludes the file extension, if …","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the file or directory specified by the given path, ","Returns the file or directory specified by the given …","Returns the file specified by the given path, which can be …","Returns the file specified by the given path, which can be …","","Calls U::from(self).","Calls U::from(self).","Returns a boolean indicating whether this Path is absolute,","Creates a new Path from the given String.","Returns a reverse iterator over the components of this Path…","Returns a Path that expresses a relative path from this …","","","","","","","",""],"i":[1,0,0,1,0,0,1,1,3,1,3,1,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,1,3,1,3,1,3],"f":[0,0,0,0,0,0,0,[1,2],[3,4],[[]],[[]],[[]],[[]],[3,3],[[]],[3,5],[3,2],[3,2],[[3,3],6],[3,[[7,[4]]]],[3,4],[[3,8],9],[[3,8],[[11,[10]]]],[[]],[[]],[2,3],[[3,12],[[7,[13]]]],[3,[[7,[13]]]],[[3,12],[[7,[12]]]],[[3,12],[[7,[14]]]],[[3,15]],[[]],[[]],[3,6],[2,3],[3,5],[[3,3],[[7,[3]]]],[[]],[[],2],[[],11],[[],11],[[],11],[[],11],[[],16],[[],16]],"c":[],"p":[[4,"PathComponent"],[3,"String"],[3,"Path"],[15,"str"],[8,"Iterator"],[15,"bool"],[4,"Option"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"Result"],[6,"DirRef"],[4,"FileOrDir"],[6,"FileRef"],[8,"Hasher"],[3,"TypeId"]]},\ "pci":{"doc":"PCI Configuration Space Access","t":"NNNNENNNNDDDEEDDMMLLLLLLLLLLLLLLLLLMMMLLMLLLLLLMMLLLLLLLLLLLLLLLFFLMLMMLLLLLLLLMMLFLLLLLLLMMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLM","n":["A","B","C","D","InterruptPin","IoPort","MemoryMapped","Msi","Msix","MsixVectorEntry","MsixVectorTable","PciBus","PciCapability","PciConfigSpaceAccessMechanism","PciDevice","PciLocation","bars","bist","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bus","bus_number","cache_line_size","class","clone","clone_into","command","deref","deref","deref_mut","deref_mut","determine_mem_base","determine_mem_size","device_id","devices","eq","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","function","get_hash","get_pci_buses","get_pci_device_bsf","hash","header_type","init","int_line","int_pin","into","into","into","into","into","into","into","into","latency_timer","location","new","pci_device_iter","pci_enable_msi","pci_enable_msix","pci_get_interrupt_info","pci_map_bar_mem","pci_mem_map_msix","pci_set_command_bus_master_bit","pci_set_interrupt_disable_bit","prog_if","revision_id","slot","status","subclass","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vendor_id"],"q":[[0,"pci"]],"d":["","","","","","","","","","A single Message Signaled Interrupt entry.","A memory-mapped array of MsixVectorEntry","A PCI bus, which contains a list of PCI devices on that …","","Lists the 2 possible PCI configuration space access …","Contains information common to every type of PCI Device, …","The bus, slot, and function number of a given PCI device. …","The six Base Address Registers (BARs)","","","","","","","","","","","","","","","","","","","The number identifier of this PCI bus.","","The class code, used to determine device type.","","","","","","","","Returns the base address of the memory region specified by …","Returns the size in bytes of the memory region specified …","","The list of devices attached to this PCI bus.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns a list of all PCI buses in this system. If the PCI …","Returns a reference to the PciDevice with the given bus, …","","","Sets interrupt destination & number for this entry and …","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","the bus, slot, and function number that locates this PCI …","","Returns an iterator that iterates over all PciDevices, in …","Enable MSI interrupts for a PCI device. We assume the …","Enable MSI-X interrupts for a PCI device. Only the enable …","Reads and returns this PCI device’s interrupt line and …","Maps device memory specified by a Base Address Register.","Returns the memory mapped msix vector table","Sets the PCI device’s bit 3 in the command portion, …","Sets the PCI device’s command bit 10 to disable legacy …","The programming interface of this PCI device, also used to …","","","","The subclass code, used to determine device type.","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[31,31,31,31,0,32,32,33,33,0,0,0,0,0,0,0,4,4,33,31,32,3,11,1,4,22,33,31,32,3,11,1,4,22,1,11,4,4,1,1,4,3,4,3,4,4,4,4,11,1,11,1,1,4,33,31,32,3,11,1,4,22,1,1,0,0,1,4,22,4,4,33,31,32,3,11,1,4,22,4,4,3,0,4,4,4,4,4,1,1,4,4,1,4,4,1,1,33,31,32,3,11,1,4,22,33,31,32,3,11,1,4,22,33,31,32,3,11,1,4,22,4],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,2],0,0,0,[1,1],[[]],0,[3],[4,1],[3],[4,1],[[4,5],[[8,[6,7]]]],[[4,5],9],0,0,[[1,1],10],[[11,12],13],[[1,12],[[8,[14]]]],[[1,12],[[8,[14]]]],[[4,12],13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,2],[[[0,[15,16]],17],18],[[],[[8,[[19,[11]],7]]]],[[2,2,2],[[8,[[20,[4]],7]]]],[[1,21]],0,[[22,23,24]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[[26,[22,25]]],3],[[],[[8,[27,7]]]],[[4,2,2],[[8,[7]]]],[4,[[8,[7]]]],[4,[[8,[7]]]],[[4,5],[[8,[28,7]]]],[[4,5],[[8,[3,7]]]],[1],[1],0,0,[1,2],0,0,[[]],[[],29],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],0],"c":[],"p":[[3,"PciLocation"],[15,"u8"],[3,"MsixVectorTable"],[3,"PciDevice"],[15,"usize"],[3,"PhysicalAddress"],[15,"str"],[4,"Result"],[15,"u32"],[15,"bool"],[3,"PciBus"],[3,"Formatter"],[6,"Result"],[3,"Error"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[3,"Vec"],[4,"Option"],[8,"Hasher"],[3,"MsixVectorEntry"],[3,"CpuId"],[6,"InterruptNumber"],[3,"Mutable"],[3,"BorrowedSliceMappedPages"],[8,"Iterator"],[3,"MappedPages"],[3,"String"],[3,"TypeId"],[4,"InterruptPin"],[4,"PciConfigSpaceAccessMechanism"],[4,"PciCapability"]]},\ -"per_cpu":{"doc":"Contains PerCpuData, the data stored on a per-CPU basis in …","t":"DDLLLLLLLFLLLLLLLL","n":["CpuLocalCpuId","PerCpuData","borrow","borrow","borrow_mut","borrow_mut","deref","from","from","init","into","into","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"per_cpu"]],"d":["An immutable type wrapper for this CPU’s unique ID, kept …","The data stored on a per-CPU basis in Theseus.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Initializes the current CPU’s PerCpuData.","Calls U::from(self).","Calls U::from(self).","","","","","",""],"i":[0,0,6,1,6,1,1,6,1,0,6,1,6,1,6,1,6,1],"f":[0,0,[[]],[[]],[[]],[[]],[1],[[]],[[]],[2,[[4,[3]]]],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[[],5],[[],5]],"c":[],"p":[[3,"CpuLocalCpuId"],[3,"CpuId"],[15,"str"],[4,"Result"],[3,"TypeId"],[3,"PerCpuData"]]},\ "percent_encoding":{"doc":"URLs use special chacters to indicate the parts of the …","t":"DIDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLF","n":["DEFAULT_ENCODE_SET","EncodeSet","PATH_SEGMENT_ENCODE_SET","PercentDecode","PercentEncode","QUERY_ENCODE_SET","SIMPLE_ENCODE_SET","USERINFO_ENCODE_SET","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contains","contains","contains","contains","contains","contains","decode_utf8","decode_utf8_lossy","define_encode_set","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","if_any","into","into","into","into","into","into","into","into_iter","into_iter","next","next","percent_decode","percent_encode","percent_encode_byte","size_hint","size_hint","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","utf8_percent_encode"],"q":[[0,"percent_encoding"]],"d":["This encode set is used for path components.","Represents a set of characters / bytes that should be …","This encode set is used for on ‘/’-separated path …","The return type of percent_decode().","The return type of percent_encode() and …","This encode set is used in the URL parser for query …","This encode set is used for the path of cannot-be-a-base …","This encode set is used for username and password.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Called with UTF-8 bytes rather than code points. Should …","","","","","","Decode the result of percent-decoding as UTF-8.","Decode the result of percent-decoding as UTF-8, lossily.","Define a new struct that implements the EncodeSet trait, …","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","If the percent-decoding is different from the input, …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","Percent-decode the given bytes.","Percent-encode the given bytes with the given encode set.","Return the percent-encoding of the given bytes.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Percent-encode the UTF-8 encoding of the given string."],"i":[0,0,0,0,0,0,0,0,1,2,3,4,5,8,9,1,2,3,4,5,8,9,1,2,3,4,5,8,9,1,2,3,4,5,8,9,7,1,2,3,4,5,9,9,0,1,2,3,4,5,8,8,9,1,2,3,4,5,8,9,9,1,2,3,4,5,8,9,8,9,8,9,0,0,0,8,9,1,2,3,4,5,8,9,8,1,2,3,4,5,8,9,1,2,3,4,5,8,9,1,2,3,4,5,8,9,0],"f":[0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[4,4],[5,5],[[[8,[[0,[6,7]]]]],[[8,[[0,[6,7]]]]]],[9,9],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[10,11],[[1,10],11],[[2,10],11],[[3,10],11],[[4,10],11],[[5,10],11],[9,[[15,[[13,[12]],14]]]],[9,[[13,[12]]]],0,[[1,16],17],[[2,16],17],[[3,16],17],[[4,16],17],[[5,16],17],[[[8,[7]],16],17],[[[8,[[0,[18,7]]]],16],17],[[9,16],17],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[9,[[20,[[19,[10]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[7]]],[[20,[12]]]],[9,[[20,[10]]]],[[[21,[10]]],9],[[[21,[10]],7],[[8,[7]]]],[10,12],[[[8,[7]]]],[9],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],22],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[12,7],[[8,[7]]]]],"c":[],"p":[[3,"SIMPLE_ENCODE_SET"],[3,"QUERY_ENCODE_SET"],[3,"DEFAULT_ENCODE_SET"],[3,"PATH_SEGMENT_ENCODE_SET"],[3,"USERINFO_ENCODE_SET"],[8,"Clone"],[8,"EncodeSet"],[3,"PercentEncode"],[3,"PercentDecode"],[15,"u8"],[15,"bool"],[15,"str"],[4,"Cow"],[3,"Utf8Error"],[4,"Result"],[3,"Formatter"],[6,"Result"],[8,"Debug"],[3,"Vec"],[4,"Option"],[15,"slice"],[3,"String"],[3,"TypeId"]]},\ "physical_nic":{"doc":"Defines a trait PhysicalNic that must be implemented by …","t":"IKK","n":["PhysicalNic","return_rx_queues","return_tx_queues"],"q":[[0,"physical_nic"]],"d":["This trait must be implemented by any NIC driver that …","Returns the RxQueues owned by a virtual NIC back to the …","Returns the TxQueues owned by a virtual NIC back to the …"],"i":[0,4,4],"f":[0,[[[2,[1]]]],[[[2,[3]]]]],"c":[],"p":[[3,"RxQueue"],[3,"Vec"],[3,"TxQueue"],[8,"PhysicalNic"]]},\ "pic":{"doc":"Support for the x86 PIC (8259 Programmable Interrupt …","t":"DRDRLLLLLLLLLLLLMMLLMMLLLLLL","n":["ChainedPics","IRQ_BASE_OFFSET","IrqStatusRegisters","PIC_SPURIOUS_INTERRUPT_IRQ","borrow","borrow","borrow_mut","borrow_mut","fmt","fmt","from","from","init","into","into","mask_irqs","master_irr","master_isr","notify_end_of_interrupt","read_isr_irr","slave_irr","slave_isr","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"pic"]],"d":["A pair of chained PIC chips, which represents the standard …","The offset added to the first IRQ: 0x20.","The set of status registers for both PIC chips.","The IRQ number reserved for spurious PIC interrupts (as …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Create a new interface for the standard PIC1 and PIC2 …","Calls U::from(self).","Calls U::from(self).","Each mask is a bitwise mask for each IRQ line, with the …","","","Figure out which (if any) PICs in our chain need to know …","Reads the ISR and IRR registers of both the master and …","","","","","","","",""],"i":[0,0,0,0,1,5,1,5,1,1,1,5,5,1,5,5,1,1,5,5,1,1,1,5,1,5,1,5],"f":[0,0,0,0,[[]],[[]],[[]],[[]],[[1,2],3],[[1,2],3],[[]],[[]],[[4,4],5],[[]],[[]],[[5,4,4]],0,0,[[5,4]],[5,1],0,0,[[],6],[[],6],[[],6],[[],6],[[],7],[[],7]],"c":[],"p":[[3,"IrqStatusRegisters"],[3,"Formatter"],[6,"Result"],[15,"u8"],[3,"ChainedPics"],[4,"Result"],[3,"TypeId"]]},\ @@ -119,7 +119,7 @@ var searchIndex = JSON.parse('{\ "pit_clock_basic":{"doc":"Basic support for waiting using the Programmable Interval …","t":"RHHRRF","n":["CHANNEL0","PIT_CHANNEL_0","PIT_COMMAND","PIT_DEFAULT_DIVIDEND_HZ","PIT_MINIMUM_FREQ","pit_wait"],"q":[[0,"pit_clock_basic"]],"d":["Port for Channel 0; used for PIT interrupts.","","","the timer’s default frequency is 1.19 MHz","","Waits (blocking) for the given number of microseconds …"],"i":[0,0,0,0,0,0],"f":[0,0,0,0,0,[1,[[3,[2]]]]],"c":[],"p":[[15,"u32"],[15,"str"],[4,"Result"]]},\ "pmu_x86":{"doc":"Support for the Performance Monitoring Unit ","t":"NNDENNNDNNLLLLLLLLLFLLLLFFMLLLLFFFLFAMLLLLLLLLLDDLLLLLLLLLLLLLLLLLL","n":["BranchInstructionsRetired","BranchMissesRetired","Counter","EventType","InstructionsRetired","LastLevelCacheMisses","LastLevelCacheReferences","SampleResults","UnhaltedCoreCycles","UnhaltedReferenceCycles","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","diff","drop","end","find_function_names_from_samples","from","from","from","get_count_since_start","handle_sample","init","instruction_pointers","into","into","into","new","print_samples","reset_pmu","retrieve_samples","start","start_samples","stat","task_ids","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","PMUResults","PerformanceCounters","borrow","borrow","borrow_mut","borrow_mut","end","fmt","from","from","into","into","new","start","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"pmu_x86"],[47,"pmu_x86::stat"]],"d":["This event counts branch instructions at retirement. It …","This event counts mispredicted branch instructions at …","A logical counter object to correspond to a physical PMC","Used to select the event type to count. Event types are …","This event counts the number of instructions at …","This event counts each cache miss condition for references …","This event counts requests originating from the core that …","Stores the instruction pointers and corresponding task IDs …","This event counts core clock cycles when the clock signal …","This event counts reference clock cycles at a fixed …","","","","","","","lightweight function with no checks to get the counter …","","Stops counting, releases the counter, and returns the …","Finds the corresponding function for each instruction …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Allows user to get count since start without …","This function is designed to be invoked from an interrupt …","Initialization function that enables the PMU if one is …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Creates a Counter object and assigns a physical counter …","Simple function to print values from SampleResults in a …","Frees all counters and make them available to be used. …","Returns the samples that were stored during sampling in …","Starts the count.","Start interrupt process in order to take samples using the …","This module implements the equivalent of “perf stat”. …","","","","","","","","","","","","","","","","","Stop the counters and return the counter values. The …","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Initialize seven performance monitoring counters. They …","Start running all the counters ","","","","","",""],"i":[8,8,0,0,8,8,8,0,8,8,8,1,5,8,1,5,1,1,1,0,8,1,5,1,0,0,5,8,1,5,1,0,0,0,1,0,0,5,8,1,5,8,1,5,8,1,5,0,0,13,14,13,14,13,14,13,14,13,14,13,13,13,14,13,14,13,14],"f":[0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,2],[1],[1,[[4,[2,3]]]],[5,[[4,[3]]]],[[]],[[]],[[]],[1,[[4,[2,3]]]],[6,[[4,[7,3]]]],[[],[[4,[3]]]],0,[[]],[[]],[[]],[8,[[4,[1,3]]]],[5],[[],[[4,[3]]]],[[],[[4,[5,3]]]],[1,[[4,[3]]]],[[8,9,[11,[10]],9],[[4,[3]]]],0,0,[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],12],[[],12],[[],12],0,0,[[]],[[]],[[]],[[]],[13,[[4,[14,3]]]],[[14,15],16],[[]],[[]],[[]],[[]],[[],[[4,[13,3]]]],[13,[[4,[3]]]],[[],4],[[],4],[[],4],[[],4],[[],12],[[],12]],"c":[],"p":[[3,"Counter"],[15,"u64"],[15,"str"],[4,"Result"],[3,"SampleResults"],[3,"InterruptStackFrame"],[15,"bool"],[4,"EventType"],[15,"u32"],[15,"usize"],[4,"Option"],[3,"TypeId"],[3,"PerformanceCounters"],[3,"PMUResults"],[3,"Formatter"],[6,"Result"]]},\ "port_io":{"doc":"CPU-level input/output instructions, including inb, outb, …","t":"DIIDDLLLLLLLLLLLLFFLLLFLLLFFFLLLKKLLLLLLLLLLLLL","n":["Port","PortIn","PortOut","PortReadOnly","PortWriteOnly","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","fmt","fmt","fmt","from","from","from","inb","inl","into","into","into","inw","new","new","new","outb","outl","outw","port_address","port_address","port_address","port_in","port_out","read","read","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write","write"],"q":[[0,"port_io"]],"d":["A readable and writable I/O port over an arbitrary type …","This trait is defined for any type which can be read from …","This trait is defined for any type which can be read from …","A read-only I/O port over an arbitrary type supporting the …","A write-only I/O port over an arbitrary type supporting …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Read a u8-sized value from port.","Read a u32-sized value from port.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Read a u16-sized value from port.","Create a new I/O port.","Create a new read-only I/O port.","Create a new read-only I/O port.","Write a u8-sized value to port.","Write a u32-sized value to port.","Write a u8-sized value to port.","Returns the address of this port.","Returns the address of this port.","Returns the address of this port.","Read a value from the specified port.","Write a value to the specified port.","Read data of size T from the port.","Read data of size T from the port.","","","","","","","","","","Write data of size T to the port. This is unsafe because …","Write data of size T to the port. This is unsafe because …"],"i":[0,0,0,0,0,4,7,8,4,7,8,4,7,8,4,7,8,0,0,4,7,8,0,4,7,8,0,0,0,4,7,8,2,3,4,7,4,7,8,4,7,8,4,7,8,4,8],"f":[0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[[4,[[0,[1,2,3]]]],5],6],[[[7,[[0,[1,2]]]],5],6],[[[8,[[0,[1,3]]]],5],6],[[]],[[]],[[]],[9,10],[9,11],[[]],[[]],[[]],[9,9],[9,[[4,[[0,[2,3]]]]]],[9,[[7,[2]]]],[9,[[8,[3]]]],[[10,9]],[[11,9]],[[9,9]],[[[4,[[0,[2,3]]]]],9],[[[7,[2]]],9],[[[8,[3]]],9],[9],[9],[[[4,[[0,[2,3]]]]],[[0,[2,3]]]],[[[7,[2]]],2],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],13],[[],13],[[],13],[[[4,[[0,[2,3]]]],[0,[2,3]]]],[[[8,[3]],3]]],"c":[],"p":[[8,"Debug"],[8,"PortIn"],[8,"PortOut"],[3,"Port"],[3,"Formatter"],[6,"Result"],[3,"PortReadOnly"],[3,"PortWriteOnly"],[15,"u16"],[15,"u8"],[15,"u32"],[4,"Result"],[3,"TypeId"]]},\ -"preemption":{"doc":"Manages preemption on a per-CPU basis.","t":"DLLLLLFLFLLLL","n":["PreemptionGuard","borrow","borrow_mut","cpu_id","drop","from","hold_preemption","into","preemption_enabled","preemption_was_enabled","try_from","try_into","type_id"],"q":[[0,"preemption"]],"d":["A guard type that ensures preemption is disabled as long …","","","Returns the ID of the CPU on which this guard was created.","","Returns the argument unchanged.","Prevents preemption (preemptive task switching) from …","Calls U::from(self).","Returns true if preemption is currently enabled on this …","Returns whether preemption was originally enabled when …","","",""],"i":[0,1,1,1,1,1,0,1,0,1,1,1,1],"f":[0,[[]],[[]],[1,2],[1],[[]],[[],1],[[]],[[],3],[1,3],[[],4],[[],4],[[],5]],"c":[],"p":[[3,"PreemptionGuard"],[3,"CpuId"],[15,"bool"],[4,"Result"],[3,"TypeId"]]},\ +"preemption":{"doc":"Manages preemption on a per-CPU basis.","t":"DLLLLLLFLFLLLL","n":["PreemptionGuard","borrow","borrow_mut","cpu_id","drop","fmt","from","hold_preemption","into","preemption_enabled","preemption_was_enabled","try_from","try_into","type_id"],"q":[[0,"preemption"]],"d":["A guard type that ensures preemption is disabled as long …","","","Returns the ID of the CPU on which this guard was created.","","","Returns the argument unchanged.","Prevents preemption (preemptive task switching) from …","Calls U::from(self).","Returns true if preemption is currently enabled on this …","Returns whether preemption was originally enabled when …","","",""],"i":[0,1,1,1,1,1,1,0,1,0,1,1,1,1],"f":[0,[[]],[[]],[1,2],[1],[[1,3],4],[[]],[[],1],[[]],[[],5],[1,5],[[],6],[[],6],[[],7]],"c":[],"p":[[3,"PreemptionGuard"],[3,"CpuId"],[3,"Formatter"],[6,"Result"],[15,"bool"],[4,"Result"],[3,"TypeId"]]},\ "ps2":{"doc":"Driver for the PS/2 interface, which supports legacy …","t":"NNNNDDNNNNNNENNNNNNNNNNNNEEEEENNNNEDNNNNEEDDDENEDDDNENNNNNNNNNNNENNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Acknowledge","AncientATKeyboard","ClockLineStuckHigh","ClockLineStuckLow","ControllerConfigurationByte","ControllerToHostStatus","Count1PerMm","Count2PerMm","Count4PerMm","Count8PerMm","DataLineStuckHigh","DataLineStuckLow","DeviceToHostResponse","DisableDataReporting","DisablePort1","DisablePort2","DisableScanning","EnableDataReporting","EnablePort1","EnablePort2","EnableScanning","Four","Four","Get","GetDeviceID","HostToControllerCommand","HostToKeyboardCommand","HostToKeyboardCommandOrData","HostToMouseCommand","HostToMouseCommandOrData","IdentifyKeyboard","KeyDetectionErrorOrInternalBufferOverrun1","KeyDetectionErrorOrInternalBufferOverrun2","KeyboardCommand","KeyboardType","LEDState","LEDState","MF2Keyboard","MF2KeyboardWithPSControllerTranslator","MouseCommand","MouseId","MousePacket","MousePacket3","MousePacket4","MousePacketGeneric","MouseResolution","MouseResolution","MouseSampleRate","PS2Controller","PS2Keyboard","PS2Mouse","Passed","PortTestResult","ReadData","ReadFromInternalRAMByte0","ResendByte","ResendByte","ResendCommand","Reset","ResetAndStartSelfTest","ResetWrapMode","ResponseToEcho","SampleRate","SampleRate","ScancodeSet","ScancodeSet","ScancodeSet","SelfTestFailed1","SelfTestFailed2","SelfTestPassed","Set1","Set2","Set3","SetDefaults","SetLEDStatus","SetRemoteMode","SetRepeatRateAndDelay","SetResolution","SetScaling","SetStreamMode","SetWrapMode","StatusRequest","TestController","TestPort1","TestPort2","Three","Three","WriteByteToPort2InputBuffer","WriteToInternalRAMByte0","Zero","Zero","_10","_100","_20","_200","_40","_60","_80","always_one","always_one","always_one_or_err","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","button_4","button_4","button_4_or_err","button_5","button_5","button_5_or_err","button_left","button_left","button_left_or_err","button_middle","button_middle","button_middle_or_err","button_right","button_right","button_right_or_err","caps_lock","caps_lock_or_err","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","eq","eq","flush_output_buffer","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","from_bytes","init","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_bytes","into_bytes","into_bytes","into_bytes","into_bytes","into_bytes","into_bytes","is_output_buffer_full","keyboard_detect","keyboard_ref","mouse_output_buffer_full","mouse_output_buffer_full_or_err","mouse_ref","new","new","new","new","new","new","new","new","number_lock","number_lock_or_err","port1_clock_disabled","port1_clock_disabled_or_err","port1_interrupt_enabled","port1_interrupt_enabled_or_err","port1_scancode_translation_enabled","port1_scancode_translation_enabled_or_err","port2_clock_disabled","port2_clock_disabled_or_err","port2_interrupt_enabled","port2_interrupt_enabled_or_err","read_config","read_controller_test_result","read_mouse_packet","read_scancode","reset","reset","scroll_lock","scroll_lock_or_err","scroll_movement","scroll_movement","scroll_movement","set_always_one","set_always_one_checked","set_button_4","set_button_4_checked","set_button_5","set_button_5_checked","set_button_left","set_button_left_checked","set_button_middle","set_button_middle_checked","set_button_right","set_button_right_checked","set_caps_lock","set_caps_lock_checked","set_keyboard_led","set_keyboard_scancode_set","set_mouse_id","set_mouse_output_buffer_full","set_mouse_output_buffer_full_checked","set_number_lock","set_number_lock_checked","set_port1_clock_disabled","set_port1_clock_disabled_checked","set_port1_interrupt_enabled","set_port1_interrupt_enabled_checked","set_port1_scancode_translation_enabled","set_port1_scancode_translation_enabled_checked","set_port2_clock_disabled","set_port2_clock_disabled_checked","set_port2_interrupt_enabled","set_port2_interrupt_enabled_checked","set_scroll_lock","set_scroll_lock_checked","status_register","test","test_port1","test_port2","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from_primitive","try_from_primitive","try_from_primitive","try_from_primitive","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","with_always_one","with_always_one_checked","with_button_4","with_button_4_checked","with_button_5","with_button_5_checked","with_button_left","with_button_left_checked","with_button_middle","with_button_middle_checked","with_button_right","with_button_right_checked","with_caps_lock","with_caps_lock_checked","with_mouse_output_buffer_full","with_mouse_output_buffer_full_checked","with_number_lock","with_number_lock_checked","with_port1_clock_disabled","with_port1_clock_disabled_checked","with_port1_interrupt_enabled","with_port1_interrupt_enabled_checked","with_port1_scancode_translation_enabled","with_port1_scancode_translation_enabled_checked","with_port2_clock_disabled","with_port2_clock_disabled_checked","with_port2_interrupt_enabled","with_port2_interrupt_enabled_checked","with_scroll_lock","with_scroll_lock_checked","write_command","write_config","x_movement","x_movement","y_movement","y_movement"],"q":[[0,"ps2"]],"d":["","","","","Configuration values used to enable or disable features of …","","","","","","","","","","sets ControllerConfigurationByte port1_clock_disabled","sets ControllerConfigurationByte port2_clock_disabled","might also restore default parameters","","clears ControllerConfigurationByte port1_clock_disabled","clears ControllerConfigurationByte port2_clock_disabled","","","the mouse has scroll-movement, fourth and fifth buttons","","","Commands that can be sent to the PS/2 Controller.","","","","","","","","","","","","","","","See MousePacket and its enum variants for further …","","","","","","","","An initialized PS/2 controller that can be used to …","A reference to the PS/2 Keyboard connected to the PS/2 …","A reference to the PS/2 Mouse connected to the PS/2 …","","","","returns ControllerConfigurationByte","","","","","","","","","","","","","sent after “0xFF (reset)” command or keyboard power up","sent after “0xFF (reset)” command or keyboard power up","sent after “0xFF (reset)” command or keyboard power up","","","","","","","also called typematic","set MouseResolution","either to 1 or 2","","","","see PS2Controller::test","returns PortTestResult","returns PortTestResult","","the mouse has scroll-movement","sends next byte to the second PS/2 port","sets ControllerConfigurationByte","","the mouse has no scroll-movement","","","","","","","","Returns the value of always_one.","","Returns the value of always_one.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the value of button_4.","","Returns the value of button_4.","Returns the value of button_5.","","Returns the value of button_5.","Returns the value of button_left.","","Returns the value of button_left.","Returns the value of button_middle.","","Returns the value of button_middle.","Returns the value of button_right.","","Returns the value of button_right.","Returns the value of caps_lock.","Returns the value of caps_lock.","","","","","","","","","","","","","","","","","","","","","Clean the data port output buffer, skipping the …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Converts the given bytes directly into the bitfield struct.","Converts the given bytes directly into the bitfield struct.","Converts the given bytes directly into the bitfield struct.","Converts the given bytes directly into the bitfield struct.","","Converts the given bytes directly into the bitfield struct.","Converts the given bytes directly into the bitfield struct.","Initializes the PS/2 controller, and the first and second …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns the underlying bits.","Returns the underlying bits.","Returns the underlying bits.","Returns the underlying bits.","","Returns the underlying bits.","Returns the underlying bits.","Returns true if there is content in the PS/2 Mouse’s …","Detect the KeyboardType.","Returns a reference to the keyboard attached to this PS/2 …","Returns the value of mouse_output_buffer_full. Similar to …","Returns the value of mouse_output_buffer_full.","Returns a reference to the mouse attached to this PS/2 …","Create a new reference to the mouse connected to the given …","Create a new reference to the keyboard connected to the …","Returns an instance with zero initialized data.","Returns an instance with zero initialized data.","Returns an instance with zero initialized data.","Returns an instance with zero initialized data.","Returns an instance with zero initialized data.","Returns an instance with zero initialized data.","Returns the value of number_lock.","Returns the value of number_lock.","Returns the value of port1_clock_disabled. disables the …","Returns the value of port1_clock_disabled.","Returns the value of port1_interrupt_enabled. interrupt on …","Returns the value of port1_interrupt_enabled.","Returns the value of port1_scancode_translation_enabled. …","Returns the value of port1_scancode_translation_enabled.","Returns the value of port2_clock_disabled. disables the …","Returns the value of port2_clock_disabled.","Returns the value of port2_interrupt_enabled. interrupt on …","Returns the value of port2_interrupt_enabled.","Reads and returns the current config value from the PS/2 …","must only be called after writing the TestController …","read the correct MousePacket according to MouseId","Reads a raw scancode value from the PS/2 controller’s …","Reset the mouse.","Reset the keyboard.","Returns the value of scroll_lock.","Returns the value of scroll_lock.","often called z_movement, renamed to disambiguate","often called z_movement, renamed to disambiguate","","Sets the value of always_one to the given value.","Sets the value of always_one to the given value.","Sets the value of button_4 to the given value.","Sets the value of button_4 to the given value.","Sets the value of button_5 to the given value.","Sets the value of button_5 to the given value.","Sets the value of button_left to the given value.","Sets the value of button_left to the given value.","Sets the value of button_middle to the given value.","Sets the value of button_middle to the given value.","Sets the value of button_right to the given value.","Sets the value of button_right to the given value.","Sets the value of caps_lock to the given value.","Sets the value of caps_lock to the given value.","Set the status LEDs on the keyboard.","Set the active scancode set currently used by the keyboard.","set self.id to the highest possible MouseId by magic …","Sets the value of mouse_output_buffer_full to the given …","Sets the value of mouse_output_buffer_full to the given …","Sets the value of number_lock to the given value.","Sets the value of number_lock to the given value.","Sets the value of port1_clock_disabled to the given value.","Sets the value of port1_clock_disabled to the given value.","Sets the value of port1_interrupt_enabled to the given …","Sets the value of port1_interrupt_enabled to the given …","Sets the value of port1_scancode_translation_enabled to …","Sets the value of port1_scancode_translation_enabled to …","Sets the value of port2_clock_disabled to the given value.","Sets the value of port2_clock_disabled to the given value.","Sets the value of port2_interrupt_enabled to the given …","Sets the value of port2_interrupt_enabled to the given …","Sets the value of scroll_lock to the given value.","Sets the value of scroll_lock to the given value.","Reads the PS/2 status port.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of button_4 …","Returns a copy of the bitfield with the value of button_4 …","Returns a copy of the bitfield with the value of button_5 …","Returns a copy of the bitfield with the value of button_5 …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of caps_lock …","Returns a copy of the bitfield with the value of caps_lock …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Returns a copy of the bitfield with the value of …","Writes a command to the PS/2 command port.","Writes the given config value to the PS/2 controller.","x_1st_to_8th_bit and x_9th_bit should not be accessed …","","y_1st_to_8th_bit and y_9th_bit should not be accessed …",""],"i":[21,29,31,31,0,0,16,16,16,16,31,31,0,14,34,34,11,14,34,34,11,2,17,12,14,0,0,0,0,0,11,21,21,10,0,0,10,29,29,13,0,0,0,0,0,0,13,0,0,0,0,31,0,14,34,11,14,21,14,11,14,21,13,14,0,10,11,21,21,21,12,12,12,14,11,14,11,14,14,14,14,14,34,34,34,2,17,34,34,2,17,15,15,15,15,15,15,15,1,2,1,18,27,28,34,29,24,9,31,21,10,11,8,12,13,14,1,22,6,2,15,17,16,18,27,28,34,29,24,9,31,21,10,11,8,12,13,14,1,22,6,2,15,17,16,6,2,6,6,2,6,1,2,1,1,2,1,1,2,1,8,8,9,10,11,8,12,13,14,15,16,9,10,11,8,12,13,14,15,16,12,17,18,9,21,10,11,8,12,13,14,1,22,6,2,15,17,16,18,27,28,34,29,24,9,31,21,10,11,8,12,13,14,1,22,6,2,15,17,16,24,9,8,1,1,22,6,0,18,27,28,34,29,24,9,31,21,10,11,8,12,13,14,1,22,6,2,15,17,16,24,9,8,1,1,22,6,27,28,18,24,24,18,27,28,24,9,8,1,22,6,8,8,9,9,9,9,9,9,9,9,9,9,18,18,27,28,27,28,8,8,22,6,2,1,1,6,6,6,6,1,1,1,1,1,1,8,8,28,28,27,24,24,8,8,9,9,9,9,9,9,9,9,9,9,8,8,18,18,18,18,9,10,11,8,12,13,14,15,16,18,27,28,34,29,24,9,31,31,21,21,10,11,8,12,12,13,14,1,22,6,2,15,17,17,16,31,21,12,17,18,27,28,34,29,24,9,31,21,10,11,8,12,13,14,1,22,6,2,15,17,16,18,27,28,34,29,24,9,31,21,10,11,8,12,13,14,1,22,6,2,15,17,16,1,1,6,6,6,6,1,1,1,1,1,1,8,8,24,24,8,8,9,9,9,9,9,9,9,9,9,9,8,8,18,18,1,2,1,2],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[2,3],[1,[[5,[4]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[6],[2,7],[6,[[5,[4]]]],[6],[2,7],[6,[[5,[4]]]],[1],[2,7],[1,[[5,[4]]]],[1],[2,7],[1,[[5,[4]]]],[1],[2,7],[1,[[5,[4]]]],[8],[8,[[5,[4]]]],[9,9],[10,10],[11,11],[8,8],[12,12],[13,13],[14,14],[15,15],[16,16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[12,12],7],[[17,17],7],[18],[[9,19],20],[[21,19],20],[[10,19],20],[[11,19],20],[[8,19],20],[[12,19],20],[[13,19],20],[[14,19],20],[[1,19],20],[[22,19],20],[[6,19],20],[[2,19],20],[[15,19],20],[[17,19],20],[[16,19],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[23,[3]]],24],[[[23,[3]]],9],[[[23,[3]]],8],[[[23,[3]]],1],[[],[[5,[4]]]],[[[23,[3]]],22],[[[23,[3]]],6],[[],[[5,[18,25]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[24,[[23,[3]]]],[9,[[23,[3]]]],[8,[[23,[3]]]],[1,[[23,[3]]]],[[],[[5,[26]]]],[22,[[23,[3]]]],[6,[[23,[3]]]],[27,7],[28,[[5,[29,25]]]],[18,28],[24],[24,[[5,[4]]]],[18,27],[18,27],[18,28],[[],24],[[],9],[[],8],[[],1],[[],22],[[],6],[8],[8,[[5,[4]]]],[9],[9,[[5,[4]]]],[9],[9,[[5,[4]]]],[9],[9,[[5,[4]]]],[9],[9,[[5,[4]]]],[9],[9,[[5,[4]]]],[18,9],[18,[[5,[25]]]],[27,2],[28,3],[27,[[5,[25]]]],[28,[[5,[25]]]],[8],[8,[[5,[4]]]],[22,30],[6,30],[2,30],[1],[1,[[5,[26]]]],[6],[6,[[5,[26]]]],[6],[6,[[5,[26]]]],[1],[1,[[5,[26]]]],[1],[1,[[5,[26]]]],[1],[1,[[5,[26]]]],[8],[8,[[5,[26]]]],[[28,8],[[5,[25]]]],[[28,12],[[5,[25]]]],[27,[[5,[25]]]],[24],[24,[[5,[26]]]],[8],[8,[[5,[26]]]],[9],[9,[[5,[26]]]],[9],[9,[[5,[26]]]],[9],[9,[[5,[26]]]],[9],[9,[[5,[26]]]],[9],[9,[[5,[26]]]],[8],[8,[[5,[26]]]],[18,24],[18,[[5,[25]]]],[18,[[5,[25]]]],[18,[[5,[25]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[3,[[5,[31,[32,[31]]]]]],[[],5],[3,[[5,[21,[32,[21]]]]]],[[],5],[[],5],[[],5],[3,[[5,[12,[32,[12]]]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[3,[[5,[17,[32,[17]]]]]],[[],5],[[],[[5,[31,[32,[31]]]]]],[[],[[5,[21,[32,[21]]]]]],[[],[[5,[12,[32,[12]]]]]],[[],[[5,[17,[32,[17]]]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[1,1],[1,[[5,[1,26]]]],[6,6],[6,[[5,[6,26]]]],[6,6],[6,[[5,[6,26]]]],[1,1],[1,[[5,[1,26]]]],[1,1],[1,[[5,[1,26]]]],[1,1],[1,[[5,[1,26]]]],[8,8],[8,[[5,[8,26]]]],[24,24],[24,[[5,[24,26]]]],[8,8],[8,[[5,[8,26]]]],[9,9],[9,[[5,[9,26]]]],[9,9],[9,[[5,[9,26]]]],[9,9],[9,[[5,[9,26]]]],[9,9],[9,[[5,[9,26]]]],[9,9],[9,[[5,[9,26]]]],[8,8],[8,[[5,[8,26]]]],[[18,34]],[[18,9]],[1,35],[2,35],[1,35],[2,35]],"c":[],"p":[[3,"MousePacketGeneric"],[4,"MousePacket"],[15,"u8"],[3,"InvalidBitPattern"],[4,"Result"],[3,"MousePacket4"],[15,"bool"],[3,"LEDState"],[3,"ControllerConfigurationByte"],[4,"HostToKeyboardCommandOrData"],[4,"HostToKeyboardCommand"],[4,"ScancodeSet"],[4,"HostToMouseCommandOrData"],[4,"HostToMouseCommand"],[4,"MouseSampleRate"],[4,"MouseResolution"],[4,"MouseId"],[3,"PS2Controller"],[3,"Formatter"],[6,"Result"],[4,"DeviceToHostResponse"],[3,"MousePacket3"],[15,"array"],[3,"ControllerToHostStatus"],[15,"str"],[3,"OutOfBounds"],[3,"PS2Mouse"],[3,"PS2Keyboard"],[4,"KeyboardType"],[15,"i8"],[4,"PortTestResult"],[3,"TryFromPrimitiveError"],[3,"TypeId"],[4,"HostToControllerCommand"],[15,"i16"]]},\ "pte_flags":{"doc":"This crate defines the structure of page table entry (PTE) …","t":"SSSSSSSSSSSSSSSSSSSSSSSSRDDDDSSSSSSSSSSSSSSSSSSSSSSSSSSSSLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["ACCESSED","ACCESSED","ACCESSED","CACHE_DISABLE","DEVICE_MEMORY","DEVICE_MEMORY","DEVICE_MEMORY","DIRTY","DIRTY","DIRTY","EXCLUSIVE","EXCLUSIVE","EXCLUSIVE","HUGE_PAGE","MASKED_BITS_FOR_CONVERSION","NORMAL_MEMORY","NOT_EXECUTABLE","NOT_EXECUTABLE","NOT_EXECUTABLE","OUTER_SHAREABLE","PAGE_DESCRIPTOR","PAT_BIT0","PAT_BIT1","PAT_BIT2_FOR_P1","PTE_FRAME_MASK","PteFlags","PteFlagsAarch64","PteFlagsArch","PteFlagsX86_64","READ_ONLY","VALID","VALID","VALID","WRITABLE","WRITABLE","WRITE_THROUGH","_CONTIGUOUS","_GLOBAL","_GLOBAL","_GUARDED_PAGE","_INNER_SHAREABLE","_MAIR_INDEX_0","_MAIR_INDEX_1","_MAIR_INDEX_2","_MAIR_INDEX_3","_MAIR_INDEX_4","_MAIR_INDEX_5","_MAIR_INDEX_6","_MAIR_INDEX_7","_NON_SECURE_ACCESS","_NON_SHAREABLE","_NOT_GLOBAL","_PRIV_EXEC_NEVER","_USER_ACCESSIBLE","_USER_ACCESSIBLE","_USER_ACCESSIBLE","_USER_EXEC_NEVER","accessed","accessed","accessed","adjust_for_higher_level_pte","adjust_for_higher_level_pte","all","all","all","bitand","bitand","bitand","bitand_assign","bitand_assign","bitand_assign","bitor","bitor","bitor","bitor_assign","bitor_assign","bitor_assign","bits","bits","bits","bitxor","bitxor","bitxor","bitxor_assign","bitxor_assign","bitxor_assign","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","cmp","cmp","cmp","complement","complement","complement","contains","contains","contains","default","default","default","device_memory","device_memory","device_memory","difference","difference","difference","dirty","dirty","dirty","empty","empty","empty","eq","eq","eq","exclusive","exclusive","exclusive","executable","executable","executable","extend","extend","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_bits","from_bits","from_bits","from_bits_truncate","from_bits_truncate","from_bits_truncate","from_bits_unchecked","from_bits_unchecked","from_bits_unchecked","from_iter","from_iter","from_iter","get_pat_index","hash","hash","hash","insert","insert","insert","intersection","intersection","intersection","intersects","intersects","intersects","into","into","into","is_accessed","is_accessed","is_accessed","is_all","is_all","is_all","is_device_memory","is_device_memory","is_device_memory","is_dirty","is_dirty","is_dirty","is_empty","is_empty","is_empty","is_exclusive","is_exclusive","is_exclusive","is_executable","is_executable","is_executable","is_huge","is_page_descriptor","is_valid","is_valid","is_valid","is_writable","is_writable","is_writable","new","new","new","not","not","not","page_descriptor","partial_cmp","partial_cmp","partial_cmp","pat_index","remove","remove","remove","set","set","set","sub","sub","sub","sub_assign","sub_assign","sub_assign","symmetric_difference","symmetric_difference","symmetric_difference","toggle","toggle","toggle","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","union","union","union","valid","valid","valid","writable","writable","writable"],"q":[[0,"pte_flags"]],"d":["The hardware will set this bit when the page is accessed.…","The hardware will set this bit when the page is accessed.…","The hardware will set this bit when the page is accessed.…","If set, this page’s content is never cached, neither for …","If set, this page maps device memory, which is …","This page maps device memory, i.e., memory-mapped I/O …","An alias for Self::CACHE_DISABLE in order to ease …","The hardware will set this bit when the page has been …","The hardware will set this bit when the page has been …","The hardware will set this bit when the page has been …","Note: code that invokes memory management functions in …","See PteFlags::EXCLUSIVE. We use bit 55 because it is …","See PteFlags::EXCLUSIVE. We use bit 55 because it is …","If set, this page table entry represents a “huge” …","The mask of bit ranges that cannot be handled by toggling, …","This page maps “normal” memory, i.e., non-device …","If set, this page is not executable.If not set, this page …","If set, this page is not executable.If not set, this page …","If set, this page is not executable.If not set, this page …","Indicates that multiple CPUs from multiple clusters may …","If set, this represents a page descriptor.If not set, this …","","","(For P1-level (lowest level) page tables ONLY): If the …","A mask for the bits of a page table entry that contain the …","Common, architecture-independent flags for a page table …","Page table entry (PTE) flags on aarch64.","Page table entry (PTE) flags on x86_64.","Page table entry (PTE) flags on x86_64.","If set, this page is read-only.If not set, this page is …","If set, this page is currently “present” in memory. If …","If set, this page is currently “present” in memory. If …","If set, this page is currently “present” in memory. If …","If set, this page is writable.If not set, this page is …","If set, this page is writable.If not set, this page is …","If set, writes to this page go directly to memory.It not …","If set, this translation table entry is part of a set that …","If set, this page is mapped identically across all address …","If set, this page is mapped identically across all address …","If set, this page is considered a “Guarded Page”, …","Multiple cores from the same cluster can access this page. …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","Indicates the page’s cacheability is described by MAIR …","If set, this page is accessible in both Secure and …","Indicates that only a single CPU core may access this page.","If set, this page is mapped into only one or less than all …","If set, this page is not executable by privileged levels …","If set, userspace (unprivileged mode) can access this page.…","If set, userspace (unprivileged mode) can access this page.…","If set, userspace (ring 3) can access this page.If not …","If set, this page is not executable by unprivileged levels …","Returns a copy of this PteFlags with the ACCESSED bit set …","Returns a copy of this PteFlagsAarch64 with the ACCESSED …","Returns a copy of this PteFlagsX86_64 with the ACCESSED …","Returns a copy of this PteFlagsAarch64 with its flags …","Returns a copy of this PteFlagsX86_64 with its flags …","Returns the set containing all flags.","Returns the set containing all flags.","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Adds the set of flags.","Adds the set of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Toggles the set of flags.","Toggles the set of flags.","Toggles the set of flags.","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","","","","Returns a copy of this PteFlags with the DEVICE_MEMORY bit …","Returns a copy of this PteFlagsAarch64 with the …","Returns a copy of this PteFlagsX86_64 with the …","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns a copy of this PteFlags with the DIRTY bit set or …","Returns a copy of this PteFlagsAarch64 with the DIRTY bit …","Returns a copy of this PteFlagsX86_64 with the DIRTY bit …","Returns an empty set of flags.","Returns an empty set of flags.","Returns an empty set of flags.","","","","Returns a copy of this PteFlags with the EXCLUSIVE bit set …","Returns a copy of this PteFlagsAarch64 with the EXCLUSIVE …","Returns a copy of this PteFlagsX86_64 with the EXCLUSIVE …","Returns a copy of this PteFlags with the NOT_EXECUTABLE …","Returns a copy of this PteFlagsAarch64 with the …","Returns a copy of this PteFlagsX86_64 with the …","","","","","","","","","","","","","","","","","","","This conversion clears the PAGE_DESCRIPTOR bit, which is …","Returns the argument unchanged.","","Returns the argument unchanged.","When converting from PteFlags to PteFlagsAarch64, some …","","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","","","","","","","","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Returns true if all flags are currently set.","Returns true if all flags are currently set.","Returns true if all flags are currently set.","","","","","","","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","","","","","","","","","","","","","","","Returns a new PteFlags with the default value, in which:","Returns a new PteFlagsAarch64 with the default value, in …","Returns a new PteFlagsX86_64 with the default value, in …","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns a copy of this PteFlagsAarch64 with the …","","","","Returns a copy of this PteFlagsX86_64 with the PAT index …","Removes the specified flags in-place.","Removes the specified flags in-place.","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","Toggles the specified flags in-place.","Toggles the specified flags in-place.","Toggles the specified flags in-place.","","","","","","","","","","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","Returns a copy of this PteFlags with the VALID bit set or …","Returns a copy of this PteFlagsAarch64 with the VALID bit …","Returns a copy of this PteFlagsX86_64 with the VALID bit …","Returns a copy of this PteFlags with the WRITABLE bit set …","Returns a copy of this PteFlagsAarch64 with the WRITABLE …","Returns a copy of this PteFlagsX86_64 with the WRITABLE …"],"i":[1,3,4,4,1,3,4,1,3,4,1,3,4,4,3,3,1,3,4,3,3,4,4,4,0,0,0,0,0,3,1,3,4,1,4,4,3,1,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,4,3,1,3,4,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,1,1,1,1,3,3,3,3,3,4,4,4,4,4,1,1,1,3,3,4,4,1,3,4,1,3,4,1,3,4,1,3,4,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,4,3,1,3,4,1,3,4,1,3,4,1,3,4,3,1,3,4,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4,1,3,4],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2],1],[[3,2],3],[[4,2],4],[3,3],[4,4],[[],1],[[],3],[[],4],[[1,1],1],[[3,3],3],[[4,4],4],[[1,1]],[[3,3]],[[4,4]],[[1,1],1],[[3,3],3],[[4,4],4],[[1,1]],[[3,3]],[[4,4]],[1,5],[3,5],[4,5],[[1,1],1],[[3,3],3],[[4,4],4],[[1,1]],[[3,3]],[[4,4]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[3,3],[4,4],[[1,1],6],[[3,3],6],[[4,4],6],[1,1],[3,3],[4,4],[[1,1],2],[[3,3],2],[[4,4],2],[[],1],[[],3],[[],4],[[1,2],1],[[3,2],3],[[4,2],4],[[1,1],1],[[3,3],3],[[4,4],4],[[1,2],1],[[3,2],3],[[4,2],4],[[],1],[[],3],[[],4],[[1,1],2],[[3,3],2],[[4,4],2],[[1,2],1],[[3,2],3],[[4,2],4],[[1,2],1],[[3,2],3],[[4,2],4],[[1,7]],[[3,7]],[[4,7]],[[1,8],9],[[1,8],9],[[1,8],9],[[1,8],9],[[1,8],9],[[3,8],9],[[3,8],9],[[3,8],9],[[3,8],9],[[3,8],9],[[4,8],9],[[4,8],9],[[4,8],9],[[4,8],9],[[4,8],9],[3,1],[[]],[4,1],[[]],[1,3],[1,4],[[]],[5,[[10,[1]]]],[5,[[10,[3]]]],[5,[[10,[4]]]],[5,1],[5,3],[5,4],[5,1],[5,3],[5,4],[7,1],[7,3],[7,4],[4,11],[[1,12]],[[3,12]],[[4,12]],[[1,1]],[[3,3]],[[4,4]],[[1,1],1],[[3,3],3],[[4,4],4],[[1,1],2],[[3,3],2],[[4,4],2],[[]],[[]],[[]],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[4,2],[3,2],[1,2],[3,2],[4,2],[1,2],[3,2],[4,2],[[],1],[[],3],[[],4],[1,1],[3,3],[4,4],[[3,2],3],[[1,1],[[10,[6]]]],[[3,3],[[10,[6]]]],[[4,4],[[10,[6]]]],[[4,11],4],[[1,1]],[[3,3]],[[4,4]],[[1,1,2]],[[3,3,2]],[[4,4,2]],[[1,1],1],[[3,3],3],[[4,4],4],[[1,1]],[[3,3]],[[4,4]],[[1,1],1],[[3,3],3],[[4,4],4],[[1,1]],[[3,3]],[[4,4]],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],[[],14],[[],14],[[],14],[[1,1],1],[[3,3],3],[[4,4],4],[[1,2],1],[[3,2],3],[[4,2],4],[[1,2],1],[[3,2],3],[[4,2],4]],"c":[],"p":[[3,"PteFlags"],[15,"bool"],[3,"PteFlagsAarch64"],[3,"PteFlagsX86_64"],[15,"u64"],[4,"Ordering"],[8,"IntoIterator"],[3,"Formatter"],[6,"Result"],[4,"Option"],[15,"u8"],[8,"Hasher"],[4,"Result"],[3,"TypeId"]],"a":{"block":[203,216],"block descriptor":[203,216],"cache":[107,108,109,187,188,189],"cacheable":[107,108,109,187,188,189],"no_exec":[125,126,127,199,200,201],"non-cacheable":[107,108,109,187,188,189],"page attribute table":[165,220],"pat":[165,220],"present":[204,205,206,251,252,253],"read_only":[207,208,209,254,255,256],"slot":[165,220]}},\ "random":{"doc":"A cryptographically secure source of randomness.","t":"SDSLLLFLLLLLFLFFLLLLLL","n":["CUSTOM_START","Error","INTERNAL_START","borrow","borrow_mut","code","fill_bytes","fmt","fmt","from","from","from","init_rng","into","next_u32","next_u64","raw_os_error","to_string","try_from","try_into","type_id","vzip"],"q":[[0,"random"]],"d":["Codes at or above this point can be used by users to …","Error type of random number generators","Codes below this point represent OS Errors (i.e. positive …","","","Retrieve the error code, if any.","Fills dest with random data.","","","Returns the argument unchanged.","","","Initialises a T RNG.","Calls U::from(self).","Returns a random u32.","Returns a random u64.","Extract the raw OS error code (if this error came from the …","","","","",""],"i":[1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1],"f":[0,0,0,[[]],[[]],[1,[[3,[2]]]],[[[5,[4]]]],[[1,6],[[8,[7]]]],[[1,6],[[8,[7]]]],[[]],[2,1],[9,1],[[],[[8,[10,1]]]],[[]],[[],11],[[],12],[1,[[3,[13]]]],[[],14],[[],8],[[],8],[[],15],[[]]],"c":[],"p":[[3,"Error"],[3,"NonZeroU32"],[4,"Option"],[15,"u8"],[15,"slice"],[3,"Formatter"],[3,"Error"],[4,"Result"],[4,"ErrorCode"],[8,"SeedableRng"],[15,"u32"],[15,"u64"],[15,"i32"],[3,"String"],[3,"TypeId"]]},\ @@ -138,10 +138,10 @@ var searchIndex = JSON.parse('{\ "scheduler_priority":{"doc":"This scheduler implements a priority algorithm.","t":"DLLLLFFLFFLLL","n":["PriorityInheritanceGuard","borrow","borrow_mut","drop","from","get_priority","inherit_priority","into","select_next_task","set_priority","try_from","try_into","type_id"],"q":[[0,"scheduler_priority"]],"d":["Lowers the task’s priority to its previous value when …","","","","Returns the argument unchanged.","","Modifies the given task’s priority to be the maximum of …","Calls U::from(self).","This defines the priority scheduler policy. Returns None …","","","",""],"i":[0,1,1,1,1,0,0,1,0,0,1,1,1],"f":[0,[[]],[[]],[1],[[]],[2,[[4,[3]]]],[2,1],[[]],[3,[[4,[2]]]],[[2,3]],[[],5],[[],5],[[],6]],"c":[],"p":[[3,"PriorityInheritanceGuard"],[3,"TaskRef"],[15,"u8"],[4,"Option"],[4,"Result"],[3,"TypeId"]]},\ "scheduler_round_robin":{"doc":"This crate picks the next task in round robin fashion. …","t":"DLLLFLFLLL","n":["PriorityInheritanceGuard","borrow","borrow_mut","from","inherit_priority","into","select_next_task","try_from","try_into","type_id"],"q":[[0,"scheduler_round_robin"]],"d":["","","","Returns the argument unchanged.","","Calls U::from(self).","This defines the round robin scheduler policy. Returns …","","",""],"i":[0,2,2,2,0,2,0,2,2,2],"f":[0,[[]],[[]],[[]],[1,2],[[]],[3,[[4,[1]]]],[[],5],[[],5],[[],6]],"c":[],"p":[[3,"TaskRef"],[3,"PriorityInheritanceGuard"],[15,"u8"],[4,"Option"],[4,"Result"],[3,"TypeId"]]},\ "sdt":{"doc":"ACPI table definitions and basic SDT structures.","t":"DRDMMMMLLLLMLLMMLLLLLLMMMMMMMLLLLLL","n":["GenericAddressStructure","SDT_SIZE_IN_BYTES","Sdt","access_size","address_space","bit_offset","bit_width","borrow","borrow","borrow_mut","borrow_mut","checksum","clone","clone","creator_id","creator_revision","fmt","fmt","from","from","into","into","length","oem_id","oem_revision","oem_table_id","phys_addr","revision","signature","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"sdt"]],"d":["A struct used to describe the position and layout of …","The size in bytes of the ACPI SDT Header (Sdt struct).","An ACPI System Descriptor Table. This is the header (the …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","",""],"i":[0,0,0,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,1,1,1,1,2,1,1,1,2,1,2,1,2],"f":[0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],0,[1,1],[2,2],0,0,[[1,3],4],[[2,3],4],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[],5],[[],5],[[],5],[[],5],[[],6],[[],6]],"c":[],"p":[[3,"Sdt"],[3,"GenericAddressStructure"],[3,"Formatter"],[6,"Result"],[4,"Result"],[3,"TypeId"]]},\ -"serial_port":{"doc":"A full serial driver with more advanced I/O support, e.g., …","t":"NNNNDNDNDEDENNLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLFLLFLLLLLLMLLLLLLLLFLFLLLLLLLLLLLLLLLLLLLLLLLL","n":["COM1","COM2","COM3","COM4","DataChunk","DataReceived","DataSenderAlreadyExists","ErrorOrBreak","SerialPort","SerialPortAddress","SerialPortBasic","SerialPortInterruptEvent","StatusChange","TransmitterEmpty","base_port_address","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","data","data_available","deref","deref_mut","drop","empty","enable_interrupt","eq","flush","fmt","fmt","fmt","from","from","from","from","from","from","from_str","get_serial_port","in_byte","in_bytes","init_serial_port","into","into","into","into","into","into","len","new","new","out_byte","out_bytes","out_str","read","ready_to_transmit","register_interrupt_handler","set_connection_listener","set_data_sender","take_serial_port_basic","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","write","write_str","write_str"],"q":[[0,"serial_port"]],"d":["The base port I/O address for the COM1 serial port.","The base port I/O address for the COM2 serial port.","The base port I/O address for the COM3 serial port.","The base port I/O address for the COM4 serial port.","A chunk of data read from a serial port that will be …","","An empty error type indicating that a data sender could …","","A serial port abstraction with support for interrupt-based …","The base port I/O addresses for COM serial ports.","A serial port and its various data and control registers.","The types of events that can trigger an interrupt on a …","","","","","","","","","","","","","","","","","","","Returns true if the serial port has data available to read.","","","","Returns a new DataChunk filled with zeroes that can be …","Enable or disable interrupts on this serial port for …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Obtains a reference to the SerialPort specified by the …","Read one byte from the serial port, blocking until data is …","Reads multiple bytes from the serial port into the given …","Initializes the SerialPort specified by the given …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Creates and returns a new serial port structure, and …","Initialize this serial port by giving it ownership and …","Write the given byte to the serial port, blocking until …","Write the given bytes to the serial port, blocking until …","Write the given string to the serial port, blocking until …","","Returns true if the serial port is ready to transmit a …","Register the interrupt handler for this serial port and …","A temporary hack to allow the serial port interrupt handler","Tells this SerialPort to push received data bytes onto the …","Takes ownership of the SerialPort specified by the given …","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[2,2,2,2,0,6,0,6,0,0,0,0,6,6,1,1,4,2,5,11,6,1,4,2,5,11,6,2,2,5,1,4,4,1,5,1,2,4,2,11,6,1,4,2,5,11,6,2,0,1,1,0,1,4,2,5,11,6,5,1,4,1,1,1,4,1,4,0,4,0,2,1,4,2,2,2,5,11,6,1,4,2,5,11,6,1,4,2,5,11,6,4,1,4],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[[]],0,[1,3],[4],[4],[1],[[],5],[[1,6,3]],[[2,2],3],[4,7],[[2,8],[[10,[9]]]],[[11,8],12],[[6,8],[[10,[9]]]],[[]],[[]],[[]],[[]],[[]],[[]],[13,[[10,[2]]]],[2,[[16,[[15,[[14,[4]]]]]]]],[1,17],[[1,[18,[17]]],19],[[2,1],[[16,[[15,[[14,[4]]]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,[20,1],[1,4],[[1,17]],[[1,[18,[17]]]],[[1,13]],[[4,[18,[17]]],[[7,[19]]]],[1,3],[[[15,[[14,[4]]]],21,22],[[10,[13]]]],[[[23,[2]]],[[23,[2]]]],[[4,[23,[5]]],[[10,[11]]]],[2,[[16,[1]]]],[[]],[[],10],[[],10],[13,[[10,[2]]]],[20,[[10,[2]]]],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[4,[18,[17]]],[[7,[19]]]],[[1,13],[[10,[9]]]],[[4,13],12]],"c":[],"p":[[3,"SerialPortBasic"],[4,"SerialPortAddress"],[15,"bool"],[3,"SerialPort"],[3,"DataChunk"],[4,"SerialPortInterruptEvent"],[6,"Result"],[3,"Formatter"],[3,"Error"],[4,"Result"],[3,"DataSenderAlreadyExists"],[6,"Result"],[15,"str"],[6,"IrqSafeMutex"],[3,"Arc"],[4,"Option"],[15,"u8"],[15,"slice"],[15,"usize"],[15,"u16"],[6,"InterruptNumber"],[6,"HandlerFunc"],[3,"Sender"],[3,"TypeId"]]},\ +"serial_port":{"doc":"A full serial driver with more advanced I/O support, e.g., …","t":"NNNNDNDNDEDENNLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLFLLFLLLLLLMLLLLLLLLFLFLLLLLLLLLLLLLLLLLLLLLLLL","n":["COM1","COM2","COM3","COM4","DataChunk","DataReceived","DataSenderAlreadyExists","ErrorOrBreak","SerialPort","SerialPortAddress","SerialPortBasic","SerialPortInterruptEvent","StatusChange","TransmitterEmpty","base_port_address","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","data","data_available","deref","deref_mut","drop","empty","enable_interrupt","eq","flush","fmt","fmt","fmt","from","from","from","from","from","from","from_str","get_serial_port","in_byte","in_bytes","init_serial_port","into","into","into","into","into","into","len","new","new","out_byte","out_bytes","out_str","read","ready_to_transmit","register_interrupt_handler","set_connection_listener","set_data_sender","take_serial_port_basic","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","write","write_str","write_str"],"q":[[0,"serial_port"]],"d":["The base port I/O address for the COM1 serial port.","The base port I/O address for the COM2 serial port.","The base port I/O address for the COM3 serial port.","The base port I/O address for the COM4 serial port.","A chunk of data read from a serial port that will be …","","An empty error type indicating that a data sender could …","","A serial port abstraction with support for interrupt-based …","The base port I/O addresses for COM serial ports.","A serial port and its various data and control registers.","The types of events that can trigger an interrupt on a …","","","","","","","","","","","","","","","","","","","Returns true if the serial port has data available to read.","","","","Returns a new DataChunk filled with zeroes that can be …","Enable or disable interrupts on this serial port for …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Obtains a reference to the SerialPort specified by the …","Read one byte from the serial port, blocking until data is …","Reads multiple bytes from the serial port into the given …","Initializes the SerialPort specified by the given …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Creates and returns a new serial port structure, and …","Initialize this serial port by giving it ownership and …","Write the given byte to the serial port, blocking until …","Write the given bytes to the serial port, blocking until …","Write the given string to the serial port, blocking until …","","Returns true if the serial port is ready to transmit a …","Register the interrupt handler for this serial port and …","A temporary hack to allow the serial port interrupt handler","Tells this SerialPort to push received data bytes onto the …","Takes ownership of the SerialPort specified by the given …","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[2,2,2,2,0,6,0,6,0,0,0,0,6,6,1,1,4,2,5,11,6,1,4,2,5,11,6,2,2,5,1,4,4,1,5,1,2,4,2,11,6,1,4,2,5,11,6,2,0,1,1,0,1,4,2,5,11,6,5,1,4,1,1,1,4,1,4,0,4,0,2,1,4,2,2,2,5,11,6,1,4,2,5,11,6,1,4,2,5,11,6,4,1,4],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[[]],0,[1,3],[4],[4],[1],[[],5],[[1,6,3]],[[2,2],3],[4,7],[[2,8],[[10,[9]]]],[[11,8],12],[[6,8],[[10,[9]]]],[[]],[[]],[[]],[[]],[[]],[[]],[13,[[10,[2]]]],[2,[[16,[[15,[[14,[4]]]]]]]],[1,17],[[1,[18,[17]]],19],[[2,1],[[16,[[15,[[14,[4]]]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,[20,1],[1,4],[[1,17]],[[1,[18,[17]]]],[[1,13]],[[4,[18,[17]]],[[7,[19]]]],[1,3],[[[15,[[14,[4]]]],21,22],[[10,[13]]]],[[[23,[2]]],[[23,[2]]]],[[4,[23,[5]]],[[10,[11]]]],[2,[[16,[1]]]],[[]],[[],10],[[],10],[[],10],[13,[[10,[2]]]],[20,[[10,[2]]]],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[4,[18,[17]]],[[7,[19]]]],[[1,13],[[10,[9]]]],[[4,13],12]],"c":[],"p":[[3,"SerialPortBasic"],[4,"SerialPortAddress"],[15,"bool"],[3,"SerialPort"],[3,"DataChunk"],[4,"SerialPortInterruptEvent"],[6,"Result"],[3,"Formatter"],[3,"Error"],[4,"Result"],[3,"DataSenderAlreadyExists"],[6,"Result"],[15,"str"],[6,"IrqSafeMutex"],[3,"Arc"],[4,"Option"],[15,"u8"],[15,"slice"],[15,"usize"],[15,"u16"],[6,"InterruptNumber"],[6,"HandlerFunc"],[3,"Sender"],[3,"TypeId"]]},\ "serial_port_basic":{"doc":"Support for basic serial port access, including …","t":"NNNNNNDEENNLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLL","n":["COM1","COM2","COM3","COM4","DataReceived","ErrorOrBreak","SerialPort","SerialPortAddress","SerialPortInterruptEvent","StatusChange","TransmitterEmpty","base_port_address","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","data_available","drop","enable_interrupt","eq","fmt","fmt","from","from","from","from_str","in_byte","in_bytes","into","into","into","new","out_byte","out_bytes","out_str","ready_to_transmit","take_serial_port","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write_str"],"q":[[0,"serial_port_basic"]],"d":["The base port I/O address for the COM1 serial port.","The base port I/O address for the COM2 serial port.","The base port I/O address for the COM3 serial port.","The base port I/O address for the COM4 serial port.","","","A serial port and its various data and control registers.","The base port I/O addresses for COM serial ports.","The types of events that can trigger an interrupt on a …","","","","","","","","","","","Returns true if the serial port has data available to read.","","Enable or disable interrupts on this serial port for …","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Read one byte from the serial port, blocking until data is …","Reads multiple bytes from the serial port into the given …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Creates and returns a new serial port structure, and …","Write the given byte to the serial port, blocking until …","Write the given bytes to the serial port, blocking until …","Write the given string to the serial port, blocking until …","Returns true if the serial port is ready to transmit a …","Takes ownership of the SerialPort specified by the given …","","","","","","","","","","","",""],"i":[2,2,2,2,4,4,0,0,0,4,4,1,1,2,4,1,2,4,2,1,1,1,2,2,4,1,2,4,2,1,1,1,2,4,1,1,1,1,1,0,1,2,2,2,4,1,2,4,1,2,4,1],"f":[0,0,0,0,0,0,0,0,0,0,0,[1,2],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[1,3],[1],[[1,4,3]],[[2,2],3],[[2,5],6],[[4,5],6],[[]],[[]],[[]],[7,[[8,[2]]]],[1,9],[[1,[10,[9]]],11],[[]],[[]],[[]],[12,1],[[1,9]],[[1,[10,[9]]]],[[1,7]],[1,3],[2,[[13,[1]]]],[[],8],[7,[[8,[2]]]],[12,[[8,[2]]]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],14],[[],14],[[],14],[[1,7],6]],"c":[],"p":[[3,"SerialPort"],[4,"SerialPortAddress"],[15,"bool"],[4,"SerialPortInterruptEvent"],[3,"Formatter"],[6,"Result"],[15,"str"],[4,"Result"],[15,"u8"],[15,"slice"],[15,"usize"],[15,"u16"],[4,"Option"],[3,"TypeId"]]},\ "shapes":{"doc":"This crate defines the basic shapes used for display.","t":"DDLLLLLLLMLLLLLLLLLLLLLLLLLLLMLLLLLLLMM","n":["Coord","Rectangle","add","add","add","borrow","borrow","borrow_mut","borrow_mut","bottom_right","clone","clone","cmp","eq","eq","fmt","fmt","from","from","hash","hash","height","into","into","new","partial_cmp","sub","sub","sub","top_left","try_from","try_from","try_into","try_into","type_id","type_id","width","x","y"],"q":[[0,"shapes"]],"d":["A 2-D integer coordinate.","A rectangle given by its top-left coordinate and …","","","","","","","","The bottom-right point","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the height of this Rectangle.","Calls U::from(self).","Calls U::from(self).","Creates a new coordinate.","","","","","The top-left point","","","","","","","Returns the width of this Rectangle.","The x coordinate","The y coordinate"],"i":[0,0,1,1,2,1,2,1,2,2,1,2,1,1,2,1,2,1,2,1,2,2,1,2,1,1,1,1,2,2,1,2,1,2,1,2,2,1,1],"f":[0,0,[[1,1],1],[1,1],[[2,1],2],[[]],[[]],[[]],[[]],0,[1,1],[2,2],[[1,1],3],[[1,1],4],[[2,2],4],[[1,5],6],[[2,5],6],[[]],[[]],[[1,7]],[[2,7]],[2,8],[[]],[[]],[[9,9],1],[[1,1],[[10,[3]]]],[1,1],[[1,1],1],[[2,1],2],0,[[],11],[[],11],[[],11],[[],11],[[],12],[[],12],[2,8],0,0],"c":[],"p":[[3,"Coord"],[3,"Rectangle"],[4,"Ordering"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[15,"usize"],[15,"isize"],[4,"Option"],[4,"Result"],[3,"TypeId"]]},\ -"signal_handler":{"doc":"Signal handlers for CPU exceptions/errors, like …","t":"DNNENNNNEDZLLLLLLLLLLLLLLLLLLMLLLLLLLLLLMLLLLLFMMFLLLLLLLLLLLLLLLMM","n":["AlreadyRegistered","ArithmeticError","BusError","ErrorCode","IllegalInstruction","InvalidAddress","Other","PageFaultError","Signal","SignalContext","SignalHandler","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","eq","eq","eq","error_code","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","instruction_pointer","into","into","into","into","partial_cmp","register_signal_handler","signal","stack_pointer","take_signal_handler","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","accessed_address","pf_error"],"q":[[0,"signal_handler"],[65,"signal_handler::ErrorCode"]],"d":["An error type indicating a handler had already been …","Bad arithmetic operation, e.g., divide by zero. Analogous …","Bad memory alignment, non-existent physical address. …","Possible error codes that may be provided by the CPU …","Invalid opcode, malformed instruction, etc. Analogous to …","Bad virtual address, unexpected page fault. Analogous to …","","","The possible signals that may occur due to CPU exceptions.","Information that is passed to a registered SignalHandler …","A signal handler is a callback function that will be …","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Register a SignalHandler callback function for the current …","","","Take the SignalHandler registered for the given signal for …","","","","","","","","","","","","","","","","",""],"i":[0,1,1,0,1,1,3,3,0,0,0,6,1,2,3,6,1,2,3,1,2,3,1,2,3,1,1,2,3,2,6,1,2,3,6,1,2,3,3,1,2,6,1,2,3,1,0,2,2,0,1,2,3,6,1,2,3,6,1,2,3,6,1,2,3,16,16],"f":[0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[[]],[[]],[[]],[[1,1],4],[[1,1],5],[[2,2],5],[[3,3],5],0,[[6,7],8],[[1,7],8],[[2,7],8],[[3,7],8],[[]],[[]],[[]],[[]],[9,3],[[1,10]],0,[[]],[[]],[[]],[[]],[[1,1],[[11,[4]]]],[[1,[13,[12]]],[[14,[6]]]],0,0,[1,[[11,[[13,[12]]]]]],[[]],[[]],[[]],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],15],[[],15],[[],15],[[],15],0,0],"c":[],"p":[[4,"Signal"],[3,"SignalContext"],[4,"ErrorCode"],[4,"Ordering"],[15,"bool"],[3,"AlreadyRegistered"],[3,"Formatter"],[6,"Result"],[15,"u64"],[8,"Hasher"],[4,"Option"],[25,"SignalHandler"],[3,"Box"],[4,"Result"],[3,"TypeId"],[13,"PageFaultError"]]},\ +"signal_handler":{"doc":"Signal handlers for CPU exceptions/errors, like …","t":"DNNENNNNEDZLLLLLLLLLLLLLLLLLLMLLLLLLLLLLMLLLLLFMMFLLLLLLLLLLLLLLLMM","n":["AlreadyRegistered","ArithmeticError","BusError","ErrorCode","IllegalInstruction","InvalidAddress","Other","PageFaultError","Signal","SignalContext","SignalHandler","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","eq","eq","eq","error_code","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","instruction_pointer","into","into","into","into","partial_cmp","register_signal_handler","signal","stack_pointer","take_signal_handler","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","accessed_address","pf_error"],"q":[[0,"signal_handler"],[65,"signal_handler::ErrorCode"]],"d":["An error type indicating a handler had already been …","Bad arithmetic operation, e.g., divide by zero. Analogous …","Bad memory alignment, non-existent physical address. …","Possible error codes that may be provided by the CPU …","Invalid opcode, malformed instruction, etc. Analogous to …","Bad virtual address, unexpected page fault. Analogous to …","","","The possible signals that may occur due to CPU exceptions.","Information that is passed to a registered SignalHandler …","A signal handler is a callback function that will be …","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Register a SignalHandler callback function for the current …","","","Take the SignalHandler registered for the given signal for …","","","","","","","","","","","","","","","","",""],"i":[0,1,1,0,1,1,3,3,0,0,0,6,1,2,3,6,1,2,3,1,2,3,1,2,3,1,1,2,3,2,6,1,2,3,6,1,2,3,3,1,2,6,1,2,3,1,0,2,2,0,1,2,3,6,1,2,3,6,1,2,3,6,1,2,3,16,16],"f":[0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[[]],[[]],[[]],[[1,1],4],[[1,1],5],[[2,2],5],[[3,3],5],0,[[6,7],8],[[1,7],8],[[2,7],8],[[3,7],8],[[]],[[]],[[]],[9,3],[[]],[[1,10]],0,[[]],[[]],[[]],[[]],[[1,1],[[11,[4]]]],[[1,[13,[12]]],[[14,[6]]]],0,0,[1,[[11,[[13,[12]]]]]],[[]],[[]],[[]],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],15],[[],15],[[],15],[[],15],0,0],"c":[],"p":[[4,"Signal"],[3,"SignalContext"],[4,"ErrorCode"],[4,"Ordering"],[15,"bool"],[3,"AlreadyRegistered"],[3,"Formatter"],[6,"Result"],[15,"u64"],[8,"Hasher"],[4,"Option"],[25,"SignalHandler"],[3,"Box"],[4,"Result"],[3,"TypeId"],[13,"PageFaultError"]]},\ "simd_personality":{"doc":"Management of two kernel personalities, one for …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "simd_test":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "simple_ipc":{"doc":"An implementation of a shared buffer for IPC that can be …","t":"DDLLLLLLLLFLLLLLLLLLL","n":["Receiver","Sender","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","new_channel","receive","send","try_from","try_from","try_into","try_into","try_receive","try_send","type_id","type_id"],"q":[[0,"simple_ipc"]],"d":["Channel endpoint that only allows receiving messages.","Channel endpoint that only allows sending messages.","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Creates a new channel and returns the endpoints","Tries to receive a message until succesful. Task will spin …","Tries to send a message until succesful. Task will spin in …","","","","","Tries to receive a message once. If the buffer is empty, …","Tries to send a message once. If the buffer is full, then …","",""],"i":[0,0,3,1,3,1,3,1,3,1,0,1,3,3,1,3,1,1,3,3,1],"f":[0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,2],[[3,2]],[[],4],[[],4],[[],4],[[],4],[1,[[4,[2,5]]]],[[3,2],[[4,[5]]]],[[],6],[[],6]],"c":[],"p":[[3,"Receiver"],[15,"u8"],[3,"Sender"],[4,"Result"],[15,"str"],[3,"TypeId"]]},\ @@ -152,7 +152,7 @@ var searchIndex = JSON.parse('{\ "sleep":{"doc":"Provides APIs for tasks to sleep for specified time …","t":"DSSSSSSLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLFFLLLLLLLLLLLLLFFF","n":["Duration","MAX","MICROSECOND","MILLISECOND","NANOSECOND","SECOND","ZERO","add","add_assign","as_micros","as_millis","as_nanos","as_secs","as_secs_f32","as_secs_f64","borrow","borrow_decode","borrow_mut","checked_add","checked_div","checked_mul","checked_sub","clone","clone_into","cmp","decode","default","deserialize","div","div_assign","div_duration_f32","div_duration_f64","div_f32","div_f64","encode","eq","fmt","from","from_micros","from_millis","from_nanos","from_secs","from_secs_f32","from_secs_f64","future","get_hash","hash","into","is_zero","mul","mul_assign","mul_f32","mul_f64","new","partial_cmp","saturating_add","saturating_mul","saturating_sub","serialize","sleep","sleep_until","sub","sub_assign","subsec_micros","subsec_millis","subsec_nanos","sum","sum","to_owned","try_from","try_from_secs_f32","try_from_secs_f64","try_into","type_id","unblock_sleeping_tasks","sleep","sleep_until"],"q":[[0,"sleep"],[75,"sleep::future"]],"d":["A Duration type to represent a span of time, typically …","The maximum duration.","The duration of one microsecond.","The duration of one millisecond.","The duration of one nanosecond.","The duration of one second.","A duration of zero time.","","","Returns the total number of whole microseconds contained …","Returns the total number of whole milliseconds contained …","Returns the total number of nanoseconds contained by this …","Returns the number of whole seconds contained by this …","Returns the number of seconds contained by this Duration …","Returns the number of seconds contained by this Duration …","","","","Checked Duration addition. Computes self + other, …","Checked Duration division. Computes self / other, …","Checked Duration multiplication. Computes self * other, …","Checked Duration subtraction. Computes self - other, …","","","","","","","","","Divide Duration by Duration and return f32.","Divide Duration by Duration and return f64.","Divide Duration by f32.","Divide Duration by f64.","","","","Returns the argument unchanged.","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of whole …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Asynchronous sleep methods that operate on wakers.","","","Calls U::from(self).","Returns true if this Duration spans no time.","","","Multiplies Duration by f32.","Multiplies Duration by f64.","Creates a new Duration from the specified number of whole …","","Saturating Duration addition. Computes self + other, …","Saturating Duration multiplication. Computes self * other, …","Saturating Duration subtraction. Computes self - other, …","","Blocks the current task by putting it to sleep for duration…","Blocks the current task by putting it to sleep until a …","","","Returns the fractional part of this Duration, in whole …","Returns the fractional part of this Duration, in whole …","Returns the fractional part of this Duration, in …","","","","","The checked version of from_secs_f32.","The checked version of from_secs_f64.","","","Remove all tasks that have been delayed but are able to be …","Wakes up the waker after the specified duration.","Wakes up the waker at the specified time."],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],"f":[0,0,0,0,0,0,0,[[1,1],1],[[1,1]],[1,2],[1,2],[1,2],[1,3],[1,4],[1,5],[[]],[6,[[8,[1,7]]]],[[]],[[1,1],[[9,[1]]]],[[1,10],[[9,[1]]]],[[1,10],[[9,[1]]]],[[1,1],[[9,[1]]]],[1,1],[[]],[[1,1],11],[12,[[8,[1,7]]]],[[],1],[13,[[8,[1]]]],[[1,10],1],[[1,10]],[[1,1],4],[[1,1],5],[[1,4],1],[[1,5],1],[[1,14],[[8,[15]]]],[[1,1],16],[[1,17],[[8,[18]]]],[[]],[3,1],[3,1],[3,1],[3,1],[4,1],[5,1],0,[[[0,[19,20]],21],3],[[1,22]],[[]],[1,16],[[1,10],1],[[1,10]],[[1,4],1],[[1,5],1],[[3,10],1],[[1,1],[[9,[11]]]],[[1,1],1],[[1,10],1],[[1,1],1],[[1,23],8],[1,[[8,[24]]]],[25,[[8,[24]]]],[[1,1],1],[[1,1]],[1,10],[1,10],[1,10],[26,1],[26,1],[[]],[[],8],[4,[[8,[1,27]]]],[5,[[8,[1,27]]]],[[],8],[[],28],[[]],[[1,29]],[[25,29],30]],"c":[],"p":[[3,"Duration"],[15,"u128"],[15,"u64"],[15,"f32"],[15,"f64"],[8,"BorrowDecoder"],[4,"DecodeError"],[4,"Result"],[4,"Option"],[15,"u32"],[4,"Ordering"],[8,"Decoder"],[8,"Deserializer"],[8,"Encoder"],[4,"EncodeError"],[15,"bool"],[3,"Formatter"],[3,"Error"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[8,"Hasher"],[8,"Serializer"],[4,"RunState"],[3,"Instant"],[8,"Iterator"],[3,"TryFromFloatSecsError"],[3,"TypeId"],[3,"Waker"],[4,"Poll"]]},\ "spawn":{"doc":"This crate offers routines for spawning new tasks and …","t":"DDLLLLLLFLLLLLLLFLLLFFLLLLLLLLLLL","n":["BootstrapTaskRef","TaskBuilder","argument","block","borrow","borrow","borrow_mut","borrow_mut","cleanup_bootstrap_tasks","deref","drop","finish","fmt","from","from","idle","init","into","into","name","new_application_task_builder","new_task_builder","parent","pin_on_cpu","spawn","spawn_restartable","stack","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"spawn"]],"d":["A wrapper around a TaskRef for bootstrapped tasks, which …","A struct that offers a builder pattern to create and …","Set the argument that will be passed to the new Task’s …","Set the new Task’s RunState to be Blocked instead of …","","","","","Spawns a dedicated task to cleanup all bootstrap tasks by …","","","This function represents the final step of each CPU’s …","","Returns the argument unchanged.","Returns the argument unchanged.","Sets this new Task to be the idle task for the given CPU. ","Initializes tasking for this CPU, including creating a …","Calls U::from(self).","Calls U::from(self).","Set the String name for the new Task.","Creates a builder for a new application Task. ","Creates a builder for a new Task that starts at the given …","Set the “parent” Task from which the new Task will …","Pin the new Task to a specific CPU.","Finishes this TaskBuilder and spawns the new task as …","Like TaskBuilder::spawn(), this finishes this TaskBuilder …","Set the Stack that will be used by the new Task.","","","","","",""],"i":[0,0,3,3,3,7,3,7,0,7,7,7,7,3,7,3,0,3,7,3,0,0,3,3,3,3,3,3,7,3,7,3,7],"f":[0,0,[[[3,[1,2,2]],2],[[3,[1,2,2]]]],[[[3,[1,2,2]]],[[3,[1,2,2]]]],[[]],[[]],[[]],[[]],[4,[[6,[5]]]],[7,8],[7],[7],[[7,9],10],[[]],[[]],[[[3,[[0,[1,2,11]],[0,[2,11]],2]],12],[[3,[[0,[1,2,11]],[0,[2,11]],2]]]],[[13,12,[15,[14]]],[[6,[7,5]]]],[[]],[[]],[[[3,[1,2,2]],16],[[3,[1,2,2]]]],[[17,[20,[[19,[18]]]]],[[6,[[3,[[21,[16]],22]],5]]]],[[1,2],[[3,[1,2,2]]]],[[[3,[1,2,2]],8],[[3,[1,2,2]]]],[[[3,[1,2,2]],12],[[3,[1,2,2]]]],[[[3,[1,2,2]]],[[6,[23,5]]]],[[[3,[[0,[1,2,11]],[0,[2,11]],2]],[20,[[0,[2,11]]]]],[[6,[23,5]]]],[[[3,[1,2,2]],14],[[3,[1,2,2]]]],[[],6],[[],6],[[],6],[[],6],[[],24],[[],24]],"c":[],"p":[[8,"FnOnce"],[8,"Send"],[3,"TaskBuilder"],[15,"u32"],[15,"str"],[4,"Result"],[3,"BootstrapTaskRef"],[3,"TaskRef"],[3,"Formatter"],[6,"Result"],[8,"Clone"],[3,"CpuId"],[6,"MmiRef"],[3,"Stack"],[3,"NoDrop"],[3,"String"],[3,"Path"],[3,"CrateNamespace"],[3,"Arc"],[4,"Option"],[3,"Vec"],[15,"isize"],[3,"JoinableTaskRef"],[3,"TypeId"]]},\ "stack":{"doc":"Provides the Stack type that represents a Task’s stack …","t":"DFLLLLLLLLLLLLLLL","n":["Stack","alloc_stack","borrow","borrow_mut","bottom","deref","deref_mut","fmt","from","from_pages","guard_page","into","top_unusable","top_usable","try_from","try_into","type_id"],"q":[[0,"stack"]],"d":["A range of mapped memory designated for use as a task’s …","Allocates a new stack and maps it to the active page …","","","Returns the bottom of this stack, its lowest usable …","","","","Returns the argument unchanged.","Creates a stack from its constituent parts: a guard page …","Returns the guard page(s) for this stack. ","Calls U::from(self).","Returns the address just beyond the top of this stack, …","Returns the highest usable address of this Stack, which …","","",""],"i":[0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],"f":[0,[[1,2],[[4,[3]]]],[[]],[[]],[3,5],[3,6],[3,6],[[3,7],8],[[]],[[9,6],[[10,[3]]]],[3,11],[[]],[3,5],[3,5],[[],10],[[],10],[[],12]],"c":[],"p":[[15,"usize"],[3,"Mapper"],[3,"Stack"],[4,"Option"],[3,"VirtualAddress"],[3,"MappedPages"],[3,"Formatter"],[6,"Result"],[3,"AllocatedPages"],[4,"Result"],[3,"PageRange"],[3,"TypeId"]]},\ -"stack_trace":{"doc":"Stack trace (backtrace) functionality using DWARF …","t":"DGLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLFLLL","n":["CrateNamespace","StrongSectionRef","add_symbols","borrow","borrow_mut","clone_on_write","crate_names","dir","dump_symbol_map","dump_symbol_map_recursive","find_symbols_starting_with","find_symbols_starting_with_and_namespace","for_each_crate","from","get_crate","get_crate_and_namespace","get_crate_containing_address","get_crate_object_file_starting_with","get_crate_object_files_starting_with","get_crate_starting_with","get_crates_starting_with","get_my_current_task","get_section_containing_address","get_symbol","get_symbol_and_namespace","get_symbol_or_load","get_symbol_starting_with","get_tls_initializer_data","into","load_crate","load_crate_as_application","load_crates","method_get_crate_object_file_starting_with","method_get_crate_object_files_starting_with","name","new","recursive_namespace","rewrite_section_dependents","stack_trace","try_from","try_into","type_id"],"q":[[0,"stack_trace"]],"d":["This struct represents a namespace of crates and their “…","A Strong reference (Arc) to a LoadedSection.","Adds only global symbols in the given sections iterator to …","","","Duplicates this CrateNamespace into a new CrateNamespace, …","Returns a list of all of the crate names currently loaded …","Returns the directory that this CrateNamespace is based on.","Simple debugging function that returns the entire symbol …","Same as dump_symbol_map(), but includes symbols from …","Returns a copied list of the corresponding LoadedSections …","Similar to find_symbols_starting_with, but also includes a …","Iterates over all crates in this namespace and calls the …","Returns the argument unchanged.","Acquires the lock on this CrateNamespace’s crate list …","Acquires the lock on this CrateNamespace’s crate list …","Finds the crate that contains the given VirtualAddress in …","Like get_crate_starting_with(), but for crate object files …","Like get_crates_starting_with(), but for crate object file…","Finds the LoadedCrate whose name starts with the given …","Finds the LoadedCrates whose names start with the given …","Returns a cloned reference to the current task.","Finds the section that contains the given VirtualAddress …","Finds the corresponding LoadedSection reference for the …","Like get_symbol(), but also returns the exact …","Finds the corresponding LoadedSection reference for the …","Returns a weak reference to the LoadedSection whose name …","Returns a new copy of this namespace’s initial TLS area, …","Calls U::from(self).","Loads the specified crate into memory, allowing it to be …","Loads the specified application crate into this …","This function first loads all of the given crates’ …","Same as get_crate_object_file_starting_with(), but is a …","Same as get_crate_object_files_starting_with(), but is a …","Returns the name of this CrateNamespace, which is just …","Creates a new CrateNamespace that is completely empty (no …","Returns the recursive namespace that this CrateNamespace …","Finds all of the weak dependents (sections that depend on …","Get a stack trace using the default stack tracer based on …","","",""],"i":[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1],"f":[0,0,[[1,2,3],4],[[]],[[]],[1,1],[[1,3],[[7,[5,6]]]],[1,8],[1,9],[1,9],[[1,10],[[7,[6]]]],[[1,10],[[7,[6]]]],[[1,3,11]],[[]],[[1,10],[[14,[[13,[12]]]]]],[[[15,[1]],10],14],[[1,16,3],[[14,[[13,[12]]]]]],[[[15,[1]],10],14],[[[15,[1]],10],[[7,[6]]]],[[[15,[1]],10],14],[[[15,[1]],10],[[7,[6]]]],[[],[[14,[17]]]],[[1,16,3],14],[[1,10],[[19,[18]]]],[[1,10],14],[[1,10,[14,[1]],[15,[[22,[20,21]]]],3],[[19,[18]]]],[[1,10],[[19,[18]]]],[1,23],[[]],[[1,[15,[[26,[24,25]]]],[14,[1]],[15,[[22,[20,21]]]],3],[[27,[10]]]],[[[15,[1]],[15,[[26,[24,25]]]],[15,[[22,[20,21]]]],3],[[27,[28,10]]]],[[1,29,[14,[1]],[15,[[22,[20,21]]]],3],[[27,[10]]]],[[1,10],14],[[1,10],[[7,[6]]]],[1,10],[[9,8,[14,[[15,[1]]]]],1],[1,[[14,[[15,[1]]]]]],[[[15,[18]],[15,[18]],[15,[[22,[20,21]]]]],[[27,[10]]]],[[11,[14,[4]]],[[27,[10]]]],[[],27],[[],27],[[],30]],"c":[],"p":[[3,"CrateNamespace"],[8,"IntoIterator"],[15,"bool"],[15,"usize"],[3,"StrRef"],[3,"Global"],[3,"Vec"],[3,"NamespaceDir"],[3,"String"],[15,"str"],[8,"FnMut"],[3,"LoadedCrate"],[3,"CowArc"],[4,"Option"],[3,"Arc"],[3,"VirtualAddress"],[3,"TaskRef"],[3,"LoadedSection"],[3,"Weak"],[3,"MemoryManagementInfo"],[3,"DisableIrq"],[3,"Mutex"],[3,"TlsDataImage"],[8,"File"],[3,"Spin"],[3,"Mutex"],[4,"Result"],[3,"AppCrateRef"],[8,"Iterator"],[3,"TypeId"]]},\ +"stack_trace":{"doc":"Stack trace (backtrace) functionality using DWARF …","t":"DGLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLFLLL","n":["CrateNamespace","StrongSectionRef","add_symbols","borrow","borrow_mut","clone_on_write","crate_names","dir","dump_symbol_map","dump_symbol_map_recursive","find_symbols_starting_with","find_symbols_starting_with_and_namespace","for_each_crate","from","get_crate","get_crate_and_namespace","get_crate_containing_address","get_crate_object_file_starting_with","get_crate_object_files_starting_with","get_crate_starting_with","get_crates_starting_with","get_my_current_task","get_section_containing_address","get_symbol","get_symbol_and_namespace","get_symbol_or_load","get_symbol_starting_with","get_tls_initializer_data","into","load_crate","load_crate_as_application","load_crates","method_get_crate_object_file_starting_with","method_get_crate_object_files_starting_with","name","new","recursive_namespace","rewrite_section_dependents","stack_trace","try_from","try_into","type_id"],"q":[[0,"stack_trace"]],"d":["This struct represents a namespace of crates and their “…","A Strong reference (Arc) to a LoadedSection.","Adds only global symbols in the given sections iterator to …","","","Duplicates this CrateNamespace into a new CrateNamespace, …","Returns a list of all of the crate names currently loaded …","Returns the directory that this CrateNamespace is based on.","Simple debugging function that returns the entire symbol …","Same as dump_symbol_map(), but includes symbols from …","Returns a copied list of the corresponding LoadedSections …","Similar to find_symbols_starting_with, but also includes a …","Iterates over all crates in this namespace and calls the …","Returns the argument unchanged.","Acquires the lock on this CrateNamespace’s crate list …","Acquires the lock on this CrateNamespace’s crate list …","Finds the crate that contains the given VirtualAddress in …","Like get_crate_starting_with(), but for crate object files …","Like get_crates_starting_with(), but for crate object file…","Finds the LoadedCrate whose name starts with the given …","Finds the LoadedCrates whose names start with the given …","Returns a cloned reference to the current task.","Finds the section that contains the given VirtualAddress …","Finds the corresponding LoadedSection reference for the …","Like get_symbol(), but also returns the exact …","Finds the corresponding LoadedSection reference for the …","Returns a weak reference to the LoadedSection whose name …","Returns a new copy of this namespace’s initial TLS area, …","Calls U::from(self).","Loads the specified crate into memory, allowing it to be …","Loads the specified application crate into this …","This function first loads all of the given crates’ …","Same as get_crate_object_file_starting_with(), but is a …","Same as get_crate_object_files_starting_with(), but is a …","Returns the name of this CrateNamespace, which is just …","Creates a new CrateNamespace that is completely empty (no …","Returns the recursive namespace that this CrateNamespace …","Finds all of the weak dependents (sections that depend on …","Get a stack trace using the default stack tracer based on …","","",""],"i":[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1],"f":[0,0,[[1,2,3],4],[[]],[[]],[1,1],[[1,3],[[7,[5,6]]]],[1,8],[1,9],[1,9],[[1,10],[[7,[6]]]],[[1,10],[[7,[6]]]],[[1,3,11]],[[]],[[1,10],[[14,[[13,[12]]]]]],[[[15,[1]],10],14],[[1,16,3],[[14,[[13,[12]]]]]],[[[15,[1]],10],14],[[[15,[1]],10],[[7,[6]]]],[[[15,[1]],10],14],[[[15,[1]],10],[[7,[6]]]],[[],[[14,[17]]]],[[1,16,3],14],[[1,10],[[19,[18]]]],[[1,10],14],[[1,10,[14,[1]],[15,[[22,[20,21]]]],3],[[19,[18]]]],[[1,10],[[19,[18]]]],[1,[[24,[23]]]],[[]],[[1,[15,[[27,[25,26]]]],[14,[1]],[15,[[22,[20,21]]]],3],[[28,[10]]]],[[[15,[1]],[15,[[27,[25,26]]]],[15,[[22,[20,21]]]],3],[[28,[29,10]]]],[[1,30,[14,[1]],[15,[[22,[20,21]]]],3],[[28,[10]]]],[[1,10],14],[[1,10],[[7,[6]]]],[1,10],[[9,8,[14,[[15,[1]]]]],1],[1,[[14,[[15,[1]]]]]],[[[15,[18]],[15,[18]],[15,[[22,[20,21]]]]],[[28,[10]]]],[[11,[14,[4]]],[[28,[10]]]],[[],28],[[],28],[[],31]],"c":[],"p":[[3,"CrateNamespace"],[8,"IntoIterator"],[15,"bool"],[15,"usize"],[3,"StrRef"],[3,"Global"],[3,"Vec"],[3,"NamespaceDir"],[3,"String"],[15,"str"],[8,"FnMut"],[3,"LoadedCrate"],[3,"CowArc"],[4,"Option"],[3,"Arc"],[3,"VirtualAddress"],[3,"TaskRef"],[3,"LoadedSection"],[3,"Weak"],[3,"MemoryManagementInfo"],[3,"DisableIrq"],[3,"Mutex"],[3,"Tls"],[3,"LocalStorageDataImage"],[8,"File"],[3,"Spin"],[3,"Mutex"],[4,"Result"],[3,"AppCrateRef"],[8,"Iterator"],[3,"TypeId"]]},\ "stack_trace_frame_pointers":{"doc":"Stack trace (backtrace) functionality using frame pointers.","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "state_store":{"doc":"","t":"DLLLLFFFLLLL","n":["SSCached","borrow","borrow_mut","from","get","get_state","init","insert_state","into","try_from","try_into","type_id"],"q":[[0,"state_store"]],"d":["A thread-safe cached reference to a system-wide state. …","","","Returns the argument unchanged.","Tries to upgrade the internal Weak pointer to a Strong …","Returns a Weak reference to the SystemState of the …","","Inserts a new SystemState-implementing type into the map. ","Calls U::from(self).","","",""],"i":[0,2,2,2,2,0,0,0,2,2,2,2],"f":[0,[[]],[[]],[[]],[[[2,[1]]],[[4,[[3,[1]]]]]],[[],[[2,[1]]]],[[]],[1,[[4,[1]]]],[[]],[[],5],[[],5],[[],6]],"c":[],"p":[[8,"Any"],[3,"SSCached"],[3,"Arc"],[4,"Option"],[4,"Result"],[3,"TypeId"]]},\ "stdio":{"doc":"This crate creates the abstraction of stdio. They are …","t":"DDDDDGDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["KeyEventQueue","KeyEventQueueReader","KeyEventQueueWriter","KeyEventReadGuard","RingBufferEof","RingBufferEofRef","Stdio","StdioReadGuard","StdioReader","StdioWriteGuard","StdioWriter","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deref","drop","flush","from","from","from","from","from","from","from","from","from","from","get_reader","get_reader","get_reader_with_buf_capacity","get_writer","get_writer","into","into","into","into","into","into","into","into","into","into","is_eof","lock","lock","new","new","new","read","read_line","read_one","remaining_bytes","set_eof","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_read","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","write","write_one"],"q":[[0,"stdio"]],"d":["","A reader to keyevent ring buffer.","A writer to keyevent ring buffer.","A structure that allows applications to access keyboard …","A ring buffer with an EOF mark.","A reference to a ring buffer with an EOF mark with mutex …","A ring buffer containing bytes. It forms stdin, stdout and …","StdioReadGuard acts like MutexGuard, it locks the …","A reader to stdio buffers.","StdioReadGuard acts like MutexGuard, it locks the …","A writer to stdio buffers.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the reader of KeyEventQueue back to the previous …","The function required by Write trait. Currently it …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a reader to the stdio buffer. Note that each reader …","Get a reader to the ring buffer.","Get a reader to the stdio buffer with a customized buffer …","Get a writer to the stdio buffer.","Get a writer to the ring buffer.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Check if the EOF flag of the queue has been set.","Lock the reader and return a guard that can perform …","Lock the writer and return a guard that can perform …","Create a new stdio buffer.","Create a new ring buffer storing KeyEvent.","Create a new KeyEventReadGuard. This function takes a …","Read from the ring buffer. Returns the number of bytes …","Read a line from the ring buffer and return. Remaining …","Try to read a keyevent from the ring buffer. It returns …","Returns the number of bytes still in the read buffer.","Set the EOF flag of the queue to true.","","","","","","","","","","","","","","","","","","","","","","","","","Same as read(), but is non-blocking.","","","","","","","","","","","Write to the ring buffer, returniong the number of bytes …","Push a keyevent into the ring buffer."],"i":[0,0,0,0,0,0,0,0,0,0,0,22,9,12,6,10,5,1,2,3,4,22,9,12,6,10,5,1,2,3,4,1,2,3,4,1,2,3,4,5,5,6,22,9,12,6,10,5,1,2,3,4,9,10,9,9,10,22,9,12,6,10,5,1,2,3,4,12,1,2,9,10,5,12,1,3,12,6,1,2,3,4,22,9,12,6,10,5,1,2,3,4,22,9,12,6,10,5,1,2,3,4,12,22,9,12,6,10,5,1,2,3,4,6,4],"f":[0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[4,4],[[]],[[]],[[]],[[]],[5],[5],[6,[[8,[7]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[9,1],[10,3],[[9,11],1],[9,2],[10,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[12,13],[1,12],[2,6],[[],9],[[],10],[[3,[15,[14]]],5],[[12,[17,[16]]],[[8,[11,7]]]],[[1,18],[[8,[11,7]]]],[3,[[20,[19]]]],[12,11],[6],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[12,[17,[16]]],[[8,[11,7]]]],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[6,[17,[16]]],[[8,[11,7]]]],[[4,19]]],"c":[],"p":[[3,"StdioReader"],[3,"StdioWriter"],[3,"KeyEventQueueReader"],[3,"KeyEventQueueWriter"],[3,"KeyEventReadGuard"],[3,"StdioWriteGuard"],[3,"Error"],[4,"Result"],[3,"Stdio"],[3,"KeyEventQueue"],[15,"usize"],[3,"StdioReadGuard"],[15,"bool"],[8,"Fn"],[3,"Box"],[15,"u8"],[15,"slice"],[3,"String"],[3,"KeyEvent"],[4,"Option"],[3,"TypeId"],[3,"RingBufferEof"]]},\ @@ -163,14 +163,13 @@ var searchIndex = JSON.parse('{\ "sync_preemption":{"doc":"","t":"DGGGGGGGGGGLLLLLLLLLLLLLLLLLLLLLLLLL","n":["DisablePreemption","Mutex","MutexGuard","PreemptionSafeMutex","PreemptionSafeMutexGuard","PreemptionSafeRwLock","PreemptionSafeRwLockReadGuard","PreemptionSafeRwLockWriteGuard","RwLock","RwLockReadGuard","RwLockWriteGuard","borrow","borrow_mut","clone","clone_into","cmp","default","enter","eq","fmt","from","hash","into","lock","partial_cmp","post_unlock","post_unlock","read","to_owned","try_from","try_into","try_lock","try_read","try_write","type_id","write"],"q":[[0,"sync_preemption"]],"d":["A deadlock prevention method that disables preemption.","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[1,1],[[]],[[1,1],2],[[],1],[[]],[[1,1],3],[[1,4],5],[[]],[[1,6]],[[]],[[[9,[7,8]]]],[[1,1],[[10,[2]]]],[[]],[3],[[[11,[7,8]]]],[[]],[[],12],[[],12],[[[9,[7,8]]],10],[[[11,[7,8]]],10],[[[11,[7,8]]],10],[[],13],[[[11,[7,8]]]]],"c":[],"p":[[3,"DisablePreemption"],[4,"Ordering"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[8,"Sized"],[3,"Spin"],[3,"SpinMutex"],[4,"Option"],[3,"RwLock"],[4,"Result"],[3,"TypeId"]]},\ "task":{"doc":"Key types and functions for multitasking that build on the …","t":"NNNNDNNEDNGNEENDGENNNNDNNDENDGDDDFMMLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLFFLFLLLMLLLLLLLLLLLLLLLMLLLLLLLLMLLLMMMMLMLLLLLFLFFLLFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLMMMM","n":["AlreadyBorrowed","AlreadyInited","Blocked","Completed","CurrentTaskNotFound","Custom","Exception","ExitValue","ExitableTaskRef","Exited","FailureCleanupFunction","FromTask","InheritedStates","InitCurrentTaskError","Initing","JoinableTaskRef","KillHandler","KillReason","Killed","MismatchedTaskIds","NotInTasklist","Panic","PanicInfoOwned","Reaped","Requested","RestartInfo","RunState","Runnable","ScheduleOnDrop","SchedulerFunc","Task","TaskRef","WeakTaskRef","all_tasks","app_crate","argument","block","block_initing_task","bootstrap_task","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","column","create","default","deref","deref","deref","downgrade","drop","drop","drop","eq","eq","file","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_payload","func","get_env","get_hash","get_hash","get_my_current_task","get_my_current_task_id","get_namespace","get_task","has_exited","hash","hash","id","inner_mut","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_an_idle_task","is_application","is_joinable","is_restartable","is_runnable","is_running","is_suspended","join","kill","line","make_inited_task_runnable","mark_as_exited","mark_as_killed","mmi","msg","name","namespace","new","payload","pinned_cpu","post_context_switch_action","reap_if_orphaned","running_on_cpu","runstate","schedule","set_env","set_kill_handler","set_scheduler_policy","set_waker","suspend","take_kill_handler","task_switch","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unblock","unsuspend","upgrade","with_current_task","with_current_task_and_value","with_kstack","with_restart_info","app_crate","env","mmi","namespace"],"q":[[0,"task"],[231,"task::InheritedStates"]],"d":["The current task reference was already borrowed, thus it …","The current task was already initialized; its task ID is …","This task is blocked on something and is not able to be …","The Task ran to completion and returned the enclosed Any …","An error type indicating that the current task has not yet …","The new Task will be initialized with the enclosed custom …","A non-language-level problem, such as a Page Fault or some …","The two ways a Task can exit, including possible return …","A wrapper around TaskRef that allows this task to mark …","This Task has exited and can no longer be run. This covers …","The signature of a Task’s failure cleanup function.","The new Task will inherit its states from the enclosed Task…","The states used to initialize a new Task when creating it; …","An error type indicating that the current task was already …","This task is in the midst of being initialized/spawned.","A reference to a Task that can be joined; auto-derefs into …","The function signature of the callback that will be …","The list of possible reasons that a given Task was killed …","The Task did NOT run to completion but was instead killed …","The task IDs used as arguments to init_current_task() did …","The enclosed Task ID was not in the system-wide task list.","A Rust-level panic occurred while running this Task.","Just like core::panic::PanicInfo, but with owned String …","This Task had already exited, and now its ExitValue has …","The user or another task requested that this Task be …","A struct holding data items needed to restart a Task.","The set of possible runstates that a Task can be in.","This task is able to be scheduled in, but not necessarily …","An empty struct that invokes schedule() when it is dropped.","The signature for the function that selects the next task …","A structure that contains contextual information for a …","A shareable, cloneable reference to a Task that exposes …","A weak reference to a shared Task reference (TaskRef).","Returns a list containing a snapshot of all tasks that …","For application Tasks, this is effectively a reference to …","Stores the argument of the task for restartable tasks","Blocks this Task by setting its runstate to …","Blocks this Task if it is a newly-spawned task currently …","Bootstraps a new task from the current thread of execution.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Creates a new TaskRef, a shareable wrapper around the …","","","","","Creates a new weak reference to this Task, similar to Weak.","","Marks the inner Task as not joinable, meaning that it is …","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Constructs a new PanicInfoOwned object containing only the …","Stores the function of the task for restartable tasks","Gets a reference to this task’s Environment.","","","Returns a cloned reference to the current task.","Returns the unique ID of the current task.","Returns the namespace that this Task is loaded/linked into …","Returns a WeakTaskRef (shared reference) to the Task …","Returns true if this Task has been exited, i.e., if its …","","","The unique identifier of this Task.","Returns a mutable reference to this Task’s inner state. ","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Whether this Task is an idle task, the task that runs by …","Returns true if this is an application Task.","Returns true if this task is joinable, false if not.","Returns true if this Task was spawned as a restartable …","Returns whether this Task is runnable, i.e., able to be …","Returns true if this Task is currently running.","Returns true if this Task is suspended.","Blocks the current task until this task has exited.","Kills this Task (not a clean exit) without allowing it to …","","Makes this Task Runnable if it is a newly-spawned and …","Call this function to indicate that this task has …","Call this function to indicate that this task has been …","Memory management details: page tables, mappings, …","","The simple name of this Task.","This Task is linked into and runs within the context of …","Creates a new Task and initializes it to be non-Runnable.","","Returns the ID of the CPU this Task is pinned on, or None …","Perform any actions needed after a context switch.","Reaps this task (if orphaned) by taking and dropping its …","Returns the ID of the CPU this Task is currently running …","Returns the current RunState of this Task.","Yields the current CPU by selecting a new Task to run next,","Sets the Environment of this Task.","Registers a kill handler function for the current Task.","Sets the active scheduler policy used by schedule() to …","Sets the waker to be awoken when this task exits.","Suspends this Task.","Takes ownership of the current Task’s KillHandler …","Switches from the current task to the given next task.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unblocks this Task by setting its runstate to …","Unsuspends this Task.","Attempts to upgrade this WeakTaskRef to a TaskRef; see …","Invokes the given function with a reference to the current …","Similar to with_current_task(), but also accepts a value …","Exposes read-only access to this Task’s Stack by invoking","Invokes func with immutable access to this Task’s …","","","",""],"i":[23,23,3,22,0,25,21,0,0,3,0,25,0,0,3,0,0,0,22,23,23,21,0,3,21,0,0,3,0,0,0,0,0,0,2,50,2,2,0,50,2,13,16,15,25,14,21,10,11,22,3,23,24,50,2,13,16,15,25,14,21,10,11,22,3,23,24,10,11,3,10,11,3,14,10,14,13,15,10,10,2,13,16,10,3,14,2,2,13,15,14,14,21,21,10,11,22,3,23,24,50,2,13,16,15,25,25,14,14,21,10,11,22,3,23,24,14,50,2,2,10,0,0,2,0,2,2,10,2,2,50,2,13,16,15,25,14,21,10,11,22,3,23,24,2,2,10,2,2,2,2,13,10,14,2,15,15,2,14,2,2,2,14,2,15,15,2,2,0,2,0,0,13,2,0,0,10,11,3,2,14,21,50,2,13,16,15,25,14,21,10,11,22,3,23,24,50,2,13,16,15,25,14,21,10,11,22,3,23,24,50,2,13,16,15,25,14,21,10,11,22,3,23,24,2,2,11,0,0,2,2,51,51,51,51],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],0,0,[2,[[4,[3,3]]]],[2,[[4,[3,3]]]],[[5,[7,[6]],8],[[4,[9]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[10,10],[11,11],[3,3],[[]],[[]],[[]],0,[[2,12],13],[[],14],[13],[15],[10],[10,11],[2],[13],[16],[[10,10],17],[[3,3],17],0,[[2,18],[[4,[19]]]],[[2,18],[[4,[19]]]],[[13,18],20],[[15,18],20],[[14,18],[[4,[19]]]],[[14,18],[[4,[19]]]],[[21,18],[[4,[19]]]],[[21,18],[[4,[19]]]],[[10,18],20],[[11,18],20],[[22,18],[[4,[19]]]],[[3,18],[[4,[19]]]],[[23,18],20],[[24,18],20],[[]],[[]],[[]],[[]],[[]],[[]],[2,25],[26,14],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[29,[27,28]]],14],0,[2,[[33,[[32,[30,31]]]]]],[[[0,[34,35]],36],37],[[[0,[34,35]],36],37],[[],[[38,[10]]]],[[],39],[2,[[33,[40]]]],[39,[[38,[11]]]],[2,17],[[2,41]],[[10,41]],0,[2,42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[2,17],[10,17],[2,17],[2,17],[2,17],[2,17],[13,[[4,[22,9]]]],[[10,21],[[4,[9]]]],0,[2,[[4,[3,3]]]],[[15,[29,[27]]],[[4,[9]]]],[[15,21],[[4,[9]]]],0,0,0,0,[[[38,[6]],25],[[4,[2,9]]]],0,[2,[[38,[5]]]],[15,43],[15],[2,[[38,[5]]]],[2,3],[[],17],[[2,[33,[[32,[30,31]]]]]],[44,[[4,[9]]]],[45],[[13,46]],[2],[[],[[38,[44]]]],[[10,5,43]],[[]],[[]],[[]],[[],47],[[],47],[[],47],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[[],48],[2,[[4,[3,3]]]],[2],[11,[[38,[10]]]],[49,[[4,[24]]]],[49,4],[[2,49]],[[2,49]],0,0,0,0],"c":[],"p":[[3,"Vec"],[3,"Task"],[4,"RunState"],[4,"Result"],[3,"CpuId"],[3,"Stack"],[3,"NoDrop"],[6,"MmiRef"],[15,"str"],[3,"TaskRef"],[3,"WeakTaskRef"],[6,"FailureCleanupFunction"],[3,"JoinableTaskRef"],[3,"PanicInfoOwned"],[3,"ExitableTaskRef"],[3,"ScheduleOnDrop"],[15,"bool"],[3,"Formatter"],[3,"Error"],[6,"Result"],[4,"KillReason"],[4,"ExitValue"],[4,"InitCurrentTaskError"],[3,"CurrentTaskNotFound"],[4,"InheritedStates"],[3,"PanicInfo"],[8,"Any"],[3,"Global"],[3,"Box"],[3,"Environment"],[3,"Spin"],[3,"Mutex"],[3,"Arc"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[4,"Option"],[15,"usize"],[3,"CrateNamespace"],[8,"Hasher"],[3,"TaskInner"],[3,"PreemptionGuard"],[6,"KillHandler"],[6,"SchedulerFunc"],[3,"Waker"],[3,"String"],[3,"TypeId"],[8,"FnOnce"],[3,"RestartInfo"],[13,"Custom"]],"a":{"exit":[151],"orphan":[146],"reap":[151],"yield":[168],"zombie":[146]}},\ "task_fs":{"doc":"This crate contains the direcotires and files that …","t":"DDRRDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["MmiDir","MmiFile","TASKS_DIRECTORY_NAME","TASKS_DIRECTORY_PATH","TaskDir","TaskFile","TaskFs","as_mapping","as_mapping","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","flush","flush","from","from","from","from","from","get","get","get","get_absolute_path","get_absolute_path","get_absolute_path","get_absolute_path","get_absolute_path","get_name","get_name","get_name","get_name","get_name","get_parent_dir","get_parent_dir","get_parent_dir","get_parent_dir","get_parent_dir","init","insert","insert","insert","into","into","into","into","into","len","len","list","list","list","name","new","new","new","new","read_at","read_at","remove","remove","remove","set_parent_dir","set_parent_dir","set_parent_dir","set_parent_dir","set_parent_dir","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","write_at","write_at"],"q":[[0,"task_fs"]],"d":["Lazily computed directory that contains subfiles and …","Lazily computed file that contains information about a …","The name of the VFS directory that exposes task info in …","The absolute path of the tasks directory, which is …","A lazily computed directory that holds files and …","Lazily computed file that holds information about this …","The top level directory that includes a …","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","Initializes the tasks virtual filesystem directory within …","This function adds a newly created fs node (the argument) …","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Returns a string listing all the children in the directory","Returns a string listing all the children in the directory","Returns a string listing all the children in the directory","The name of the directory","Creates a new directory and passes a pointer to the new …","","Creates a new directory and passes a pointer to the new …","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,5,7,10,1,11,5,7,10,1,11,5,1,5,7,10,1,11,5,7,10,11,7,10,1,11,5,7,10,1,11,5,7,10,1,11,5,0,7,10,11,7,10,1,11,5,1,5,7,10,11,10,10,1,11,5,1,5,7,10,11,7,10,1,11,5,7,10,1,11,5,7,10,1,11,5,7,10,1,11,5,1,5],"f":[0,0,0,0,0,0,0,[1,[[4,[2,3]]]],[5,[[4,[2,3]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,[[4,[6]]]],[5,[[4,[6]]]],[[]],[[]],[[]],[[]],[[]],[[7,3],[[9,[8]]]],[[10,3],[[9,[8]]]],[[11,3],[[9,[8]]]],[7,12],[10,12],[1,12],[11,12],[5,12],[7,12],[10,12],[1,12],[11,12],[5,12],[7,[[9,[13]]]],[10,[[9,[13]]]],[1,[[9,[13]]]],[11,[[9,[13]]]],[5,[[9,[13]]]],[[],[[4,[3]]]],[[7,8],[[4,[[9,[8]],3]]]],[[10,8],[[4,[[9,[8]],3]]]],[[11,8],[[4,[[9,[8]],3]]]],[[]],[[]],[[]],[[]],[[]],[1,14],[5,14],[7,[[15,[12]]]],[10,[[15,[12]]]],[11,[[15,[12]]]],0,[[12,13,14,16],[[4,[10,3]]]],[[14,16],1],[[14,16],11],[[14,16],5],[[1,[18,[17]],14],[[4,[14,6]]]],[[5,[18,[17]],14],[[4,[14,6]]]],[[7,8],[[9,[8]]]],[[10,8],[[9,[8]]]],[[11,8],[[9,[8]]]],[[7,19]],[[10,19]],[[1,19]],[[11,19]],[[5,19]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],20],[[],20],[[],20],[[],20],[[],20],[[1,[18,[17]],14],[[4,[14,6]]]],[[5,[18,[17]],14],[[4,[14,6]]]]],"c":[],"p":[[3,"TaskFile"],[3,"MappedPages"],[15,"str"],[4,"Result"],[3,"MmiFile"],[4,"IoError"],[3,"TaskFs"],[4,"FileOrDir"],[4,"Option"],[3,"TaskDir"],[3,"MmiDir"],[3,"String"],[6,"DirRef"],[15,"usize"],[3,"Vec"],[3,"WeakTaskRef"],[15,"u8"],[15,"slice"],[6,"WeakDirRef"],[3,"TypeId"]]},\ -"task_struct":{"doc":"This crate contains the basic Task structure, which holds …","t":"NNNNENNENGENNDNNDENDDMMLLLLLLLLLLLLLLLLLLLLMLLLMLLLLLLLLLLLLLLLLLLLMLLLLLMLLLLLLLLLMLLLLLMMMLMMMMLMLMMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMMMM","n":["Blocked","Completed","Custom","Exception","ExitValue","Exited","FromTask","InheritedStates","Initing","KillHandler","KillReason","Killed","Panic","PanicInfoOwned","Reaped","Requested","RestartInfo","RunState","Runnable","Task","TaskInner","app_crate","argument","block","block_initing_task","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","column","default","drop","eq","file","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_payload","func","get_env","get_hash","get_namespace","has_exited","hash","id","inner_mut","into","into","into","into","into","into","into","into","is_an_idle_task","is_application","is_restartable","is_runnable","is_running","is_suspended","kill_handler","kstack","line","make_inited_task_runnable","mmi","msg","name","namespace","new","payload","pinned_cpu","pinned_cpu","restart_info","running_on_cpu","runstate","saved_sp","set_env","suspend","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unblock","unsuspend","waker","with_kstack","with_restart_info","app_crate","env","mmi","namespace"],"q":[[0,"task_struct"],[140,"task_struct::InheritedStates"]],"d":["This task is blocked on something and is not able to be …","The Task ran to completion and returned the enclosed Any …","The new Task will be initialized with the enclosed custom …","A non-language-level problem, such as a Page Fault or some …","The two ways a Task can exit, including possible return …","This Task has exited and can no longer be run. This covers …","The new Task will inherit its states from the enclosed Task…","The states used to initialize a new Task when creating it; …","This task is in the midst of being initialized/spawned.","The function signature of the callback that will be …","The list of possible reasons that a given Task was killed …","The Task did NOT run to completion but was instead killed …","A Rust-level panic occurred while running this Task.","Just like core::panic::PanicInfo, but with owned String …","This Task had already exited, and now its ExitValue has …","The user or another task requested that this Task be …","A struct holding data items needed to restart a Task.","The set of possible runstates that a Task can be in.","This task is able to be scheduled in, but not necessarily …","A structure that contains contextual information for a …","The parts of a Task that may be modified after its …","For application Tasks, this is effectively a reference to …","Stores the argument of the task for restartable tasks","Blocks this Task by setting its runstate to …","Blocks this Task if it is a newly-spawned task currently …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Constructs a new PanicInfoOwned object containing only the …","Stores the function of the task for restartable tasks","Gets a reference to this task’s Environment.","","Returns the namespace that this Task is loaded/linked into …","Returns true if this Task has been exited, i.e., if its …","","The unique identifier of this Task.","Returns a mutable reference to this Task’s inner state. ","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Whether this Task is an idle task, the task that runs by …","Returns true if this is an application Task.","Returns true if this Task was spawned as a restartable …","Returns whether this Task is runnable, i.e., able to be …","Returns true if this Task is currently running.","Returns true if this Task is suspended.","The function that will be called when this Task panics or …","The kernel stack, which all Tasks must have in order to …","","Makes this Task Runnable if it is a newly-spawned and …","Memory management details: page tables, mappings, …","","The simple name of this Task.","This Task is linked into and runs within the context of …","Creates a new Task and initializes it to be non-Runnable.","","Returns the ID of the CPU this Task is pinned on, or None …","Whether or not this task is pinned to a certain CPU. The …","Stores the restartable information of the task. …","Returns the ID of the CPU this Task is currently running …","Returns the current RunState of this Task.","the saved stack pointer value, used for task switching.","Sets the Environment of this Task.","Suspends this Task.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unblocks this Task by setting its runstate to …","Unsuspends this Task.","The waker that is awoken when this task completes.","Exposes read-only access to this Task’s Stack by invoking","Invokes func with immutable access to this Task’s …","","","",""],"i":[2,10,11,9,0,2,11,0,2,0,0,10,9,0,2,9,0,0,2,0,0,1,32,1,1,32,24,1,11,4,9,10,2,32,24,1,11,4,9,10,2,2,2,4,4,1,2,4,1,1,4,4,9,9,10,2,32,24,1,11,11,4,4,9,10,2,4,32,1,1,1,1,1,1,1,32,24,1,11,4,9,10,2,1,1,1,1,1,1,24,24,4,1,1,4,1,1,1,4,1,24,24,1,1,24,1,1,2,1,4,9,32,24,1,11,4,9,10,2,32,24,1,11,4,9,10,2,32,24,1,11,4,9,10,2,1,1,24,1,1,33,33,33,33],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,[[3,[2,2]]]],[1,[[3,[2,2]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[[]],0,[[],4],[1],[[2,2],5],0,[[1,6],7],[[1,6],7],[[4,6],7],[[4,6],[[3,[8]]]],[[9,6],7],[[9,6],[[3,[8]]]],[[10,6],7],[[2,6],7],[[]],[[]],[[]],[[]],[1,11],[[]],[12,4],[[]],[[]],[[]],[[[14,[13]]],4],0,[1,[[17,[[16,[15]]]]]],[[[0,[18,19]],20],21],[1,[[17,[22]]]],[1,5],[[1,23]],0,[1,24],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[1,5],[1,5],[1,5],[1,5],[1,5],0,0,0,[1,[[3,[2,2]]]],0,0,0,0,[[[26,[25]],11],[[3,[1,27]]]],0,[1,[[26,[28]]]],0,0,[1,[[26,[28]]]],[1,2],0,[[1,[17,[[16,[15]]]]]],[1],[[]],[[],29],[[],29],[[],29],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[1,[[3,[2,2]]]],[1],0,[[1,31]],[[1,31]],0,0,0,0],"c":[],"p":[[3,"Task"],[4,"RunState"],[4,"Result"],[3,"PanicInfoOwned"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"KillReason"],[4,"ExitValue"],[4,"InheritedStates"],[3,"PanicInfo"],[8,"Any"],[3,"Box"],[3,"Environment"],[6,"Mutex"],[3,"Arc"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[3,"CrateNamespace"],[8,"Hasher"],[3,"TaskInner"],[3,"Stack"],[4,"Option"],[15,"str"],[3,"CpuId"],[3,"String"],[3,"TypeId"],[8,"FnOnce"],[3,"RestartInfo"],[13,"Custom"]]},\ +"task_struct":{"doc":"This crate contains the basic Task structure, which holds …","t":"NNNNENNENGENNDNNDENDDMMLLLLLLLLLLLLLLLLLLLLMLLLMLLLLLLLLLLLLLLLLLLLMLLLLLMLLLLLLLLLMLLLLLMMMLMMMMLMLMMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMMMM","n":["Blocked","Completed","Custom","Exception","ExitValue","Exited","FromTask","InheritedStates","Initing","KillHandler","KillReason","Killed","Panic","PanicInfoOwned","Reaped","Requested","RestartInfo","RunState","Runnable","Task","TaskInner","app_crate","argument","block","block_initing_task","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","column","default","drop","eq","file","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_payload","func","get_env","get_hash","get_namespace","has_exited","hash","id","inner_mut","into","into","into","into","into","into","into","into","is_an_idle_task","is_application","is_restartable","is_runnable","is_running","is_suspended","kill_handler","kstack","line","make_inited_task_runnable","mmi","msg","name","namespace","new","payload","pinned_cpu","pinned_cpu","restart_info","running_on_cpu","runstate","saved_sp","set_env","suspend","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unblock","unsuspend","waker","with_kstack","with_restart_info","app_crate","env","mmi","namespace"],"q":[[0,"task_struct"],[140,"task_struct::InheritedStates"]],"d":["This task is blocked on something and is not able to be …","The Task ran to completion and returned the enclosed Any …","The new Task will be initialized with the enclosed custom …","A non-language-level problem, such as a Page Fault or some …","The two ways a Task can exit, including possible return …","This Task has exited and can no longer be run. This covers …","The new Task will inherit its states from the enclosed Task…","The states used to initialize a new Task when creating it; …","This task is in the midst of being initialized/spawned.","The function signature of the callback that will be …","The list of possible reasons that a given Task was killed …","The Task did NOT run to completion but was instead killed …","A Rust-level panic occurred while running this Task.","Just like core::panic::PanicInfo, but with owned String …","This Task had already exited, and now its ExitValue has …","The user or another task requested that this Task be …","A struct holding data items needed to restart a Task.","The set of possible runstates that a Task can be in.","This task is able to be scheduled in, but not necessarily …","A structure that contains contextual information for a …","The parts of a Task that may be modified after its …","For application Tasks, this is effectively a reference to …","Stores the argument of the task for restartable tasks","Blocks this Task by setting its runstate to …","Blocks this Task if it is a newly-spawned task currently …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Constructs a new PanicInfoOwned object containing only the …","Stores the function of the task for restartable tasks","Gets a reference to this task’s Environment.","","Returns the namespace that this Task is loaded/linked into …","Returns true if this Task has been exited, i.e., if its …","","The unique identifier of this Task.","Returns a mutable reference to this Task’s inner state. ","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Whether this Task is an idle task, the task that runs by …","Returns true if this is an application Task.","Returns true if this Task was spawned as a restartable …","Returns whether this Task is runnable, i.e., able to be …","Returns true if this Task is currently running.","Returns true if this Task is suspended.","The function that will be called when this Task panics or …","The kernel stack, which all Tasks must have in order to …","","Makes this Task Runnable if it is a newly-spawned and …","Memory management details: page tables, mappings, …","","The simple name of this Task.","This Task is linked into and runs within the context of …","Creates a new Task and initializes it to be non-Runnable.","","Returns the ID of the CPU this Task is pinned on, or None …","Whether or not this task is pinned to a certain CPU. The …","Stores the restartable information of the task. …","Returns the ID of the CPU this Task is currently running …","Returns the current RunState of this Task.","the saved stack pointer value, used for task switching.","Sets the Environment of this Task.","Suspends this Task.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unblocks this Task by setting its runstate to …","Unsuspends this Task.","The waker that is awoken when this task completes.","Exposes read-only access to this Task’s Stack by invoking","Invokes func with immutable access to this Task’s …","","","",""],"i":[2,10,11,9,0,2,11,0,2,0,0,10,9,0,2,9,0,0,2,0,0,1,32,1,1,32,24,1,11,4,9,10,2,32,24,1,11,4,9,10,2,2,2,4,4,1,2,4,1,1,4,4,9,9,10,2,32,24,1,11,11,4,4,9,10,2,4,32,1,1,1,1,1,1,1,32,24,1,11,4,9,10,2,1,1,1,1,1,1,24,24,4,1,1,4,1,1,1,4,1,24,24,1,1,24,1,1,2,1,4,9,32,24,1,11,4,9,10,2,32,24,1,11,4,9,10,2,32,24,1,11,4,9,10,2,1,1,24,1,1,33,33,33,33],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,[[3,[2,2]]]],[1,[[3,[2,2]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[[]],0,[[],4],[1],[[2,2],5],0,[[1,6],7],[[1,6],7],[[4,6],[[3,[8]]]],[[4,6],7],[[9,6],[[3,[8]]]],[[9,6],7],[[10,6],7],[[2,6],7],[[]],[[]],[[]],[[]],[1,11],[12,4],[[]],[[]],[[]],[[]],[[[14,[13]]],4],0,[1,[[17,[[16,[15]]]]]],[[[0,[18,19]],20],21],[1,[[17,[22]]]],[1,5],[[1,23]],0,[1,24],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[1,5],[1,5],[1,5],[1,5],[1,5],0,0,0,[1,[[3,[2,2]]]],0,0,0,0,[[[26,[25]],11],[[3,[1,27]]]],0,[1,[[26,[28]]]],0,0,[1,[[26,[28]]]],[1,2],0,[[1,[17,[[16,[15]]]]]],[1],[[]],[[],29],[[],29],[[],29],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[1,[[3,[2,2]]]],[1],0,[[1,31]],[[1,31]],0,0,0,0],"c":[],"p":[[3,"Task"],[4,"RunState"],[4,"Result"],[3,"PanicInfoOwned"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"KillReason"],[4,"ExitValue"],[4,"InheritedStates"],[3,"PanicInfo"],[8,"Any"],[3,"Box"],[3,"Environment"],[6,"Mutex"],[3,"Arc"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[3,"CrateNamespace"],[8,"Hasher"],[3,"TaskInner"],[3,"Stack"],[4,"Option"],[15,"str"],[3,"CpuId"],[3,"String"],[3,"TypeId"],[8,"FnOnce"],[3,"RestartInfo"],[13,"Custom"]]},\ "text_display":{"doc":"This crate defines a text displayable. A text displayable …","t":"DLLLLLLLLLLLLLLLLLLL","n":["TextDisplay","borrow","borrow_mut","display","fmt","from","get_bg_color","get_dimensions","get_index","get_location","get_next_index","get_size","into","new","reset_cache","set_size","set_text","try_from","try_into","type_id"],"q":[[0,"text_display"]],"d":["A text displayable profiles the size and color of a block …","","","","","Returns the argument unchanged.","Gets the background color of the text area","Gets the size of a text displayable in number of …","Translate the location of a character to its index in the …","Translate the index of a character in the text to the …","Gets the index of next character to be displayabled. It is …","","Calls U::from(self).","Creates a new text displayable.","Clear the cache of the text displayable.","","Sets the text of the text displayable","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[0,[[]],[[]],[[1,2,[6,[[0,[3,[5,[4]]]]]]],[[9,[7,8]]]],[[1,10],11],[[]],[1,4],[1],[[1,12,12],12],[[1,12]],[1,12],[1],[[]],[[12,12,4,4],[[9,[1,8]]]],[1],[[1,12,12]],[[1,8]],[[],9],[[],9],[[],13]],"c":[],"p":[[3,"TextDisplay"],[3,"Coord"],[8,"Pixel"],[3,"Color"],[8,"From"],[3,"Framebuffer"],[3,"Rectangle"],[15,"str"],[4,"Result"],[3,"Formatter"],[6,"Result"],[15,"usize"],[3,"TypeId"]]},\ "text_terminal":{"doc":"A text-mode terminal emulator. ","t":"NEDNSSSDNSSNSNNNNNNNNNNNNNNSEENENDESNSNNSSNESQNNSSSNNSNDNDNNNSNNSSNNESNNDSEDNDNNNNNNNNNNNNNNNNNNSNSNNNDSSSDDEEDDENDNDDNNSIDDNDSNDNNDDNSNNENNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLLMMLLLLLLLLKLLKLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLMMMMMMMMMMMMMMM","n":["AlternateFont","AnsiStyleCodes","AsciiControlCodes","AtUnit","AutomaticCarriageReturn","BLINK","BRIGHT","BackgroundColor","BackgroundColor","Backspace","BackwardsDelete","Bar","Bell","Black","Blink","BlinkRapid","Blue","Bottom","Bright","BrightBlack","BrightBlue","BrightCyan","BrightGreen","BrightMagenta","BrightRed","BrightWhite","BrightYellow","CarriageReturn","CarriageReturnSendsLineFeed","Character","Circled","Color","Color8Bit","Column","CursorStyle","CursosPositionReport","Cyan","DIM","Default","Delete","DeviceStatusOk","DeviceStatusRequest","Dim","DisplayAction","DisplayControlChars","DisplayError","DoulbeUnderlinedOrNotBright","Down","ESCAPE_DELIM","ESCAPE_PREFIX","ESCAPE_SUFFIX","EmptyBox","Erase","Escape","FilledBox","ForegroundColor","ForegroundColor","FormatFlags","Fraktur","Framed","Green","HIDDEN","Hidden","Hidden","INVERSE","ITALIC","Insert","Insert","InsertMode","InsertMode","Inverse","Italic","Line","LineFeed","LineFeedSendsCarriageReturn","LineIndex","Magenta","ModeSwitch","Multi","No","No","No","None","NotBlink","NotBrightNorDim","NotFramedOrCircled","NotHidden","NotInverse","NotItalicNorFraktur","NotOverlined","NotStrikethrough","NotSuperOrSubscript","NotUnderlined","Overlined","Overwrite","Overwrite","PageBreak","PrimaryFont","RESET_SUFFIX","RGB","Red","Reset","Row","SET_SUFFIX","STRIKETHROUGH","SUFFIX","ScreenPoint","ScreenSize","ScrollAction","ScrollPosition","ScrollbackBuffer","ScrollbackBufferPoint","ShowCursor","Single","StatusReportCommands","Strikethrough","Style","StyleDiff","Subscript","Superscript","Tab","TerminalBackend","TerminalMode","TextTerminal","Top","TtyBackend","UNDERLINE","Underlined","UnderlinedColor","UnderlinedColor","Underscore","Unit","UnitIndex","Up","VerticalTab","Visible","White","Wrap","Yellow","Yes","Yes","Yes","_IdeogramDoubleOverlined","_IdeogramDoubleUnderlined","_IdeogramOverlined","_IdeogramStressMarking","_IdeogramUnderlined","_NotIdeogram","_NotProportionalSpacing","_ProportionalSpacing","add","add","add","add","add","add","add_assign","add_assign","add_assign","add_assign","add_assign","add_assign","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits_that_differ","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clear_screen","clear_screen","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","complement","contains","default","default","default","default","default","default","default","default","default","default","default","default","default","default","default","default","default","default","default","deref","deref","deref","deref_mut","deref_mut","diff","difference","display","display","displayable_width","drop","empty","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","extend","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","handle_input","hash","index","index","index","index_mut","index_mut","index_mut","insert","intersection","intersects","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","is_all","is_empty","last_column","last_row","move_cursor_by","move_cursor_by","move_cursor_to","move_cursor_to","new","new","next","not","num_columns","num_rows","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","remove","reset_screen","reset_screen","resize_screen","screen_size","screen_size","screen_size","set","set_insert_mode","set_insert_mode","sub","sub","sub","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","symmetric_difference","to_escape_code","to_escape_code","to_escape_code","to_escape_code","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","toggle","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","union","update_screen_size","update_screen_size","write_bytes","write_bytes","blue","green","red","num_units","screen_end","screen_start","screen_start","screen_start","screen_start","scrollback_end","scrollback_end","scrollback_start","scrollback_start","scrollback_start","width_difference"],"q":[[0,"text_terminal"],[656,"text_terminal::Color"],[659,"text_terminal::DisplayAction"]],"d":["Sets the font to an alternate font. There are 10 …","The set of all possible ANSI escape codes for setting text …","The set of ASCII values that are non-printable characters …","The terminal is scrolled to a specific point, given by the ","(LF/NL) Automatically follow a Line Feed (LF), Vertical …","If set, the unit box where this character is displayed …","If set, this character is displayed in a bright color, …","A wrapper type around Color that is used in …","Set the background color: the color displayed behind the …","(BS) Moves the cursor backwards by one unit/character, but …","(DEL) Backwards-deletes the character before (to the left …","A line before (to the left of) the character box.","(BEL) Plays a terminal bell or beep.","","The text will blink at slower rate, under 150 blinks per …","The text will blink rapidly at a fast rate, over 150 …","","The terminal position is scrolled all the way down.","Bright or bold text.","Gray/grey.","","","","","","True pure white. ","","(CR) Moves the cursor to the beginning of the line, i.e., …","Whether a Carriage Return subsequently issues a Line Feed …","The character stored in each Unit of the terminal screen. ","The text will be displayed with a circle or oval …","The set of colors that can be displayed by a terminal …","8-bit color, as introduced in xterm.","A column index or number of columns in the x-dimension of …","","(CSR) Queries the terminal device for a cursor position …","","If set, this character is displayed using a dim or faint …","The default color, which is generally unspecified and …","Remove the given number of units from the screen starting …","The response to a DeviceStatusRequest indicating the …","(DSR) Queries the terminal device for its status. A reply …","Dim or faint text.","A pending action to display content from the terminal’s …","(DECCRM) Display control characters. This is off by …","The Error type returned by the TerminalBackend::display() …","The text will be underlined twice, or, depending on the …","Scroll the screen down by the included number of lines.","","","","An empty box that surrounds the character but does not …","Erases the contents displayed on the screen in the given …","(ESC) The escape character.","A rectangle that covers the entire character box. This is …","A wrapper type around Color that is used in …","Set the foreground color: the color the text will be …","The flags that describe the formatting of a given text …","Sets the font to be a blackletter font, which is a …","The text will be displayed with a rectangular box …","","If set, this character is not displayed at all, only a …","The text will be concealed/invisible and not displayed at …","","If set, this character is displayed with inversed/reversed …","If set, this character is displayed in italics.","Inserts the content from the given range in the scrollback …","Characters will be inserted at the current cursor, …","Whether text characters printed to the terminal will be …","(DECIM) Set insert mode. This is off by default, meaning …","The foreground and background colors will be swapped. The …","Italicized text.","An entire unbroken line of characters (Units) that has …","(LF) Moves the cursor to the next line, i.e., Line feed, …","Whether a Line Feed (newline / new line) subsequently …","An index of a Line in the scrollback buffer.","","The set of “frequently-supported” commands to switch …","","","","","Do nothing, do not scroll the screen.","Disables Blink or BlinkRapid.","Normal font intensity: Disables Bright or Dim.","Disables Framed or Circled.","Disables Hidden``: text is displayed as normal. Sometimes …","Disables Inverse: foreground colors and background colors …","Normal font sytle: Disables Italic or Fraktur.","Disabled Overlined.","Disables Strikethrough: text is not crossed out.","Disables Superscript or Subscript.","Disables Underline or DoubleUnderline.","The text will be overlined: displayed with a line on top …","Replace the contents displayed on the screen starting at …","Characters will be overwritten in place. Sometimes called …","(FF) Inserts a page break (form feed) to move the …","Sets the font to the primary default font.","If this value comes after one of the above command values, …","True 24-bit RGB color, with 8 bits for each of the red, …","","Resets or clears all styles.","A row index or number of rows in the y-dimension of the …","If this value comes after one of the above command values, …","If set, this character is displayed with a strike-through, …","The value that comes after one of the above command values.","A 2D position value that represents a point on the screen, …","The size of a terminal screen, expressed as the number of …","A pending action to scroll the screen up or down by a …","The position (“viewport”) that the terminal is …","The scrollback buffer is stored as a row-major vector of …","A 2D position value that represents a point in the …","Whether the screen cursor is visible.","","","The text will be striked through, i.e., crossed out with a …","The style of text, including formatting and color choice, …","A representation of the difference between two Styles.","","","(HT) Inserts a horizontal tab.","","The set of options that determine terminal behavior.","A text-based terminal that supports the ANSI, xterm, …","The terminal is scrolled all the way up.","A terminal backend that is simply a character device TTY …","If set, this character is displayed with a single …","Underlined text. ","A wrapper type around Color that is used in …","Sets the underline color. Without this, the underline …","A line beneath the character box.","A Unit is a single character block displayed in the …","An index of a Unit in a Line in the scrollback buffer.","Scroll the screen up by the included number of lines.","(VT) Inserts a vertical tab.","","More of a light gray/grey. Use BrightWhite for true white.","Whether or not to wrap cursor movement or text display to …","","","","","","","","","","Disables all Ideogram styles.","Disables _ProportionalSpacing.","Proportional spacing, which sets the Teletex character …","","","","","","","","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns a bit mask of the bits that differ between self …","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Clears the entire terminal screen.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the difference between the flags in self and other.","Displays the given range of Units in the scrollback buffer …","","Returns the number of columns required to display this …","","Returns an empty set of flags.","","","","","","","","","","","","","","","","","","","","","","","","Flushes the entire viewable region of the terminal’s …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","Pulls as many bytes as possible from the given Reader and …","","","","","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Returns the index of the final Column, which is …","Returns the index of the final Row, which is num_rows - 1.","Moves the on-screen cursor by the given number of rows and …","","Moves the on-screen cursor to the given position.","","Create an empty TextTerminal with no text content.","","","Returns the complement of this set of flags.","The width of the screen viewport in number of columns (x …","The height of the screen viewport in number of rows (y …","","","","","","","","Removes the specified flags in-place.","Fully reset the terminal screen to its initial default …","","Resizes this terminal’s screen to be width columns and …","Returns the screen size of the terminal.","Returns the size of this terminal’s screen.","","Inserts or removes the specified flags depending on the …","TODO: change this to support any arbitrary terminal mode","","Returns the set difference of the two sets of flags.","","","","","","","Disables all flags enabled in the set.","","","","","","","Returns the symmetric difference between the flags in self …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Resizes the terminal screen. TODO: perform a full reflow …","","A temporary hack to allow direct writing to the backend’…","","","","","","","","","","","","","","","",""],"i":[44,0,0,16,53,7,7,0,44,54,54,30,54,11,44,44,11,16,44,11,11,11,11,11,11,11,11,54,0,0,44,0,11,0,0,55,11,7,11,33,55,55,44,0,53,38,44,20,44,44,44,30,33,54,30,0,44,0,44,44,11,7,44,23,7,7,33,22,0,53,44,44,0,54,0,0,11,0,17,21,24,25,20,44,44,44,44,44,44,44,44,44,44,44,33,22,54,44,53,11,11,44,0,53,7,55,0,0,0,0,0,0,0,17,0,44,0,0,44,44,54,0,0,0,16,0,7,44,0,44,30,0,0,20,54,23,11,0,11,21,24,25,44,44,44,44,44,44,44,44,1,2,3,4,5,6,1,2,3,4,5,6,7,7,7,7,7,7,7,7,7,32,54,53,55,39,10,11,12,13,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,32,54,53,55,39,10,11,12,13,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,38,10,11,12,13,14,15,7,16,17,18,19,1,2,3,4,5,6,20,21,22,23,24,25,26,11,12,13,14,15,7,16,17,18,19,1,2,3,4,5,6,20,21,22,23,24,25,26,7,1,2,3,4,5,6,7,7,11,12,13,14,15,7,16,29,17,18,19,1,2,3,4,5,6,30,26,29,31,18,29,31,15,7,38,10,17,20,7,11,12,13,14,15,7,16,17,19,1,2,3,4,5,6,20,21,22,23,24,25,26,7,39,11,12,13,14,15,44,44,7,7,7,7,7,16,29,31,17,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,32,54,53,55,39,10,11,11,12,12,13,13,14,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,7,7,7,7,39,7,29,31,31,29,31,31,7,7,7,32,54,53,55,39,10,11,12,13,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,32,7,7,19,19,38,10,38,10,39,10,32,7,19,19,7,1,2,3,4,5,6,7,38,10,39,38,39,10,7,38,10,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,12,13,14,44,11,12,13,14,15,7,16,17,18,19,1,2,3,4,5,6,20,21,22,23,24,25,26,44,17,7,32,54,53,55,39,10,11,12,13,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,32,54,53,55,39,10,11,12,13,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,32,54,53,55,39,10,11,12,13,14,15,44,7,16,29,31,17,18,19,1,2,3,4,5,6,30,33,20,21,22,23,24,25,26,7,38,10,38,10,56,56,56,57,58,57,58,59,60,59,60,57,59,60,59],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,1],1],[[2,2],2],[[3,3],3],[[4,4],4],[[5,5],5],[[6,6],6],[[1,1]],[[2,2]],[[3,3]],[[4,4]],[[5,5]],[[6,6]],[[],7],[[7,7],7],[[7,7]],[[7,7],7],[[7,7]],[7,8],[[7,7],7],[[7,7],7],[[7,7]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[9]]]],[11,11],[12,12],[13,13],[14,14],[15,15],[7,7],[16,16],[17,17],[18,18],[19,19],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[20,20],[21,21],[22,22],[23,23],[24,24],[25,25],[26,26],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[7,7],27],[[1,1],27],[[2,2],27],[[3,3],27],[[4,4],27],[[5,5],27],[[6,6],27],[7,7],[[7,7],28],[[],11],[[],12],[[],13],[[],14],[[],15],[[],7],[[],16],[[],29],[[],17],[[],18],[[],19],[[],1],[[],2],[[],3],[[],4],[[],5],[[],6],[[],30],[[],26],[29],[31],[18],[29],[31],[[15,15],32],[[7,7],7],[[33,31,[34,[15]]],[[35,[1]]]],[[[10,[9]],33,31,[34,[15]]],[[35,[1]]]],[17,36],[20],[[],7],[[11,11],28],[[12,12],28],[[13,13],28],[[14,14],28],[[15,15],28],[[7,7],28],[[16,16],28],[[17,17],28],[[19,19],28],[[1,1],28],[[2,2],28],[[3,3],28],[[4,4],28],[[5,5],28],[[6,6],28],[[20,20],28],[[21,21],28],[[22,22],28],[[23,23],28],[[24,24],28],[[25,25],28],[[26,26],28],[[7,37]],[[[39,[38]]],[[41,[40]]]],[[11,42],43],[[12,42],43],[[13,42],43],[[14,42],43],[[15,42],43],[[44,42],43],[[44,42],43],[[7,42],43],[[7,42],43],[[7,42],43],[[7,42],43],[[7,42],43],[[16,42],43],[[29,42],43],[[31,42],43],[[17,42],43],[[17,42],43],[[18,42],43],[[19,42],43],[[1,42],43],[[2,42],43],[[3,42],43],[[4,42],43],[[5,42],43],[[6,42],43],[[30,42],43],[[33,42],43],[[20,42],43],[[21,42],43],[[22,42],43],[[23,42],43],[[24,42],43],[[25,42],43],[[26,42],43],[[]],[[]],[[]],[[]],[[]],[[]],[8,11],[[]],[11,12],[[]],[11,13],[[]],[11,14],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,[[34,[7]]]],[8,7],[8,7],[37,7],[[[39,[38]],45],[[41,[40]]]],[[7,46]],[[29,6]],[[31,5]],[[31,4]],[[29,6]],[[31,4]],[[31,5]],[[7,7]],[[7,7],7],[[7,7],28],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[7,28],[7,28],[19,3],[19,2],[[47,47],1],[[[10,[9]],47,47],1],[1,1],[[[10,[9]],1],1],[[36,36,38],[[39,[38]]]],[[[34,[19]],9],[[10,[9]]]],[32,34],[7,7],0,0,[[7,7],[[34,[27]]]],[[1,1],[[34,[27]]]],[[2,2],[[34,[27]]]],[[3,3],[[34,[27]]]],[[4,4],[[34,[27]]]],[[5,5],[[34,[27]]]],[[6,6],[[34,[27]]]],[[7,7]],[[]],[[[10,[9]]]],[[[39,[38]],36,36]],[[],19],[[[39,[38]]],19],[[[10,[9]]],19],[[7,7,28]],[22],[[[10,[9]],22]],[[7,7],7],[[1,1],1],[[2,2],2],[[3,3],3],[[4,4],4],[[5,5],5],[[6,6],6],[[7,7]],[[1,1]],[[2,2]],[[3,3]],[[4,4]],[[5,5]],[[6,6]],[[7,7],7],[12,[[49,[48]]]],[13,[[49,[48]]]],[14,[[49,[48]]]],[44,[[49,[48]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],50],[[],50],[[7,7]],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[7,7],7],[19],[[[10,[9]],19]],[[[52,[8]]]],[[[10,[9]],[52,[8]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"c":[],"p":[[3,"ScreenPoint"],[3,"Row"],[3,"Column"],[3,"ScrollbackBufferPoint"],[3,"LineIndex"],[3,"UnitIndex"],[3,"FormatFlags"],[15,"u8"],[8,"Write"],[3,"TtyBackend"],[4,"Color"],[3,"ForegroundColor"],[3,"BackgroundColor"],[3,"UnderlinedColor"],[3,"Style"],[4,"ScrollPosition"],[4,"Character"],[3,"Unit"],[3,"ScreenSize"],[4,"ScrollAction"],[4,"Wrap"],[4,"InsertMode"],[4,"ShowCursor"],[4,"CarriageReturnSendsLineFeed"],[4,"LineFeedSendsCarriageReturn"],[3,"TerminalMode"],[4,"Ordering"],[15,"bool"],[3,"Line"],[4,"CursorStyle"],[3,"ScrollbackBuffer"],[3,"StyleDiff"],[4,"DisplayAction"],[4,"Option"],[4,"Result"],[15,"u16"],[8,"IntoIterator"],[8,"TerminalBackend"],[3,"TextTerminal"],[15,"usize"],[6,"Result"],[3,"Formatter"],[6,"Result"],[4,"AnsiStyleCodes"],[8,"Read"],[8,"Hasher"],[15,"i32"],[15,"str"],[4,"Cow"],[3,"String"],[3,"TypeId"],[15,"slice"],[3,"ModeSwitch"],[3,"AsciiControlCodes"],[3,"StatusReportCommands"],[13,"RGB"],[13,"Delete"],[13,"Erase"],[13,"Overwrite"],[13,"Insert"]]},\ "theseus_features":{"doc":"This crate exists solely to hold a centralized list of …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "thread_local_macro":{"doc":"Provides a thread_local!() macro, a helper to instantiate …","t":"DDLLLLLLLLLLLLLLOLLLLLLLLLL","n":["AccessError","LocalKey","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","fmt","fmt","fmt","from","from","into","into","thread_local","to_owned","to_string","try_from","try_from","try_into","try_into","try_with","type_id","type_id","with"],"q":[[0,"thread_local_macro"]],"d":["An error returned by LocalKey::try_with.","A thread-local storage key which owns its contents.","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Declare a new thread local storage key of type LocalKey.","","","","","","","Acquires a reference to the value in this TLS key.","","","Acquires a reference to the value in this TLS key."],"i":[0,0,3,1,3,1,1,1,1,3,1,1,3,1,3,1,0,1,1,3,1,3,1,3,3,1,3],"f":[0,0,[[]],[[]],[[]],[[]],[1,1],[[]],[[1,1],2],[[3,4],5],[[1,4],5],[[1,4],5],[[]],[[]],[[]],[[]],0,[[]],[[],6],[[],7],[[],7],[[],7],[[],7],[[3,8],[[7,[1]]]],[[],9],[[],9],[[3,8]]],"c":[],"p":[[3,"AccessError"],[15,"bool"],[3,"LocalKey"],[3,"Formatter"],[6,"Result"],[3,"String"],[4,"Result"],[8,"FnOnce"],[3,"TypeId"]]},\ "time":{"doc":"This crate contains abstractions to interact with hardware …","t":"IIQDIDSSSSDSDSQDSSLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFKLLLLFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["ClockSource","ClockType","ClockType","Duration","EarlySleeper","Instant","MAX","MAX","MICROSECOND","MILLISECOND","Monotonic","NANOSECOND","Period","SECOND","Unit","WallTime","ZERO","ZERO","add","add","add_assign","add_assign","as_micros","as_millis","as_nanos","as_secs","as_secs_f32","as_secs_f64","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","checked_add","checked_div","checked_duration_since","checked_mul","checked_sub","clone","clone","clone","cmp","cmp","cmp","default","default","div","div_assign","div_duration_f32","div_duration_f64","div_f32","div_f64","duration_since","early_sleep","elapsed","eq","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_micros","from_millis","from_nanos","from_secs","from_secs_f32","from_secs_f64","hash","hash","into","into","into","into","into","is_zero","mul","mul_assign","mul_f32","mul_f64","new","new","new","now","now","now","partial_cmp","partial_cmp","partial_cmp","register_clock_source","register_early_sleeper","saturating_add","saturating_mul","saturating_sub","sleep","sub","sub","sub","sub_assign","sub_assign","subsec_micros","subsec_millis","subsec_nanos","sum","sum","try_from","try_from","try_from","try_from","try_from","try_from_secs_f32","try_from_secs_f64","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id"],"q":[[0,"time"]],"d":["A clock source.","Either a Monotonic or WallTime clock.","The type of clock (either Monotonic or WallTime).","A Duration type to represent a span of time, typically …","A hardware clock that can sleep without relying on …","A measurement of a monotonically nondecreasing clock.","","The maximum duration.","The duration of one microsecond.","The duration of one millisecond.","","The duration of one nanosecond.","A clock period, measured in femtoseconds.","The duration of one second.","The type returned by the now function.","","","A duration of zero time.","","","","","Returns the total number of whole microseconds contained …","Returns the total number of whole milliseconds contained …","Returns the total number of nanoseconds contained by this …","Returns the number of whole seconds contained by this …","Returns the number of seconds contained by this Duration …","Returns the number of seconds contained by this Duration …","","","","","","","","","","","Checked Duration addition. Computes self + other, …","Checked Duration division. Computes self / other, …","","Checked Duration multiplication. Computes self * other, …","Checked Duration subtraction. Computes self - other, …","","","","","","","","","","","Divide Duration by Duration and return f32.","Divide Duration by Duration and return f64.","Divide Duration by f32.","Divide Duration by f64.","Returns the amount of time elapsed from another instant to …","Wait for the given duration.","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Creates a new period with the specified femtoseconds.","Returns the argument unchanged.","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of whole …","Creates a new Duration from the specified number of …","Creates a new Duration from the specified number of …","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if this Duration spans no time.","","","Multiplies Duration by f32.","Multiplies Duration by f64.","","Creates a new period with the specified femtoseconds.","Creates a new Duration from the specified number of whole …","Returns the current time.","The current time according to the clock.","","","","","Register a clock source.","Register the clock source that can be used to sleep when …","Saturating Duration addition. Computes self + other, …","Saturating Duration multiplication. Computes self * other, …","Saturating Duration subtraction. Computes self - other, …","Wait for the given duration.","","","","","","Returns the fractional part of this Duration, in whole …","Returns the fractional part of this Duration, in whole …","Returns the fractional part of this Duration, in …","","","","","","","","The checked version of from_secs_f32.","The checked version of from_secs_f64.","","","","","","","","","",""],"i":[0,0,20,0,0,0,1,2,2,2,0,2,0,2,21,0,1,2,1,2,1,2,2,2,2,2,2,2,22,23,1,9,2,22,23,1,9,2,2,2,1,2,2,1,9,2,1,9,2,1,2,2,2,2,2,2,2,1,0,1,1,9,2,1,9,9,2,22,23,1,9,9,2,2,2,2,2,2,2,1,2,22,23,1,9,2,2,2,2,2,2,1,9,2,0,20,1,1,9,2,0,0,2,2,2,24,1,1,2,1,2,2,2,2,2,2,22,23,1,9,2,2,2,22,23,1,9,2,22,23,1,9,2],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2]],[[2,2],2],[[1,2]],[[2,2]],[2,3],[2,3],[2,3],[2,4],[2,5],[2,6],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[2,2],[[7,[2]]]],[[2,8],[[7,[2]]]],[[1,1],[[7,[2]]]],[[2,8],[[7,[2]]]],[[2,2],[[7,[2]]]],[1,1],[9,9],[2,2],[[1,1],10],[[9,9],10],[[2,2],10],[[],1],[[],2],[[2,8],2],[[2,8]],[[2,2],5],[[2,2],6],[[2,5],2],[[2,6],2],[[1,1],2],[2],[1,2],[[1,1],11],[[9,9],11],[[2,2],11],[[1,12],13],[[9,12],13],[[9,12],13],[[2,12],[[15,[14]]]],[[]],[[]],[[]],[[]],[4,9],[[]],[4,2],[4,2],[4,2],[4,2],[5,2],[6,2],[[1,16]],[[2,16]],[[]],[[]],[[]],[[]],[[]],[2,11],[[2,8],2],[[2,8]],[[2,5],2],[[2,6],2],[4,1],[4,9],[[4,8],2],[[]],[[]],[[],1],[[1,1],[[7,[10]]]],[[9,9],[[7,[10]]]],[[2,2],[[7,[10]]]],[9,11],[9,11],[[2,2],2],[[2,8],2],[[2,2],2],[2],[[1,1]],[[1,2]],[[2,2],2],[[1,2]],[[2,2]],[2,8],[2,8],[2,8],[17,2],[17,2],[[],15],[[],15],[[],15],[[],15],[[],15],[5,[[15,[2,18]]]],[6,[[15,[2,18]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],19],[[],19],[[],19],[[],19],[[],19]],"c":[],"p":[[3,"Instant"],[3,"Duration"],[15,"u128"],[15,"u64"],[15,"f32"],[15,"f64"],[4,"Option"],[15,"u32"],[3,"Period"],[4,"Ordering"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"Result"],[8,"Hasher"],[8,"Iterator"],[3,"TryFromFloatSecsError"],[3,"TypeId"],[8,"ClockSource"],[8,"ClockType"],[3,"Monotonic"],[3,"WallTime"],[8,"EarlySleeper"]]},\ "tlb_shootdown":{"doc":"Support for broadcasting and handling TLB shootdown IPIs. ","t":"FF","n":["handle_tlb_shootdown_ipi","init"],"q":[[0,"tlb_shootdown"]],"d":["Handles a TLB shootdown IPI requested by another CPU.","Initializes data, functions, and structures for the TLB …"],"i":[0,0],"f":[[[],1],[[]]],"c":[],"p":[[15,"bool"]]},\ -"tls_initializer":{"doc":"Logic for generating Thread-Local Storage (TLS) data image …","t":"NNNDDELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["InvalidVirtualAddress","NoRemainingSpace","OverlapWithExistingSection","TlsDataImage","TlsInitializer","TlsInitializerError","add_existing_static_tls_section","add_new_dynamic_tls_section","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","empty","empty","fmt","fmt","fmt","from","from","from","get_data","into","into","into","invalidate","set_as_current_tls_base","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"tls_initializer"]],"d":["The included virtual address calculated for a TLS section …","There was insufficient space to insert a TLS section into …","Inserting a TLS section at the included offset would …","An initialized TLS area data image ready to be used by a …","A “factory” that creates Thread-Local Storage (TLS) …","Errors that may occur when adding TLS sections to a …","Add a TLS section that has pre-determined offset, e.g., …","Inserts the given section into this TLS area at the next …","","","","","","","","","Creates an empty TLS initializer with no TLS data sections.","Creates an empty TLS data image with no TLS section …","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns a new copy of the TLS data image.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Invalidates the cached data image in this TlsInitializer …","Sets the current CPU’s TLS register to point to this TLS …","","","","","","","","","",""],"i":[5,5,5,0,0,0,1,1,1,5,7,1,5,7,1,1,1,7,1,5,7,1,5,7,1,1,5,7,1,7,1,1,5,7,1,5,7,1,5,7],"f":[0,0,0,0,0,0,[[1,2,3,3],[[6,[4,5]]]],[[1,2,3],[[6,[5]]]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[[]],[[],1],[[],7],[[1,8],9],[[5,8],9],[[7,8],9],[[]],[[]],[[]],[1,7],[[]],[[]],[[]],[1],[7],[[]],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],10],[[],10],[[],10]],"c":[],"p":[[3,"TlsInitializer"],[3,"LoadedSection"],[15,"usize"],[6,"StrongSectionRef"],[4,"TlsInitializerError"],[4,"Result"],[3,"TlsDataImage"],[3,"Formatter"],[6,"Result"],[3,"TypeId"]]},\ "tsc":{"doc":"","t":"DLLLFLLLLL","n":["Tsc","borrow","borrow_mut","from","get_tsc_period","into","now","try_from","try_into","type_id"],"q":[[0,"tsc"]],"d":["","","","Returns the argument unchanged.","Returns the frequency of the TSC for the system, currently …","Calls U::from(self).","","","",""],"i":[0,6,6,6,0,6,6,6,6,6],"f":[0,[[]],[[]],[[]],[[],[[2,[1]]]],[[]],[[],3],[[],4],[[],4],[[],5]],"c":[],"p":[[3,"Period"],[4,"Option"],[3,"Instant"],[4,"Result"],[3,"TypeId"],[3,"Tsc"]]},\ "tss":{"doc":"","t":"RFF","n":["DOUBLE_FAULT_IST_INDEX","create_tss","tss_set_rsp0"],"q":[[0,"tss"]],"d":["The index of the double fault stack in a TaskStateSegment …","Sets up TSS entry for the given CPU core. ","Sets the current CPU’s TSS privilege stack 0 (RSP0) …"],"i":[0,0,0],"f":[0,[[1,2,2],[[4,[3]]]],[2,[[6,[5]]]]],"c":[],"p":[[3,"CpuId"],[3,"VirtualAddress"],[3,"TaskStateSegment"],[6,"Mutex"],[15,"str"],[4,"Result"]]},\ "tty":{"doc":"This crate provides TTY abstractions.","t":"NNNEDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["CtrlC","CtrlD","CtrlZ","Event","LineDiscipline","Master","Slave","Tty","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","canonical","clear_events","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","default","default","discipline","discipline","echo","eq","event_receiver","flush","flush","fmt","from","from","from","from","from","into","into","into","into","into","master","new","new","read","read","read","read","read_byte","read_byte","set_canonical","set_echo","set_raw","set_sane","slave","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_read","try_read","type_id","type_id","type_id","type_id","type_id","write","write","write","write","write_byte","write_byte"],"q":[[0,"tty"]],"d":["","","","","A TTY line discipline.","The master (i.e. terminal) end of a Tty.","The slave (i.e. application) end of a Tty.","A terminal device driver.","","","","","","","","","","","Sets the line discipline to canonical mode.","","","","","","","","","","Equivalent to Self::new.","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Creates a new line discipline with sane defaults.","","","","","","","","Sets the canonical flag.","Sets the echo flag.","Sets the line discipline to raw mode.","Resets the line discipline to sane defaults.","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[3,3,3,0,0,0,0,0,1,3,4,5,6,1,3,4,5,6,1,1,3,4,5,6,3,4,5,6,1,4,5,6,1,3,1,5,6,3,1,3,4,5,6,1,3,4,5,6,4,1,4,5,5,6,6,5,6,1,1,1,1,4,3,4,5,6,1,3,4,5,6,1,3,4,5,6,5,6,1,3,4,5,6,5,5,6,6,5,6],"f":[0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,2],[1],[3,3],[4,4],[5,5],[6,6],[[]],[[]],[[]],[[]],[[],1],[[],4],[5,[[7,[1]]]],[6,[[7,[1]]]],[1,2],[[3,3],2],[1,[[8,[3]]]],[5,9],[6,9],[[3,10],11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[4,5],[[],1],[[],4],[[5,[13,[12]]],[[9,[14]]]],[[5,[13,[12]]],[[9,[14]]]],[[6,[13,[12]]],[[9,[14]]]],[[6,[13,[12]]],[[9,[14]]]],[5,[[9,[12]]]],[6,[[9,[12]]]],[[1,2]],[[1,2]],[1],[1],[4,6],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[5,[13,[12]]],[[9,[14]]]],[[6,[13,[12]]],[[9,[14]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[5,[13,[12]]],[[9,[14]]]],[[5,[13,[12]]],[[9,[14]]]],[[6,[13,[12]]],[[9,[14]]]],[[6,[13,[12]]],[[9,[14]]]],[[5,12],9],[[6,12],9]],"c":[],"p":[[3,"LineDiscipline"],[15,"bool"],[4,"Event"],[3,"Tty"],[3,"Master"],[3,"Slave"],[3,"Arc"],[3,"Receiver"],[6,"Result"],[3,"Formatter"],[6,"Result"],[15,"u8"],[15,"slice"],[15,"usize"],[4,"Result"],[3,"TypeId"]]},\ diff --git a/doc/serial_port/struct.SerialPort.html b/doc/serial_port/struct.SerialPort.html index abffc6b15e..25f20d0f88 100644 --- a/doc/serial_port/struct.SerialPort.html +++ b/doc/serial_port/struct.SerialPort.html @@ -43,20 +43,20 @@
      Special characters if there are no bytes available to be read, indicating that the read would block.

      source§

      fn read(&mut self, buf: &mut [u8]) -> Result<usize>

      Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
      §

      fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>

      Read all bytes until EOF in this source, placing them into buf. Read more
      §

      fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

      Read all bytes until EOF in this source, appending them to buf. Read more
      §

      unsafe fn initializer(&self) -> Initializer

      Determines if this Reader can work with buffers of uninitialized -memory. Read more
      §

      fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

      Read the exact number of bytes required to fill buf. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere +memory. Read more

      §

      fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

      Read the exact number of bytes required to fill buf. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

      Creates a “by reference” adaptor for this instance of Read. Read more
      §

      fn bytes(self) -> Bytes<Self>where Self: Sized,

      Transforms this Read instance to an Iterator over its bytes. Read more
      §

      fn chain<R>(self, next: R) -> Chain<Self, R>where R: Read, Self: Sized,

      Creates an adaptor which will chain this stream with another. Read more
      §

      fn take(self, limit: u64) -> Take<Self>where - Self: Sized,

      Creates an adaptor which will read at most limit bytes from it. Read more
      source§

      impl Write for SerialPort

      A blocking implementation of [core2::io::Write] that will write bytes from the given buf + Self: Sized,

    Creates an adaptor which will read at most limit bytes from it. Read more
    source§

    impl Write for SerialPort

    Forward the implementation of core::fmt::Write to the inner SerialPortBasic.

    +
    source§

    fn write_str(&mut self, s: &str) -> Result

    Writes a string slice into this writer, returning whether the write +succeeded. Read more
    1.1.0 · source§

    fn write_char(&mut self, c: char) -> Result<(), Error>

    Writes a char into this writer, returning whether the write succeeded. Read more
    1.0.0 · source§

    fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

    Glue for usage of the write! macro with implementors of this trait. Read more
    source§

    impl Write for SerialPort

    A blocking implementation of [core2::io::Write] that will write bytes from the given buf to the SerialPort, waiting until it is ready to transfer all bytes.

    The flush() function is a no-op, since the SerialPort does not have buffering.

    source§

    fn write(&mut self, buf: &[u8]) -> Result<usize>

    Write a buffer into this writer, returning how many bytes were written. Read more
    source§

    fn flush(&mut self) -> Result<()>

    Flush this output stream, ensuring that all intermediately buffered -contents reach their destination. Read more
    §

    fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

    Attempts to write an entire buffer into this writer. Read more
    §

    fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

    Writes a formatted string into this writer, returning any error -encountered. Read more
    §

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Creates a “by reference” adaptor for this instance of Write. Read more
    source§

    impl Write for SerialPort

    Forward the implementation of core::fmt::Write to the inner SerialPortBasic.

    -
    source§

    fn write_str(&mut self, s: &str) -> Result

    Writes a string slice into this writer, returning whether the write -succeeded. Read more
    1.1.0 · source§

    fn write_char(&mut self, c: char) -> Result<(), Error>

    Writes a char into this writer, returning whether the write succeeded. Read more
    1.0.0 · source§

    fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

    Glue for usage of the write! macro with implementors of this trait. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +contents reach their destination. Read more

    §

    fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

    Attempts to write an entire buffer into this writer. Read more
    §

    fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

    Writes a formatted string into this writer, returning any error +encountered. Read more
    §

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Creates a “by reference” adaptor for this instance of Write. Read more

    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.

    diff --git a/doc/source-files.js b/doc/source-files.js index 327299604c..6c1afccfab 100644 --- a/doc/source-files.js +++ b/doc/source-files.js @@ -17,6 +17,7 @@ var sourcesIndex = JSON.parse('{\ "captain":["",[],["lib.rs"]],\ "catch_unwind":["",[],["lib.rs"]],\ "cls":["",[],["lib.rs"]],\ +"cls_allocator":["",[],["lib.rs"]],\ "cls_macros":["",[],["int.rs","lib.rs"]],\ "color":["",[],["lib.rs"]],\ "compositor":["",[],["lib.rs"]],\ @@ -27,7 +28,6 @@ var sourcesIndex = JSON.parse('{\ "context_switch_sse":["",[],["lib.rs"]],\ "cow_arc":["",[],["lib.rs"]],\ "cpu":["",[],["lib.rs","x86_64.rs"]],\ -"cpu_local":["",[],["lib.rs"]],\ "crate_metadata":["",[],["lib.rs"]],\ "crate_metadata_serde":["",[],["lib.rs"]],\ "crate_name_utils":["",[],["lib.rs"]],\ @@ -79,6 +79,7 @@ var sourcesIndex = JSON.parse('{\ "keyboard":["",[],["lib.rs"]],\ "keycodes_ascii":["",[],["lib.rs"]],\ "libterm":["",[],["cursor.rs","lib.rs"]],\ +"local_storage_initializer":["",[],["lib.rs"]],\ "lockable":["",[],["lib.rs"]],\ "locked_idt":["",[],["lib.rs"]],\ "logger":["",[],["lib.rs"]],\ @@ -111,7 +112,6 @@ var sourcesIndex = JSON.parse('{\ "panic_wrapper":["",[],["lib.rs"]],\ "path":["",[],["lib.rs"]],\ "pci":["",[],["lib.rs"]],\ -"per_cpu":["",[],["lib.rs"]],\ "percent_encoding":["",[],["lib.rs"]],\ "physical_nic":["",[],["lib.rs"]],\ "pic":["",[],["lib.rs"]],\ @@ -170,7 +170,6 @@ var sourcesIndex = JSON.parse('{\ "thread_local_macro":["",[],["lib.rs"]],\ "time":["",[],["dummy.rs","lib.rs"]],\ "tlb_shootdown":["",[],["lib.rs"]],\ -"tls_initializer":["",[],["lib.rs"]],\ "tsc":["",[],["lib.rs"]],\ "tss":["",[],["lib.rs"]],\ "tty":["",[],["channel.rs","discipline.rs","lib.rs"]],\ diff --git a/doc/src/ap_start/lib.rs.html b/doc/src/ap_start/lib.rs.html index d18f6c7bdb..2ebd5d75ae 100644 --- a/doc/src/ap_start/lib.rs.html +++ b/doc/src/ap_start/lib.rs.html @@ -245,7 +245,7 @@ // Now that the Local APIC has been initialized for this CPU, we can initialize the // per-CPU storage, tasking, and create the idle task for this CPU. - per_cpu::init(cpu_id).unwrap(); + cls_allocator::reload_current_cpu(); let bootstrap_task = spawn::init(kernel_mmi_ref.clone(), cpu_id, this_ap_stack).unwrap(); // The PAT must be initialized explicitly on every CPU, diff --git a/doc/src/captain/lib.rs.html b/doc/src/captain/lib.rs.html index caf29e8d46..c46e0db134 100644 --- a/doc/src/captain/lib.rs.html +++ b/doc/src/captain/lib.rs.html @@ -371,7 +371,7 @@ // get BSP's CPU ID let bsp_id = cpu::bootstrap_cpu().ok_or("captain::init(): couldn't get ID of bootstrap CPU!")?; - per_cpu::init(bsp_id)?; + cls_allocator::reload_current_cpu(); // Initialize the scheduler and create the initial `Task`, // which is bootstrapped from this current execution context. diff --git a/doc/src/cls/lib.rs.html b/doc/src/cls/lib.rs.html index 69b9d1a45c..6d3bde5897 100644 --- a/doc/src/cls/lib.rs.html +++ b/doc/src/cls/lib.rs.html @@ -37,15 +37,245 @@ 37 38 39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153
    //! A library for defining CPU-local variables.
     //!
    -//! See [`cpu_local`] for more details.
    +//! See [`cpu_local`] for more details on how to define a CPU-local variable; the information below
    +//! is not required.
    +//!
    +//! # Implementation
    +//!
    +//! There are two ways in which a crate can be linked:
    +//! - Statically, meaning it is linked at compile-time by an external linker.
    +//! - Dynamically, meaning it is linked at runtime by `mod_mgmt`.
    +//!
    +//! Since we have little control over the external linker, we are forced to write CLS code
    +//! that works with the external linker, despite the linker having no understanding of CLS.
    +//! This lack of understanding results in significant complexity in calculating the offset
    +//! of a CLS symbol.
    +//!
    +//! Also there is no way to tell whether code was statically or dynamically linked, and so the same
    +//! CLS code must work with both static and dynamic linking. This results in additional complexity
    +//! in `mod_mgmt` because it must interface with this generic CLS code.
    +//!
    +//! ## x86-64
    +//!
    +//! ### Static linking
    +//!
    +//! On x86_64, a TLS data image looks like
    +//!
    +//! ```text
    +//!                        fs
    +//!                         V
    +//! +-----------------------+--------------+------------------------+
    +//! | statically linked TLS | TLS self ptr | dynamically linked TLS |
    +//! +-----------------------+--------------+------------------------+
    +//! ```
    +//! where statically linked TLS is accessed using a negative offset from the `fs`
    +//! register.
    +//!
    +//! Now with the way CLS works on Theseus, when we statically link CLS, the
    +//! linker believes we are prepending the cls section to the tls section like
    +//! ```
    +//!                        gs                            fs
    +//!                         V                             V
    +//! +-----------------------+-----+-----------------------+
    +//! | statically linked cls | 000 | statically linked TLS |
    +//! +-----------------------+-----+-----------------------+
    +//! ```
    +//! where `000` are padding bytes to align the start of the statically linked
    +//! TLS to a page boundary. So the linker will write negative offsets to CLS
    +//! relocations based on their distance from the end of the statically linked
    +//! TLS.
    +//!
    +//! However, in reality we have a completely separate data image for CLS, and
    +//! so we need to figure out the negative offset from the `gs` register based on
    +//! the negative offset from the `fs` register, the CLS size, the TLS size, and
    +//! the fact that the start of the TLS section is on the next page boundary after
    +//! the end of the CLS section.
    +//!
    +//! ```text
    +//! from_cls_start
    +//!    +-----+
    +//!    |     |
    +//!    |     |        -{cls}@TPOFF
    +//!    |     +------------------------------+
    +//!    |     |                              |
    +//!    |     |  -offset                     |
    +//!    |     +----------+                   |
    +//!    |     |          |                   |
    +//!    V     V          V                   V
    +//!    +----------------+-----+-------------+
    +//!    |      .cls      | 000 | .tls/.tdata |
    +//!    +----------------+-----+-------------+
    +//!    ^                ^     ^             ^
    +//!    |                |     |             |
    +//!    |                gs    |            fs
    +//!    |                |     |             |
    +//!    +----------------+     +-------------+
    +//!    |    cls_size          |   tls_size
    +//!    |                      |
    +//!   a*4kb                  b*4kb
    +//!    |                      |
    +//!    +----------------------+
    +//!     cls_start_to_tls_start
    +//! ```
    +//! where `a*4kb` means that the address is a multiple of `4kb` i.e.
    +//! page-aligned.
    +//!
    +//! ### Dynamic linking
    +//!
    +//! When a crate is dynamically linked on x86_64, `mod_mgmt` will set `__THESEUS_CLS_SIZE`
    +//! and `__THESEUS_TLS_SIZE` to `usize::MAX`. Prior to calculating the offset, the CLS
    +//! access code will check if the variables are set to their sentinel values and if so,
    +//! it will simply use the provided offset since `mod_mgmt` would have computed it
    +//! correctly, unlike the external linker.
    +//!
    +//! ## aarch64
    +//!
    +//! Unlike x86_64, aarch64 doesn't have different branches for statically linked, and
    +//! dynamically linked variables. This is because on aarch64, there are no negative
    +//! offset shenanigans. A TLS data image looks like
    +//! ```
    +//! fs
    +//! V
    +//! +-----------------------+------------------------+
    +//! | statically linked TLS | dynamically linked TLS |
    +//! +-----------------------+------------------------+
    +//! ```
    +//!
    +//! Unlike x86_64, the `.cls` section is located after `.tls` in a binary and so the
    +//! linker thinks the data image looks like
    +//! ```
    +//! fs
    +//! V
    +//! +-----------------------+-----+-----------------------+------------------------+
    +//! | statically linked TLS | 000 | statically linked CLS | dynamically linked TLS |
    +//! +-----------------------+-----+-----------------------+------------------------+
    +//! ```
    +//! where `000` are padding bytes to align the start of the statically linked CLS to
    +//! a page boundary.
    +//!
    +//! Hence, CLS symbols have an offset that is incorrect by
    +//! `tls_size.next_multiple_of(0x1000)`, or 0 if there is not TLS section. So, when
    +//! loading CLS symbols on aarch64, `mod_mgmt` simply sets `__THESEUS_TLS_SIZE` to 0.
     
     #![no_std]
     
    -extern crate alloc;
    -
    -pub use cls_macros::cpu_local;
    +pub use cls_macros::cpu_local;
     
     /// A trait abstracting over guards that ensure atomicity with respect to the
     /// current CPU.
    @@ -67,13 +297,11 @@
     #[doc(hidden)]
     pub mod __private {
         pub use preemption;
    +    
    +    #[cfg(target_arch = "aarch64")]
    +    pub use {cortex_a, tock_registers};
     
         #[cfg(target_arch = "x86_64")]
         pub use x86_64;
    -
    -    #[cfg(target_arch = "aarch64")]
    -    pub use tock_registers;
    -    #[cfg(target_arch = "aarch64")]
    -    pub use cortex_a;
     }
     
    \ No newline at end of file diff --git a/doc/src/cls_allocator/lib.rs.html b/doc/src/cls_allocator/lib.rs.html new file mode 100644 index 0000000000..4ccc01bd9e --- /dev/null +++ b/doc/src/cls_allocator/lib.rs.html @@ -0,0 +1,155 @@ +lib.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +
    #![no_std]
    +
    +extern crate alloc;
    +
    +use alloc::{sync::Arc, vec::Vec};
    +
    +use cpu::CpuId;
    +use crate_metadata::{LoadedSection, StrongSectionRef};
    +use local_storage_initializer::{ClsDataImage, ClsInitializer, LocalStorageInitializerError};
    +use sync_spin::SpinMutex;
    +
    +static CLS_INITIALIZER: SpinMutex<ClsInitializer> = SpinMutex::new(ClsInitializer::new());
    +static CLS_REGIONS: SpinMutex<Vec<(CpuId, ClsDataImage)>> = SpinMutex::new(Vec::new());
    +
    +/// Adds a CLS section with a pre-determined offset to the global CLS
    +/// initializer.
    +///
    +/// The CLS register will not be updated until either [`reload`] or
    +/// [`reload_current_cpu`] is called.
    +pub fn add_static_section(
    +    section: LoadedSection,
    +    offset: usize,
    +    total_static_storage_size: usize,
    +) -> Result<StrongSectionRef, LocalStorageInitializerError> {
    +    CLS_INITIALIZER
    +        .lock()
    +        .add_existing_static_section(section, offset, total_static_storage_size)
    +}
    +
    +/// Adds a dynamic CLS section to the global CLS initializer.
    +///
    +/// The CLS register will not be updated until either [`reload`] or
    +/// [`reload_current_cpu`] is called.
    +pub fn add_dynamic_section(
    +    section: LoadedSection,
    +    alignment: usize,
    +) -> Result<(usize, Arc<LoadedSection>), LocalStorageInitializerError> {
    +    CLS_INITIALIZER
    +        .lock()
    +        .add_new_dynamic_section(section, alignment)
    +}
    +
    +/// Generates a new data image for the current CPU and sets the CLS register
    +/// accordingly.
    +pub fn reload_current_cpu() {
    +    let current_cpu = cpu::current_cpu();
    +
    +    let mut data = CLS_INITIALIZER.lock().get_data();
    +
    +    let mut regions = CLS_REGIONS.lock();
    +    for (cpu, image) in regions.iter_mut() {
    +        if *cpu == current_cpu {
    +            // We disable interrupts so that we can safely access `image` and `data` without
    +            // them being changed under our nose.
    +            let _guard = irq_safety::hold_interrupts();
    +
    +            data.inherit(image);
    +
    +            // SAFETY: We only drop `data` after another image has been set as the current
    +            // CPU local storage.
    +            unsafe { data.set_as_current_cls() };
    +
    +            core::mem::swap(image, &mut data);
    +            return;
    +        }
    +    }
    +
    +    // SAFETY: We only drop `data` after another image has been set as the current
    +    // CPU local storage.
    +    unsafe { data.set_as_current_cls() };
    +    regions.push((current_cpu, data));
    +}
    +
    +pub fn reload() {
    +    todo!("cls_allocator::reload");
    +    // FIXME: Reload CLS register on all CPUs.
    +}
    +
    \ No newline at end of file diff --git a/doc/src/cls_macros/int.rs.html b/doc/src/cls_macros/int.rs.html index b453dde350..0e77e19fca 100644 --- a/doc/src/cls_macros/int.rs.html +++ b/doc/src/cls_macros/int.rs.html @@ -118,12 +118,24 @@ 118 119 120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130
    use proc_macro2::TokenStream;
     use quote::{quote, ToTokens};
    -use syn::{LitInt, Type};
    +use syn::{Ident, Type};
     
    -pub(crate) fn int_functions(ty: Type, offset: LitInt) -> Option<TokenStream> {
    -    let ((x64_asm_width, x64_reg_class), (aarch64_reg_modifier, aarch64_instr_width)) =
    +use crate::cls_offset_expr;
    +
    +pub(crate) fn int_functions(ty: &Type, name: &Ident) -> Option<TokenStream> {
    +    let ((x86_64_asm_width, x86_64_reg_class), (aarch64_reg_modifier, aarch64_instr_width)) =
             match ty.to_token_stream().to_string().as_ref() {
                 "u8" => (("byte", quote! { reg_byte }), (":w", "b")),
                 "u16" => (("word", quote! { reg }), (":w", "w")),
    @@ -133,20 +145,22 @@
                     return None;
                 }
             };
    -    let x64_width_modifier = format!("{x64_asm_width} ptr ");
    -    let x64_cls_location = format!("gs:[{offset}]");
    +    let x86_64_width_modifier = format!("{x86_64_asm_width} ptr ");
    +    let offset_expr = cls_offset_expr(name);
     
         Some(quote! {
             #[inline]
             pub fn load(&self) -> #ty {
    +            let offset = #offset_expr;
                 #[cfg(target_arch = "x86_64")]
                 {
                     let ret;
                     unsafe {
                         ::core::arch::asm!(
    -                        ::core::concat!("mov {}, ", #x64_cls_location),
    -                        out(#x64_reg_class) ret,
    -                        options(preserves_flags, nostack),
    +                        ::core::concat!("mov {ret}, gs:[{offset}]"),
    +                        ret = out(#x86_64_reg_class) ret,
    +                        offset = in(reg) offset,
    +                        options(readonly, preserves_flags, nostack),
                         )
                     };
                     ret
    @@ -159,10 +173,11 @@
                             "2:",
                             // Load value.
                             "mrs {tp_1}, tpidr_el1",
    +                        "add {ptr}, {tp_1}, {offset}",
                             concat!(
                                 "ldr", #aarch64_instr_width,
                                 " {ret", #aarch64_reg_modifier,"},",
    -                            " [{tp_1},#", stringify!(#offset), "]",
    +                            " [{ptr}]",
                             ),
     
                             // Make sure task wasn't migrated between mrs and ldr.
    @@ -171,10 +186,12 @@
                             "b.ne 2b",
     
                             tp_1 = out(reg) _,
    +                        ptr = out(reg) _,
    +                        offset = in(reg) offset,
                             ret = out(reg) ret,
                             tp_2 = out(reg) _,
     
    -                        options(nostack),
    +                        options(readonly, nostack),
                         )
                     };
                     ret
    @@ -183,12 +200,14 @@
     
             #[inline]
             pub fn fetch_add(&self, mut operand: #ty) -> #ty {
    +            let offset = #offset_expr;
                 #[cfg(target_arch = "x86_64")]
                 {
                     unsafe {
                         ::core::arch::asm!(
    -                        ::core::concat!("xadd ", #x64_width_modifier, #x64_cls_location, ", {}"),
    -                        inout(#x64_reg_class) operand,
    +                        ::core::concat!("xadd ", #x86_64_width_modifier, "gs:[{offset}], {operand}"),
    +                        offset = in(reg) offset,
    +                        operand = inout(#x86_64_reg_class) operand,
                             options(nostack),
                         )
                     };
    @@ -202,7 +221,7 @@
                             "2:",
                             // Load value.
                             "mrs {tp_1}, tpidr_el1",
    -                        concat!("add {ptr}, {tp_1}, ", stringify!(#offset)),
    +                        "add {ptr}, {tp_1}, {offset}",
                             concat!("ldxr", #aarch64_instr_width, " {value", #aarch64_reg_modifier,"}, [{ptr}]"),
     
                             // Make sure task wasn't migrated between msr and ldxr.
    @@ -219,6 +238,7 @@
     
                             tp_1 = out(reg) ret,
                             ptr = out(reg) _,
    +                        offset = in(reg) offset,
                             value = out(reg) ret,
                             tp_2 = out(reg) _,
                             operand = in(reg) operand,
    diff --git a/doc/src/cls_macros/lib.rs.html b/doc/src/cls_macros/lib.rs.html
    index 04c7688917..11289123be 100644
    --- a/doc/src/cls_macros/lib.rs.html
    +++ b/doc/src/cls_macros/lib.rs.html
    @@ -264,7 +264,141 @@
     264
     265
     266
    -
    //! Exports the [`cpu_local`] macro.
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +321
    +322
    +323
    +324
    +325
    +326
    +327
    +328
    +329
    +330
    +331
    +332
    +333
    +334
    +335
    +336
    +337
    +338
    +339
    +340
    +341
    +342
    +343
    +344
    +345
    +346
    +347
    +348
    +349
    +350
    +351
    +352
    +353
    +354
    +355
    +356
    +357
    +358
    +359
    +360
    +361
    +362
    +363
    +364
    +365
    +366
    +367
    +368
    +369
    +370
    +371
    +372
    +373
    +374
    +375
    +376
    +377
    +378
    +379
    +380
    +381
    +382
    +383
    +384
    +385
    +386
    +387
    +388
    +389
    +390
    +391
    +392
    +393
    +394
    +395
    +396
    +397
    +398
    +399
    +400
    +
    //! Exports the [`macro@cpu_local`] macro.
     
     #![feature(proc_macro_diagnostic, proc_macro_span, let_chains)]
     
    @@ -277,7 +411,7 @@
         parse::{Parse, ParseStream},
         parse_macro_input,
         spanned::Spanned,
    -    Attribute, Expr, Ident, LitBool, LitInt, Path, Token, Type, Visibility,
    +    Attribute, Expr, Ident, LitBool, Path, Token, Type, Visibility,
     };
     
     struct CpuLocal {
    @@ -285,7 +419,7 @@
         visibility: Visibility,
         name: Ident,
         ty: Type,
    -    _init: Expr,
    +    init: Expr,
     }
     
     impl Parse for CpuLocal {
    @@ -297,32 +431,29 @@
             input.parse::<Token![:]>()?;
             let ty: Type = input.parse()?;
             input.parse::<Token![=]>()?;
    -        let _init: Expr = input.parse()?;
    +        let init: Expr = input.parse()?;
             input.parse::<Token![;]>()?;
             Ok(CpuLocal {
                 attributes,
                 visibility,
                 name,
                 ty,
    -            _init,
    +            init,
             })
         }
     }
     
     struct Args {
    -    offset: LitInt,
         cls_dependency: bool,
         stores_guard: Option<Type>,
     }
     
     impl Parse for Args {
         fn parse(input: ParseStream) -> syn::Result<Self> {
    -        let offset = input.parse()?;
             let mut cls_dependency = true;
             let mut stores_guard = None;
     
    -        while input.parse::<Token![,]>().is_ok() {
    -            let name = input.parse::<Path>()?;
    +        while let Ok(name) = input.parse::<Path>() {
                 input.parse::<Token![=]>()?;
     
                 if name.is_ident("cls_dep") {
    @@ -339,6 +470,7 @@
                     .emit();
                     return Err(syn::Error::new(name.span(), ""));
                 }
    +            let _ = input.parse::<Token![,]>();
             }
     
             if let Some((ref name, ref value)) = stores_guard && !cls_dependency {
    @@ -353,7 +485,6 @@
             }
     
             Ok(Self {
    -            offset,
                 cls_dependency,
                 stores_guard: stores_guard.map(|tuple| tuple.1),
             })
    @@ -383,7 +514,6 @@
     #[proc_macro_attribute]
     pub fn cpu_local(args: TokenStream, input: TokenStream) -> TokenStream {
         let Args {
    -        offset,
             cls_dependency,
             stores_guard,
         } = match syn::parse(args) {
    @@ -404,7 +534,7 @@
             visibility,
             name,
             ty,
    -        _init,
    +        init,
         } = parse_macro_input!(input as CpuLocal);
     
         let attributes = attributes.iter().map(|attribute| quote! { #attribute });
    @@ -414,19 +544,27 @@
             Span::call_site().into(),
         );
     
    +    let offset_expr = cls_offset_expr(&name);
         let ref_expr = quote! {
             {
    +            let offset = #offset_expr;
                 #[cfg(target_arch = "x86_64")]
                 let mut ptr = {
                     use cls::__private::x86_64::registers::segmentation::{GS, Segment64};
    -                GS::read_base().as_u64()
    +                let gs = GS::read_base().as_u64();
    +
    +                // If this CLS section was statically linked, its `offset` will be negative on x86_64 only.
    +                let (value, _) = gs.overflowing_add(offset);
    +
    +                value
                 };
                 #[cfg(target_arch = "aarch64")]
                 let mut ptr = {
                     use cls::__private::tock_registers::interfaces::Readable;
    -                cls::__private::cortex_a::registers::TPIDR_EL1.get()
    +                let tpidr_el1 = cls::__private::cortex_a::registers::TPIDR_EL1.get();
    +
    +                tpidr_el1 + offset
                 };
    -            ptr += #offset;
                 unsafe { &mut*(ptr as *mut #ty) }
             }
         };
    @@ -511,17 +649,22 @@
             proc_macro2::TokenStream::new()
         };
     
    -    let int_functions = int::int_functions(ty, offset);
    +    let int_functions = int::int_functions(&ty, &name);
     
         quote! {
             #(#attributes)*
             #[thread_local]
    -        // #[link_section = ".cls"]
    -        #visibility static #name: #struct_name = #struct_name;
    +        #[link_section = ".cls"]
    +        #[used]
    +        #visibility static #name: #struct_name = #struct_name {
    +            __inner: #init,
    +        };
     
             #[repr(transparent)]
    -        #[non_exhaustive]
    -        #visibility struct #struct_name;
    +        #[doc(hidden)]
    +        #visibility struct #struct_name {
    +            __inner: #ty,
    +        }
     
             impl #struct_name {
                 #int_functions
    @@ -530,4 +673,129 @@
         }
         .into()
     }
    +
    +fn cls_offset_expr(name: &Ident) -> proc_macro2::TokenStream {
    +    quote! {
    +        {
    +            // See the crate-level docs in `cls` for an explanation of the implementation.
    +
    +            #[cfg(target_arch = "x86_64")]
    +            {
    +                extern "C" {
    +                    static __THESEUS_CLS_SIZE: u8;
    +                    static __THESEUS_TLS_SIZE: u8;
    +                }
    +
    +                // TODO: Open an issue in rust repo? We aren't actually doing anything unsafe.
    +                // SAFETY: We don't access the extern static.
    +                let cls_size = unsafe { ::core::ptr::addr_of!(__THESEUS_CLS_SIZE) } as u64;
    +                // SAFETY: We don't access the extern static.
    +                let tls_size = unsafe { ::core::ptr::addr_of!(__THESEUS_TLS_SIZE) } as u64;
    +
    +                // On x86_64, `mod_mgmt` will set `__THESEUS_CLS_SIZE` and `__THESEUS_TLS_SIZE` to
    +                // `usize::MAX` in order to indicate dynamic loading/linking is being used.
    +                if cls_size == u64::MAX && tls_size == u64::MAX {
    +                    // The offset is always correct when dynamically linked (since we set it in `mod_mgmt`),
    +                    // so there is no need to modify the offset here, we can just use it directly.
    +                    let offset: u64;
    +                    unsafe {
    +                        ::core::arch::asm!(
    +                            "lea {offset}, [{cls}@TPOFF]",
    +                            offset = out(reg) offset,
    +                            cls = sym #name,
    +                            options(nomem, preserves_flags, nostack),
    +                        )
    +                    };
    +                    offset
    +                }
    +                
    +                // Otherwise, if the CLS section/symbol was statically linked,
    +                // we need to adjust the offset to account for the section's 4K page alignment
    +                // and the size of the preceding static TLS sections.
    +                // See the crate-level docs of `cls` for a detailed explanation of this.
    +                else {
    +                    // If the statically-linked base kernel image has no TLS sections,
    +                    // the `{cls}@TPOFF` expression alone correctly gives us the offset
    +                    // from the end of the `.cls` section.
    +                    if tls_size == 0 {
    +                        let offset: u64;
    +                        unsafe {
    +                            ::core::arch::asm!(
    +                                "lea {offset}, [{cls}@TPOFF]",
    +                                offset = out(reg) offset,
    +                                cls = sym #name,
    +                                options(nomem, preserves_flags, nostack),
    +                            )
    +                        };
    +                        offset
    +                    } else {
    +                        // The linker script aligns sections to page boundaries.
    +                        const ALIGNMENT: u64 = 1 << 12;
    +                        // TODO: Use `next_multiple_of(0x1000)` when stabilised.
    +                        let cls_start_to_tls_start = (cls_size + ALIGNMENT - 1) & !(ALIGNMENT - 1);
    +
    +                        let from_cls_start: u64;
    +                        unsafe {
    +                            ::core::arch::asm!(
    +                                "lea {from_cls_start}, [{cls}@TPOFF + {tls_size} + {cls_start_to_tls_start}]",
    +                                from_cls_start = lateout(reg) from_cls_start,
    +                                cls = sym #name,
    +                                tls_size = in(reg) tls_size,
    +                                cls_start_to_tls_start = in(reg) cls_start_to_tls_start,
    +                                options(nomem, preserves_flags, nostack),
    +                            )
    +                        };
    +                        let offset = (cls_size - from_cls_start).wrapping_neg();
    +                        offset
    +                    }
    +                }
    +            }
    +            #[cfg(target_arch = "aarch64")]
    +            {
    +                extern "C" {
    +                    static __THESEUS_TLS_SIZE: u8;
    +                }
    +
    +                // TODO: Open an issue in rust repo? We aren't actually doing anything unsafe.
    +                // SAFETY: We don't access the extern static.
    +                let tls_size = unsafe { ::core::ptr::addr_of!(__THESEUS_TLS_SIZE) } as u64;
    +
    +                // The linker script aligns sections to page boundaries.
    +                const ALIGNMENT: u64 = 1 << 12;
    +                // TODO: Use `next_multiple_of(0x1000)` when stabilised.
    +                let tls_start_to_cls_start = (tls_size + ALIGNMENT - 1) & !(ALIGNMENT - 1);
    +
    +                let mut offset = 0;
    +                unsafe {
    +                    // This will compile into something like
    +                    // ```armasm
    +                    // add {offset}, 0, #1, lsl #12
    +                    // add {offset}, {offset}, #0x10
    +                    // sub {offset}, {offset}, #1, lsl #12
    +                    // ```
    +                    // `#1, lsl #12` is `1 << 12 = 0x1000` which is the size of a single page.
    +                    //
    +                    // The first add instruction loads the upper 12 bits of the offset into
    +                    // `{offset}`, and the second add instruction loads the lower 12 bits. Then,
    +                    // since all CLS offsets on aarch64 are a page size larger than they are
    +                    // supposed to be, we subtract a page size. Realistically, we could just omit
    +                    // loading the upper 12 bits of the offset and the `sub` insntruction under the
    +                    // assumption that the CLS section will never be larger than a page. But that
    +                    // would lead to very cryptic bugs if we were to ever breach that limit and an
    +                    // extra `sub` instruction per CLS access isn't significant.
    +                    ::core::arch::asm!(
    +                        "add {offset}, {offset}, #:tprel_hi12:{cls}, lsl #12",
    +                        "add {offset}, {offset}, #:tprel_lo12_nc:{cls}",
    +                        "sub {offset}, {offset}, {tls_start_to_cls_start}",
    +                        offset = inout(reg) offset,
    +                        cls = sym #name,
    +                        tls_start_to_cls_start = in(reg) tls_start_to_cls_start,
    +                        options(nomem, preserves_flags, nostack),
    +                    )
    +                };
    +                offset
    +            }
    +        }
    +    }
    +}
     
    \ No newline at end of file diff --git a/doc/src/cpu_local/lib.rs.html b/doc/src/cpu_local/lib.rs.html deleted file mode 100644 index db95929966..0000000000 --- a/doc/src/cpu_local/lib.rs.html +++ /dev/null @@ -1,641 +0,0 @@ -lib.rs - source
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -
    //! Offers types and macros to declare and access CPU-local storage (per-CPU variables).
    -//!
    -//! CPU-local variables cannot be used until after a given CPU has been initialized,
    -//! i.e., its Local APIC (on x86_64) has been discovered and properly configured.
    -//! Currently, the [`init()`] routine in this crate should be invoked by
    -//! another init routine from the `per_cpu` crate.
    -//!
    -//! Note that Rust offers the `#[thread_local]` attribute for thread-local storage (TLS),
    -//! but there is no equivalent for CPU-local storage.
    -//! On x86_64, TLS areas use the `fs` segment register for the TLS base,
    -//! and this crate uses the `gs` segment register for the CPU-local base.
    -
    -#![no_std]
    -
    -extern crate alloc;
    -
    -use core::marker::PhantomData;
    -use alloc::collections::{BTreeMap, btree_map::Entry};
    -use memory::{MappedPages, PteFlags};
    -use preemption::{hold_preemption, PreemptionGuard};
    -use sync_spin::SpinMutex;
    -
    -#[cfg(target_arch = "x86_64")]
    -use x86_64::{registers::segmentation::{GS, Segment64}, VirtAddr};
    -
    -#[cfg(target_arch = "aarch64")]
    -use {
    -    cortex_a::registers::TPIDR_EL1,
    -    tock_registers::interfaces::{Readable, Writeable},
    -};
    -
    -/// The available CPU-local variables, i.e., fields in `per_cpu::PerCpuData` struct.
    -//
    -// NOTE: These fields and their offsets must be kept in sync with `per_cpu::PerCpuData`.
    -//
    -#[derive(PartialEq, Eq)]
    -pub enum PerCpuField {
    -    CpuId,
    -    PreemptionCount,
    -    TaskSwitchPreemptionGuard,
    -    DropAfterTaskSwitch,
    -}
    -impl PerCpuField {
    -    /// Returns the offset of this field in the `per_cpu::PerCpuData` struct.
    -    pub const fn offset(&self) -> usize {
    -        match self {
    -            Self::CpuId => 8,
    -            Self::PreemptionCount => 12,
    -            Self::TaskSwitchPreemptionGuard => 16,
    -            Self::DropAfterTaskSwitch => 24,
    -        }
    -    }
    -}
    -
    -
    -/// This trait must be implemented for each field in `per_cpu::PerCpuData`.
    -///
    -/// ## Safety
    -/// This is marked `unsafe` because the implementor must guarantee
    -/// that the associated `FIELD` constant is correctly specified.
    -/// * For example, the implementation of this trait for `CpuId` must specify
    -///   the `FIELD` const as [`PerCpuField::CpuId`],
    -///   but we cannot verify that here due to cyclic dependency issues.
    -pub unsafe trait CpuLocalField: Sized {
    -    const FIELD: PerCpuField;
    -
    -    // In the future, we will add a `DeadlockPrevention` parameter here
    -    // to allow each field to dictate what needs to be temporarily disabled
    -    // while accessing this field immutably or mutably.
    -    // For example, disabling preemption, interrupts, or nothing.
    -}
    -
    -
    -/// A reference to a CPU-local variable.
    -///
    -/// ## Usage Notes
    -/// * This does not currently permit or handle usage of `CpuLocal::with_mut()`
    -///   from within an interrupt handler context.
    -///   * Interrupt handler contexts should only access a `CpuLocal` *immutably*.
    -///   * If you need to mutate/modify a CPU-local variable from within an
    -///     interrupt handler, please file an issue to alert the Theseus developers.
    -/// * This struct does not contain an instance of the type `T`.
    -///   Thus, dropping it has no effect.
    -pub struct CpuLocal<T: CpuLocalField>(PhantomData<T>);
    -impl<T: CpuLocalField> CpuLocal<T> {
    -    /// Creates a new reference to a predefined CPU-local variable.
    -    ///
    -    /// ## Arguments
    -    /// * `field`: the field in the `per_cpu::PerCpuData` struct that
    -    ///   you wish to access via the returned `CpuLocal` object.
    -    ///
    -    /// The type `T: CpuLocalField` must be specified with the turbofish operator:
    -    /// ```rust,no_run
    -    /// static CPU_ID: CpuLocal<CpuLocalCpuId> = CpuId::new(PerCpuField::CpuId);
    -    /// ```
    -    pub const fn new(field: PerCpuField) -> Self {
    -        assert!(field.offset() == T::FIELD.offset());
    -        Self(PhantomData)
    -    }
    -
    -    /// Invokes the given `func` with an immutable reference to this `CpuLocal` variable.
    -    ///
    -    /// Preemption will be disabled for the duration of this function
    -    /// in order to ensure that this task cannot be switched away from
    -    /// or migrated to another CPU.
    -    ///
    -    /// If the caller has already disabled preemption, it is more efficient to
    -    /// use the [`with_preempt()`] function, which allows the caller to pass in
    -    /// an existing preemption guard to prove that preemption is already disabled.
    -    pub fn with<F, R>(&self, func: F) -> R
    -    where
    -        F: FnOnce(&T) -> R,
    -    {
    -        let guard = hold_preemption();
    -        self.with_preempt(&guard, func)
    -    }
    -
    -    /// Invokes the given `func` with an immutable reference to this `CpuLocal` variable.
    -    ///
    -    /// This function accepts an existing preemption guard, which efficiently proves
    -    /// that preemption has already been disabled on this CPU.
    -    pub fn with_preempt<F, R>(&self, _guard: &PreemptionGuard, func: F) -> R
    -    where
    -        F: FnOnce(&T) -> R,
    -    {
    -        let ptr_to_cpu_local = self_ptr() + T::FIELD.offset();
    -        let local_ref = unsafe { &*(ptr_to_cpu_local as *const T) };
    -        func(local_ref)
    -    }
    -
    -    /// Invokes the given `func` with a mutable reference to this `CpuLocal` variable.
    -    ///
    -    /// Interrupts will be disabled for the duration of this function
    -    /// in order to ensure atomicity while this per-CPU state is being modified.
    -    pub fn with_mut<F, R>(&self, func: F) -> R
    -    where
    -        F: FnOnce(&mut T) -> R,
    -    {
    -        let _held_interrupts = irq_safety::hold_interrupts();
    -        let ptr_to_cpu_local = self_ptr() + T::FIELD.offset();
    -        let local_ref_mut = unsafe { &mut *(ptr_to_cpu_local as *mut T) };
    -        func(local_ref_mut)
    -    }
    -}
    -
    -/// Returns the value of the self pointer, which points to this CPU's `PerCpuData`.
    -fn self_ptr() -> usize {
    -    let self_ptr: usize;
    -    #[cfg(target_arch = "x86_64")]
    -    unsafe {
    -        core::arch::asm!(
    -            "mov {}, gs:[0]", // the self ptr offset is 0
    -            lateout(reg) self_ptr,
    -            options(nostack, preserves_flags, readonly, pure)
    -        );
    -    }
    -
    -    #[cfg(target_arch = "aarch64")] {
    -        let base = TPIDR_EL1.get();
    -        // The self ptr offset is 0; no need to add an offset to the base.
    -        self_ptr = unsafe { *(base as *const usize) };
    -    }
    -
    -    self_ptr 
    -}
    -
    -impl<T> CpuLocal<T>
    -where
    -    T: Copy + CpuLocalField,
    -{
    -    /// Returns a copy of this `CpuLocal`'s inner value of type `T`.
    -    ///
    -    /// This is a convenience function only available for types where `T: Copy`.
    -    pub fn get(&self) -> T {
    -        self.with(|v| *v)
    -    }
    -}
    -
    -
    -/// The underlying memory region for each CPU's per-CPU data.
    -#[derive(Debug)]
    -struct CpuLocalDataRegion(MappedPages);
    -impl CpuLocalDataRegion {
    -    /// Allocates a new CPU-local data image.
    -    fn new(size_of_per_cpu_data: usize) -> Result<CpuLocalDataRegion, &'static str> {
    -        let mp = memory::create_mapping(
    -            size_of_per_cpu_data,
    -            PteFlags::new().writable(true).valid(true),
    -        )?;
    -        Ok(CpuLocalDataRegion(mp))
    -    }
    -
    -    /// Sets this CPU's base register to the address of this CPU-local data image,
    -    /// making it "currently active" and accessible.
    -    ///
    -    /// * On x86_64, this sets the `GsBase` register.
    -    /// * On aarch64, this sets the `TPIDR_EL1` register.
    -    fn set_as_current_cpu_local_base(&self) {
    -        let self_ptr_value = self.0.start_address().value();
    -
    -        #[cfg(target_arch = "x86_64")] {
    -            let gsbase_val = VirtAddr::new_truncate(self_ptr_value as u64);
    -            unsafe { GS::write_base(gsbase_val) };
    -        }
    -
    -        #[cfg(target_arch = "aarch64")] {
    -            TPIDR_EL1.set(self_ptr_value as u64);
    -        }
    -    }
    -}
    -
    -
    -/// Initializes the CPU-local data region for this CPU.
    -///
    -/// Note: this is invoked by the `per_cpu` crate;
    -///       other crates do not need to invoke this.
    -pub fn init<P>(
    -    cpu_id: u32,
    -    size_of_per_cpu_data: usize,
    -    per_cpu_data_initializer: impl FnOnce(usize) -> P
    -) -> Result<(), &'static str> {
    -    // Enable FSGSBASE instructions
    -    #[cfg(target_arch = "x86_64")]
    -    {
    -        use x86_64::registers::control::{Cr4, Cr4Flags};
    -        unsafe { Cr4::update(|flags| flags.insert(Cr4Flags::FSGSBASE)) };
    -    }
    -    
    -    /// The global set of all per-CPU data regions.
    -    static CPU_LOCAL_DATA_REGIONS: SpinMutex<BTreeMap<u32, CpuLocalDataRegion>> = SpinMutex::new(BTreeMap::new());
    -
    -    let mut regions = CPU_LOCAL_DATA_REGIONS.lock();
    -    let entry = regions.entry(cpu_id);
    -    let data_region = match entry {
    -        Entry::Vacant(v) => v.insert(CpuLocalDataRegion::new(size_of_per_cpu_data)?),
    -        Entry::Occupied(_) => return Err("BUG: cannot init CPU-local data more than once"),
    -    };
    -
    -    // Run the given initializer function to initialize the per-CPU data region.
    -    {
    -        let self_ptr = data_region.0.start_address().value();
    -        let initial_value = per_cpu_data_initializer(self_ptr);
    -        // SAFETY:
    -        // ✅ We just allocated memory for the self ptr above, it is only accessible by us.
    -        // ✅ That memory is mutable (writable) and is aligned to a page boundary.
    -        // ✅ The memory is at least as large as `size_of::<P>()`.
    -        unsafe { core::ptr::write(self_ptr as *mut P, initial_value) };
    -    }
    -
    -    // Set the new CPU-local data region as active and ready to be used on this CPU.
    -    data_region.set_as_current_cpu_local_base();
    -    Ok(())
    -}
    -
    -
    -// NOTE:
    -// we don't currently use this because we always load a pointer to the CpuLocal
    -// instead of loading or storing the value directly.
    -// If/when we wish to support these direct loads/stores of values from/to a
    -// GS-based offset, then we can uncomment this module.
    -/*
    -mod load_store_direct {
    -
    -    mod sealed {
    -        pub(crate) trait SingleMovGs {
    -            unsafe fn load(offset: usize) -> Self;
    -            unsafe fn store(offset: usize, val: Self);
    -        }
    -    }
    -    pub(crate) use sealed::SingleMovGs;
    -
    -    macro_rules! impl_single_mov_gs {
    -        ($type:ty, $reg:ident, $reg_str:literal) => {
    -            impl SingleMovGs for [u8; size_of::<$type>()] {
    -                #[inline]
    -                unsafe fn load(offset: usize) -> Self {
    -                    let val: $type;
    -                    asm!(
    -                        concat!("mov ", $reg_str, ", gs:[{}]"),
    -                        lateout($reg) val, in(reg) offset,
    -                        options(nostack, preserves_flags, readonly, pure)
    -                    );
    -                    val.to_ne_bytes()
    -                }
    -                #[inline]
    -                unsafe fn store(offset: usize, val: Self) {
    -                    asm!(
    -                        concat!("mov gs:[{}], ", $reg_str),
    -                        in(reg) offset, in($reg) <$type>::from_ne_bytes(val),
    -                        options(nostack, preserves_flags)
    -                    );
    -                }
    -            }
    -        };
    -    }
    -
    -    impl_single_mov_gs!(u64, reg,      "{}");
    -    impl_single_mov_gs!(u32, reg,      "{:e}");
    -    impl_single_mov_gs!(u16, reg,      "{:x}");
    -    impl_single_mov_gs!(u8,  reg_byte, "{}");
    -
    -    /// Load `SIZE` bytes from the offset relative to the GsBase segment register.
    -    #[inline]
    -    unsafe fn load<const SIZE: usize>(offset: usize) -> [u8; SIZE]
    -    where
    -        [u8; SIZE]: SingleMovGs,
    -    {
    -        SingleMovGs::load(offset)
    -    }
    -
    -    /// Store `val` at the offset relative to the GsBase segment register.
    -    #[inline]
    -    unsafe fn store<const SIZE: usize>(offset: usize, val: [u8; SIZE])
    -    where
    -        [u8; SIZE]: SingleMovGs,
    -    {
    -        SingleMovGs::store(offset, val)
    -    }
    -}
    -*/
    -
    \ No newline at end of file diff --git a/doc/src/crate_metadata/lib.rs.html b/doc/src/crate_metadata/lib.rs.html index 550ee7d343..155eec3b90 100644 --- a/doc/src/crate_metadata/lib.rs.html +++ b/doc/src/crate_metadata/lib.rs.html @@ -1422,6 +1422,12 @@ 1422 1423 1424 +1425 +1426 +1427 +1428 +1429 +1430
    //! Defines types that contain metadata about crates loaded in Theseus and their dependencies.
     //! 
     //! ## Representing dependencies between sections
    @@ -1672,6 +1678,8 @@
         /// The `Shndx` values in this set are the section index (shndx) numbers, 
         /// which can be used as the key to look up the actual `LoadedSection` in the `sections` list above.
         pub tls_sections: BTreeSet<Shndx>,
    +    /// The set of CPU-local storage (CLS) symbols in this crate.
    +    pub cls_sections: BTreeSet<Shndx>,
         /// The set of `.data` and `.bss` sections in this crate.
         /// The `Shndx` values in this set are the section index (shndx) numbers, 
         /// which can be used as the key to look up the actual `LoadedSection` in the `sections` list above.
    @@ -1932,6 +1940,7 @@
                     SectionType::Rodata
                     | SectionType::TlsBss
                     | SectionType::TlsData
    +                | SectionType::Cls
                     | SectionType::GccExceptTable
                     | SectionType::EhFrame => new_rodata_pages_locked
                         .as_mut()
    @@ -2033,6 +2042,7 @@
         static BSS              : Once<StrRef> = Once::new();
         static TLS_DATA         : Once<StrRef> = Once::new();
         static TLS_BSS          : Once<StrRef> = Once::new();
    +    static CLS              : Once<StrRef> = Once::new();
         static GCC_EXCEPT_TABLE : Once<StrRef> = Once::new();
         static EH_FRAME         : Once<StrRef> = Once::new();
     
    @@ -2043,6 +2053,7 @@
             SectionType::Bss            => &BSS,
             SectionType::TlsData        => &TLS_DATA,
             SectionType::TlsBss         => &TLS_BSS,
    +        SectionType::Cls            => &CLS,
             SectionType::GccExceptTable => &GCC_EXCEPT_TABLE,
             SectionType::EhFrame        => &EH_FRAME,
         };
    @@ -2335,6 +2346,7 @@
             // Add the rest of the typical fields
             dbg.field("vaddr", &self.virt_addr)
                 .field("size", &self.size)
    +            .field("mapped_pages_offset", &self.mapped_pages_offset)
                 .finish_non_exhaustive()
         }
     }
    diff --git a/doc/src/crate_metadata_serde/lib.rs.html b/doc/src/crate_metadata_serde/lib.rs.html
    index 059aec8584..eea1b87a3d 100644
    --- a/doc/src/crate_metadata_serde/lib.rs.html
    +++ b/doc/src/crate_metadata_serde/lib.rs.html
    @@ -152,6 +152,19 @@
     152
     153
     154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
     
    //! Standalone crate containing (de)serializable types for crate and section metadata.
     //! 
     //! The primary reason this exists is because `LoadedCrate` and `LoadedSection`
    @@ -191,6 +204,12 @@
     use hashbrown::HashMap;
     use serde::{Deserialize, Serialize};
     
    +/// The flag identifying CLS sections.
    +pub const CLS_SECTION_FLAG: u64 = 0x100000;
    +
    +/// The type identifying CLS symbols.
    +pub const CLS_SYMBOL_TYPE: u8 = 0xa;
    +
     /// A (de)serializable representation of a loaded crate that is `serde`-compatible.
     ///
     /// See `LoadedCrate` for more detail on the fields of this struct.
    @@ -200,10 +219,12 @@
         pub crate_name: String,
         /// A map containing all the sections of the crate.
         pub sections: HashMap<Shndx, SerializedSection>,
    -    /// A set containing the global sectinos of the crate.
    +    /// A set containing the global sections of the crate.
         pub global_sections: BTreeSet<Shndx>,
         /// A set containing the thread-local storage (TLS) sections of the crate.
         pub tls_sections: BTreeSet<Shndx>,
    +    /// The CLS section of the crate.
    +    pub cls_sections: BTreeSet<Shndx>,
         /// A set containing the `.data` and `.bss` sections of the crate.
         pub data_sections: BTreeSet<Shndx>,
         /// A map of symbol names to their constant values, which contain assembler and linker
    @@ -241,6 +262,7 @@
     pub const BSS_SECTION_NAME              : &str = ".bss";
     pub const TLS_DATA_SECTION_NAME         : &str = ".tdata";
     pub const TLS_BSS_SECTION_NAME          : &str = ".tbss";
    +pub const CLS_SECTION_NAME              : &str = ".cls";
     pub const GCC_EXCEPT_TABLE_SECTION_NAME : &str = ".gcc_except_table";
     pub const EH_FRAME_SECTION_NAME         : &str = ".eh_frame";
     
    @@ -261,6 +283,9 @@
         /// A `.tbss` section is a read-only section that holds all-zero data for a thread-local storage (TLS) area.
         /// This is is effectively an empty placeholder: the all-zero data section doesn't actually exist in memory.
         TlsBss,
    +    /// A `.cls` section is a read-only section that holds the initial data "image" for a CPU-local
    +    /// (CLS) area.
    +    Cls,
         /// A `.gcc_except_table` section contains landing pads for exception handling,
         /// comprising the LSDA (Language Specific Data Area),
         /// which is effectively used to determine when we should stop the stack unwinding process
    @@ -291,6 +316,7 @@
                 Self::Bss            => BSS_SECTION_NAME,
                 Self::TlsData        => TLS_DATA_SECTION_NAME,
                 Self::TlsBss         => TLS_BSS_SECTION_NAME,
    +            Self::Cls            => CLS_SECTION_NAME,
                 Self::GccExceptTable => GCC_EXCEPT_TABLE_SECTION_NAME,
                 Self::EhFrame        => EH_FRAME_SECTION_NAME,
             }
    diff --git a/doc/src/early_tls/lib.rs.html b/doc/src/early_tls/lib.rs.html
    index 8d1f98674b..fbe4371cf5 100644
    --- a/doc/src/early_tls/lib.rs.html
    +++ b/doc/src/early_tls/lib.rs.html
    @@ -30,6 +30,19 @@
     30
     31
     32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
     
    //! Handles initialization of TLS data images during early OS initialization.
     //!
     //! This is only useful before the tasking subsystem is initialized, i.e.,
    @@ -37,29 +50,42 @@
     
     #![no_std]
     
    -use tls_initializer::TlsDataImage;
    +use local_storage_initializer::TlsDataImage;
     use spin::Mutex;
     
    -static EARLY_TLS_IMAGE: Mutex<TlsDataImage> = Mutex::new(TlsDataImage::empty());
    +static EARLY_TLS_IMAGE: Mutex<TlsDataImage> = Mutex::new(TlsDataImage::new());
     
     /// Insert the current early TLS image with the given `new_tls_image`,
     /// and loads the new image on this CPU.
     ///
     /// If an early TLS image already exists, it is removed and dropped.
     pub fn insert(new_tls_image: TlsDataImage) {
    -    new_tls_image.set_as_current_tls_base();
    +    // SAFETY: `new_tls_image` is only dropped if:
    +    // - `insert` is called again, in which case the next image will replace it
    +    //   before it is dropped.
    +    // - `drop` is called in which case the caller guarantees that the task
    +    //   subsystem has been initialized i.e. the early image has been replaced.
    +    unsafe { new_tls_image.set_as_current_tls() };
         *EARLY_TLS_IMAGE.lock() = new_tls_image;
     }
     
     /// Loads the existing (previously-initialized) early TLS image on this CPU.
     pub fn reload() {
    -    EARLY_TLS_IMAGE.lock().set_as_current_tls_base();
    +    // SAFETY: The early TLS image is only dropped if:
    +    // - `insert` is called, in which case the next image will replace it before it
    +    //   is dropped.
    +    // - `drop` is called in which case the caller guarantees that the task
    +    //   subsystem has been initialized i.e. the early image has been replaced.
    +    unsafe { EARLY_TLS_IMAGE.lock().set_as_current_tls() };
     }
     
     /// Clears the early TLS image
     ///
    -/// This should only be invoked after the task subsystem is initialized on all CPUs.
    -pub fn drop() {
    -    *EARLY_TLS_IMAGE.lock() = TlsDataImage::empty();
    +/// # Safety
    +///
    +/// This must only be called after the task subsystem is initialized on all
    +/// CPUs.
    +pub unsafe fn drop() {
    +    *EARLY_TLS_IMAGE.lock() = TlsDataImage::new();
     }
     
    \ No newline at end of file diff --git a/doc/src/tls_initializer/lib.rs.html b/doc/src/local_storage_initializer/lib.rs.html similarity index 63% rename from doc/src/tls_initializer/lib.rs.html rename to doc/src/local_storage_initializer/lib.rs.html index e4364c1586..9dfb905868 100644 --- a/doc/src/tls_initializer/lib.rs.html +++ b/doc/src/local_storage_initializer/lib.rs.html @@ -1,4 +1,4 @@ -lib.rs - source
    1
    +lib.rs - source
    1
     2
     3
     4
    @@ -411,25 +411,161 @@
     411
     412
     413
    -
    //! Logic for generating Thread-Local Storage (TLS) data image for TLS areas.
    +414
    +415
    +416
    +417
    +418
    +419
    +420
    +421
    +422
    +423
    +424
    +425
    +426
    +427
    +428
    +429
    +430
    +431
    +432
    +433
    +434
    +435
    +436
    +437
    +438
    +439
    +440
    +441
    +442
    +443
    +444
    +445
    +446
    +447
    +448
    +449
    +450
    +451
    +452
    +453
    +454
    +455
    +456
    +457
    +458
    +459
    +460
    +461
    +462
    +463
    +464
    +465
    +466
    +467
    +468
    +469
    +470
    +471
    +472
    +473
    +474
    +475
    +476
    +477
    +478
    +479
    +480
    +481
    +482
    +483
    +484
    +485
    +486
    +487
    +488
    +489
    +490
    +491
    +492
    +493
    +494
    +495
    +496
    +497
    +498
    +499
    +500
    +501
    +502
    +503
    +504
    +505
    +506
    +507
    +508
    +509
    +510
    +511
    +512
    +513
    +514
    +515
    +516
    +517
    +518
    +519
    +520
    +521
    +522
    +523
    +524
    +525
    +526
    +527
    +528
    +529
    +530
    +531
    +532
    +533
    +534
    +535
    +536
    +537
    +538
    +539
    +540
    +541
    +542
    +543
    +544
    +545
    +546
    +547
    +548
    +
    //! Logic for generating thread-local storage (TLS) and CPU-local storage (CLS) images.
     //!
     //! The two key types are:
    -//! 1. [`TlsInitializer`]: a "factory" that maintains a list of loaded TLS sections
    -//!    in order to correctly generate new TLS data images.
    -//! 2. [`TlsDataImage`]: a generated TLS data image that can be used as the TLS area
    -//!    for a single task.
    +//! 1. [`LocalStorageInitializer`]: a "factory" that maintains a list of loaded sections
    +//!    in order to correctly generate new local storage data images.
    +//! 2. [`LocalStorageDataImage`]: a generated local storage data image that can be set
    +//!    as the current data image.
     //!
     //! TODO FIXME: currently we are unsure of the `virt_addr_value`s calculated 
     //!             for TLS sections on aarch64. The placement of those sections in the
     //!             TLS data image is correct, but relocations against them may not be.
    +//! TODO: We don't really need a TLS self pointer for CLS.
     
     #![no_std]
     #![feature(int_roundings)]
     
     extern crate alloc;
     
    -use alloc::{sync::Arc, vec::Vec, boxed::Box};
    -use core::{cmp::max, ops::Deref};
    +use alloc::{sync::Arc, vec::Vec};
    +use core::{cmp::max, ops::Deref, marker::PhantomData};
     use crate_metadata::{LoadedSection, SectionType, StrongSectionRef};
     use memory_structs::VirtualAddress;
     use rangemap::RangeMap;
    @@ -446,18 +582,23 @@
         tock_registers::interfaces::Writeable,
     };
     
    -/// A "factory" that creates Thread-Local Storage (TLS) data images,
    -/// which are used to initialize a new `Task`'s TLS area.
    +pub type TlsInitializer = LocalStorageInitializer<Tls>;
    +pub type ClsInitializer = LocalStorageInitializer<Cls>;
    +
    +/// A "factory" that creates local storage data images.
     #[derive(Debug, Clone)]
    -pub struct TlsInitializer {
    +pub struct LocalStorageInitializer<T>
    +where
    +    T: LocalStorage,
    +{
         /// The cached data image (with blank space for the TLS self pointer).
    -    /// This is used to avoid unnecessarily re-generating the TLS data image
    -    /// every time a new task is spawned if no TLS data sections have been added.
    +    /// This is used to avoid unnecessarily re-generating the local storage data image
    +    /// every time a new task is spawned if no data sections have been added.
         data_cache: Vec<u8>,
         /// The status of the above `data_cache`: whether it is ready to be used
         /// immediately or needs to be regenerated.
         cache_status: CacheStatus,
    -    /// The set of TLS data sections that are defined at link time
    +    /// The set of CLS/TLS data sections that are defined at link time
         /// and come from the statically-linked base kernel image (the nano_core).
         ///
         /// On x86_64, the ELF TLS ABI specifies that static TLS sections exist at **negative** offsets
    @@ -469,25 +610,78 @@
         /// On aarch64, the ELF TLS ABI specifies only positive offsets,
         /// and there is no TLS self pointer.
         static_section_offsets:  RangeMap<usize, StrongSectionRefWrapper>,
    -    /// The ending offset (an exclusive range end bound) of the last TLS section
    +    /// The ending offset (an exclusive range end bound) of the last CLS/TLS section
         /// in the above set of `static_section_offsets`.
         /// This is the offset where the TLS self pointer exists.
         end_of_static_sections: usize,
    -    /// The set of TLS data sections that come from dynamically-loaded crate object files.
    +    /// The set of CLS/TLS data sections that come from dynamically-loaded crate object files.
         /// We can control and arbitrarily assign their offsets, and thus,
         /// we place all of these sections **after** the static sections
    -    /// in the generated TLS data image.
    +    /// in the generated CLS/TLS data image.
         ///
         /// * On x86_64, these are placed right after the TLS self pointer,
    -    ///   which itself is right after the static TLS sections.
    -    /// * On aarch64, these are placed directly after the static TLS sections,
    +    ///   which itself is right after the static CLS/TLS sections.
    +    /// * On aarch64, these are placed directly after the static CLS/TLS sections,
         ///   as there is no TLS self pointer.
         dynamic_section_offsets: RangeMap<usize, StrongSectionRefWrapper>,
    -    /// The ending offset (an exclusive range end bound) of the last TLS section
    +    /// The ending offset (an exclusive range end bound) of the last CLS/TLS section
         /// in the above set of `dynamic_section_offsets`.
         end_of_dynamic_sections: usize,
    +    _phantom: PhantomData<T>,
     } 
     
    +pub trait LocalStorage: private::Sealed {}
    +
    +#[non_exhaustive]
    +#[derive(Debug)]
    +pub struct Cls {}
    +
    +impl Sealed for Cls {
    +    unsafe fn set_as_current_base(ptr: u64) {
    +        #[cfg(target_arch = "x86_64")]
    +        {
    +            use x86_64::registers::{
    +                control::{Cr4, Cr4Flags},
    +                segmentation::{Segment64, GS},
    +            };
    +            unsafe { Cr4::update(|flags| flags.insert(Cr4Flags::FSGSBASE)) };
    +            unsafe { GS::write_base(VirtAddr::new(ptr)) };
    +        };
    +        #[cfg(target_arch = "aarch64")]
    +        {
    +            use cortex_a::registers::TPIDR_EL1;
    +            TPIDR_EL1.set(ptr);
    +        }
    +    }
    +}
    +
    +impl LocalStorage for Cls {}
    +
    +#[non_exhaustive]
    +#[derive(Debug)]
    +pub struct Tls {}
    +
    +impl Sealed for Tls {
    +    unsafe fn set_as_current_base(ptr: u64) {
    +        #[cfg(target_arch = "x86_64")]
    +        FsBase::write(VirtAddr::new(ptr));
    +
    +        #[cfg(target_arch = "aarch64")]
    +        TPIDR_EL0.set(ptr);
    +    }
    +}
    +
    +impl LocalStorage for Tls {}
    +
    +use private::Sealed;
    +mod private {
    +    pub trait Sealed {
    +        /// Moves `ptr` into the associated register.
    +        #[allow(clippy::missing_safety_doc)]
    +        unsafe fn set_as_current_base(ptr: u64);
    +    }
    +}
    +
     /// On x86_64, a TLS self pointer exists at the 0th index/offset into each TLS data image,
     /// which is just a pointer to itself.
     #[cfg(target_arch = "x86_64")]
    @@ -497,24 +691,27 @@
     #[cfg(target_arch = "aarch64")]
     const TLS_SELF_POINTER_SIZE: usize = 0;
     
    -/// Errors that may occur when adding TLS sections to a `TlsInitializer`.
    +/// Errors that may occur when adding sections to a `LocalStorageInitializer`.
     #[derive(Debug)]
    -pub enum TlsInitializerError {
    -    /// Inserting a TLS section at the included offset
    +pub enum LocalStorageInitializerError {
    +    /// Inserting a CLS/TLS section at the included offset
         /// would erroneously overlap with an existing section. 
         /// This indicates a link-time bug or a bug in the symbol parsing code
    -    /// that invokes the [`TlsInitializer::add_existing_static_tls_section()`].
    +    /// that invokes the [`LocalStorageInitializer::add_existing_static_tls_section()`].
         OverlapWithExistingSection(usize),
    -    /// The included virtual address calculated for a TLS section was invalid.
    +    /// The included virtual address calculated for a CLS/TLS section was invalid.
         InvalidVirtualAddress(usize),
    -    /// There was insufficient space to insert a TLS section into the TLS data image.
    +    /// There was insufficient space to insert a CLS/TLS section into the data image.
         NoRemainingSpace,
     }
     
    -impl TlsInitializer {
    -    /// Creates an empty TLS initializer with no TLS data sections.
    -    pub const fn empty() -> TlsInitializer {
    -        TlsInitializer {
    +impl<T> LocalStorageInitializer<T>
    +where
    +    T: LocalStorage,
    +{
    +    /// Creates an empty local storage initializer with no data sections.
    +    pub const fn new() -> Self {
    +        LocalStorageInitializer {
                 // The data image will be generated lazily on the next request to use it.
                 data_cache: Vec::new(),
                 cache_status: CacheStatus::Invalidated,
    @@ -522,11 +719,12 @@
                 end_of_static_sections: 0,
                 dynamic_section_offsets: RangeMap::new(),
                 end_of_dynamic_sections: 0,
    +            _phantom: PhantomData,
             }
         }
     
         
    -    /// Add a TLS section that has pre-determined offset, e.g.,
    +    /// Add a CLS/TLS section that has pre-determined offset, e.g.,
         /// one that was specified in the statically-linked base kernel image.
         ///
         /// This function modifies the `tls_section`'s starting virtual address field
    @@ -545,11 +743,11 @@
         ///     (from the beginning of all sections).
         ///
         /// ## Arguments
    -    /// * `tls_section`: the TLS section present in base kernel image.
    +    /// * `section`: the section present in base kernel image.
         /// * `offset`: the offset of this section as determined by the linker.
         ///    This corresponds to the "value" of this section's symbol in the ELF file.
    -    /// * `total_static_tls_size`: the total size of all statically-known TLS sections,
    -    ///    including both TLS BSS (`.tbss`) and TLS data (`.tdata`) sections.
    +    /// * `total_static_size`: the total size of all statically-known CLS/TLS sections,
    +    ///    including both TLS BSS (`.tbss`) and TLS data (`.tdata`) sections for TLS.
         ///
         /// ## Return
         /// * A reference to the newly added and properly modified section, if successful.
    @@ -558,42 +756,42 @@
         ///   An error occurring here would indicate a link-time bug 
         ///   or a bug in the symbol parsing code that invokes this function.
         #[cfg_attr(target_arch = "aarch64", allow(unused_variables))]
    -    pub fn add_existing_static_tls_section(
    +    pub fn add_existing_static_section(
             &mut self,
    -        mut tls_section: LoadedSection,
    +        mut section: LoadedSection,
             offset: usize,
    -        total_static_tls_size: usize,
    -    ) -> Result<StrongSectionRef, TlsInitializerError> {
    +        total_static_size: usize,
    +    ) -> Result<StrongSectionRef, LocalStorageInitializerError> {
             #[cfg(target_arch = "aarch64")]
             let original_offset = offset;
             #[cfg(target_arch = "aarch64")]
             let offset = max(16, 8 /* TODO FIXME: pass in the TLS segment's alignment */) + offset;
     
    -        let range = offset .. (offset + tls_section.size);
    +        let range = offset .. (offset + section.size);
             if self.static_section_offsets.contains_key(&range.start) || 
                 self.static_section_offsets.contains_key(&(range.end - 1))
             {
    -            return Err(TlsInitializerError::OverlapWithExistingSection(offset));
    +            return Err(LocalStorageInitializerError::OverlapWithExistingSection(offset));
             }
     
             // Calculate the new value of this section's virtual address based on its offset.
             #[cfg(target_arch = "x86_64")]
    -        let virt_addr_value = (total_static_tls_size - offset).wrapping_neg();
    +        let virt_addr_value = (total_static_size - offset).wrapping_neg();
     
             #[cfg(target_arch = "aarch64")]
             let virt_addr_value = original_offset;
     
    -        tls_section.virt_addr = VirtualAddress::new(virt_addr_value)
    -            .ok_or(TlsInitializerError::InvalidVirtualAddress(virt_addr_value))?;
    +        section.virt_addr = VirtualAddress::new(virt_addr_value)
    +            .ok_or(LocalStorageInitializerError::InvalidVirtualAddress(virt_addr_value))?;
             self.end_of_static_sections = max(self.end_of_static_sections, range.end);
    -        let section_ref = Arc::new(tls_section);
    +        let section_ref = Arc::new(section);
             self.static_section_offsets.insert(range, StrongSectionRefWrapper(section_ref.clone()));
             self.cache_status = CacheStatus::Invalidated;
             Ok(section_ref)
         }
     
    -    /// Inserts the given `section` into this TLS area at the next index
    -    /// (i.e., offset into the TLS area) where the section will fit.
    +    /// Inserts the given `section` into this CLS/TLS area at the next index
    +    /// (i.e., offset into the CLS/TLS area) where the section will fit.
         ///
         /// This also modifies the virtual address field of the given `section`
         /// to hold the proper value based on that offset, which is necessary
    @@ -601,15 +799,15 @@
         ///
         /// Returns a tuple of:
         /// 1. The index at which the new section was inserted, 
    -    ///    which is the offset from the beginning of the TLS area where the section data starts.
    +    ///    which is the offset from the beginning of the CLS/TLS area where the section data starts.
         /// 2. The modified section as a `StrongSectionRef`.
         ///
         /// Returns an Error if there is no remaining space that can fit the section.
    -    pub fn add_new_dynamic_tls_section(
    +    pub fn add_new_dynamic_section(
             &mut self,
             mut section: LoadedSection,
             alignment: usize,
    -    ) -> Result<(usize, StrongSectionRef), TlsInitializerError> {
    +    ) -> Result<(usize, StrongSectionRef), LocalStorageInitializerError> {
             let mut start_index = None;
             // First, we find the next "gap" big enough to fit the new TLS section.
             // On x86_64, we skip the first `TLS_SELF_POINTER_SIZE` bytes, reserved for the TLS self pointer.
    @@ -628,7 +826,7 @@
                 }
             }
     
    -        let start = start_index.ok_or(TlsInitializerError::NoRemainingSpace)?;
    +        let start = start_index.ok_or(LocalStorageInitializerError::NoRemainingSpace)?;
     
             // Calculate this section's virtual address based the range we reserved for it.
             #[cfg(target_arch = "x86_64")]
    @@ -638,7 +836,7 @@
             let virt_addr_value = start + self.end_of_static_sections - max(16, 8 /* TODO FIXME: pass in the TLS segment's alignment */);
     
             section.virt_addr = VirtualAddress::new(virt_addr_value)
    -            .ok_or(TlsInitializerError::InvalidVirtualAddress(virt_addr_value))?;
    +            .ok_or(LocalStorageInitializerError::InvalidVirtualAddress(virt_addr_value))?;
             let range = start .. (start + section.size);
             let section_ref = Arc::new(section);
             self.end_of_dynamic_sections = max(self.end_of_dynamic_sections, range.end);
    @@ -648,23 +846,23 @@
             Ok((start, section_ref))
         }
     
    -    /// Invalidates the cached data image in this `TlsInitializer` area.
    +    /// Invalidates the cached data image in this `LocalStorageInitializer` area.
         /// 
    -    /// This is useful for when a TLS section's data has been modified,
    +    /// This is useful for when a CLS/TLS section's data has been modified,
         /// e.g., while performing relocations, 
         /// and thus the data image needs to be re-created by re-reading the section data.
         pub fn invalidate(&mut self) {
             self.cache_status = CacheStatus::Invalidated;
         }
     
    -    /// Returns a new copy of the TLS data image.
    +    /// Returns a new copy of the data image.
         ///
    -    /// This function lazily generates the TLS image data on demand, if needed.
    -    pub fn get_data(&mut self) -> TlsDataImage {
    +    /// This function lazily generates the image data on demand, if needed.
    +    pub fn get_data(&mut self) -> LocalStorageDataImage<T> {
             let total_section_size = self.end_of_static_sections + self.end_of_dynamic_sections;
             let required_capacity = if total_section_size > 0 { total_section_size + TLS_SELF_POINTER_SIZE } else { 0 };
             if required_capacity == 0 {
    -            return TlsDataImage { _data: None, ptr: 0 };
    +            return LocalStorageDataImage::new();
             }
     
             // An internal function that iterates over all TLS sections and copies their data into the new data image.
    @@ -679,7 +877,8 @@
                     new_data.extend(core::iter::repeat(0).take(num_padding_bytes));
     
                     // Insert the section data into the new data vec.
    -                if sec.typ == SectionType::TlsData {
    +                log::info!("adding sec: {sec:?}");
    +                if (sec.typ == SectionType::TlsData) | (sec.typ == SectionType::Cls) {
                         let sec_mp = sec.mapped_pages.lock();
                         let sec_data: &[u8] = sec_mp.as_slice(sec.mapped_pages_offset, sec.size).unwrap();
                         new_data.extend_from_slice(sec_data);
    @@ -692,7 +891,7 @@
             }
     
             if self.cache_status == CacheStatus::Invalidated {
    -            // log::debug!("TlsInitializer was invalidated, re-generating data.\n{:#X?}", self);
    +            // log::debug!("LocalStorageInitializer was invalidated, re-generating data.\n{:#X?}", self);
     
                 // On some architectures, such as x86_64, the ABI convention REQUIRES that
                 // the TLS area data starts with a pointer to itself (the TLS self pointer).
    @@ -731,7 +930,7 @@
     
             // Here, the `data_cache` is guaranteed to be fresh and ready to use.
             #[cfg(target_arch = "x86_64")] {
    -            let mut data_copy: Box<[u8]> = self.data_cache.as_slice().into();
    +            let mut data_copy = self.data_cache.clone();
                 // Every time we create a new copy of the TLS data image, we have to re-calculate
                 // and re-assign the TLS self pointer value (located after the static TLS section data),
                 // because the virtual address of that new TLS data image copy will be unique.
    @@ -742,64 +941,132 @@
                 ) else {
                     panic!("BUG: offset of TLS self pointer was out of bounds in the TLS data image:\n{:02X?}", data_copy);
                 };
    -            let tls_self_ptr_value = dest_slice.as_ptr() as usize;
    +            let tls_self_ptr_value = dest_slice.as_ptr() as u64;
                 dest_slice.copy_from_slice(&tls_self_ptr_value.to_ne_bytes());
    -            TlsDataImage {
    -                _data: Some(data_copy),
    -                ptr:   tls_self_ptr_value,
    +            LocalStorageDataImage {
    +                ptr: tls_self_ptr_value,
    +                data: data_copy,
    +                _phantom: PhantomData,
                 }
             }
     
             #[cfg(target_arch = "aarch64")] {
    -            let data_copy: Box<[u8]> = self.data_cache.as_slice().into();
    -            let ptr = data_copy.as_ptr() as usize;
    -            TlsDataImage {
    -                _data: Some(data_copy),
    -                ptr,
    +            let cloned = self.data_cache.clone();
    +            LocalStorageDataImage {
    +                ptr: cloned.as_ptr() as u64,
    +                data: cloned,
    +                _phantom: PhantomData,
                 }
             }
         }
     }
     
    -/// An initialized TLS area data image ready to be used by a new task.
    +/// An initialized data image ready to be used by a CPU/new task.
     /// 
    -/// The data is opaque, but one can obtain a pointer to the TLS area.
    -/// 
    -/// The enclosed opaque data is stored as a boxed slice (`Box<[u8]>`)
    -/// instead of a vector (`Vec<u8>`) because it is instantiated once upon task creation
    -/// and should never be expanded or shrunk.
    +/// The data is opaque, but one can obtain a pointer to the CLS/TLS area.
     /// 
     /// The data is "immutable" with respect to Theseus task management functions
    -/// at the language level.
    -/// However, the data within this TLS area will be modified directly by code
    -/// that executes "in" this task, e.g., instructions that access the current TLS area.
    +/// at the language level. However, it will be modified by CLS/TLS accesses.
     #[derive(Debug)]
    -pub struct TlsDataImage {
    -    // The data is wrapped in an Option to avoid allocating an empty boxed slice
    -    // when there are no TLS data sections.
    -    _data: Option<Box<[u8]>>,
    -    ptr:   usize,
    +pub struct LocalStorageDataImage<T>
    +where
    +    T: LocalStorage,
    +{
    +    data: Vec<u8>,
    +    ptr: u64,
    +    _phantom: PhantomData<T>,
     }
    -impl TlsDataImage {
    -    /// Creates an empty TLS data image with no TLS section content.
    -    pub const fn empty() -> TlsDataImage {
    -        Self { _data: None, ptr: 0 }
    +
    +impl<T> LocalStorageDataImage<T>
    +where
    +    T: LocalStorage,
    +{
    +    /// Creates an empty data image.
    +    pub const fn new() -> Self {
    +        Self {
    +            data: Vec::new(),
    +            ptr: 0,
    +            _phantom: PhantomData,
    +        }
         }
     
    -    /// Sets the current CPU's TLS register to point to this TLS data image.
    +    /// Inherits the data from another data image.
    +    ///
    +    /// # Panics
         ///
    -    /// * On x86_64, this writes to the `FsBase` MSR.
    -    /// * On ARMv8, this writes to `TPIDR_EL0`.
    -    pub fn set_as_current_tls_base(&self) {
    +    /// Panics if the other image has a longer length, or (on x86_64) if the other
    +    /// image has a differently sized static area.
    +    pub fn inherit(&mut self, other: &Self) {
    +        #[cfg(target_arch = "aarch64")]
    +        {
    +            let other_len = other.data.len();
    +            assert!(other_len <= self.data.len());
    +            self.data[..other_len].clone_from_slice(&other.data[..]);
    +        }
             #[cfg(target_arch = "x86_64")]
    -        FsBase::write(VirtAddr::new_truncate(self.ptr as u64));
    +        {
    +            if !other.data.is_empty() {
    +                // ```
    +                //                ptr
    +                //                 V
    +                //        +--------+----------+---------+
    +                // other: | static | self ptr | dynamic |
    +                //        +--------+----------+---------+
    +                //        +--------+----------+-------------+
    +                //  self: | static | self ptr |   dynamic   |
    +                //        +--------+----------+-------------+
    +                //                 ^
    +                //                ptr
    +                // ```
    +                let self_static_len = self.ptr as usize - self.data.as_ptr() as usize;
    +                let other_static_len = other.ptr as usize - other.data.as_ptr() as usize;
     
    -        #[cfg(target_arch = "aarch64")]
    -        TPIDR_EL0.set(self.ptr as u64);
    +                assert_eq!(self_static_len, other_static_len);
    +                assert!(other.data.len() <= self.data.len());
    +
    +                self.data[..self_static_len].clone_from_slice(&other.data[..self_static_len]);
    +                self.data[(self_static_len + TLS_SELF_POINTER_SIZE)..other.data.len()]
    +                    .clone_from_slice(&other.data[(self_static_len + TLS_SELF_POINTER_SIZE)..]);
    +            }
    +        }
         }
     }
     
    -/// The status of a cached TLS area data image.
    +pub type ClsDataImage = LocalStorageDataImage<Cls>;
    +
    +pub type TlsDataImage = LocalStorageDataImage<Tls>;
    +
    +impl LocalStorageDataImage<Cls> {
    +    /// Sets the data image.
    +    ///
    +    /// # Safety
    +    ///
    +    /// The data image must not be dropped until another data image replaces it.
    +    pub unsafe fn set_as_current_cls(&self) {
    +        // SAFETY: We guarantee that the length of `data` never changes and hence that it is never
    +        // reallocated. The caller guarantees that `self` and by extension `data` is never dropped.
    +        // NOTE: This is technically undefined behaviour because we cast the `*const ptr` into a
    +        // `*mut ptr` in the code generated by `cls_macros`. Obviously, it goes through a system
    +        // register that Rust cannot possible reason about so it's probably fine?
    +        unsafe { Cls::set_as_current_base(self.ptr) };
    +    }
    +}
    +
    +impl LocalStorageDataImage<Tls> {
    +    /// Sets the data image.
    +    ///
    +    /// # Safety
    +    ///
    +    /// The data image must not be dropped until another data image replaces it, or until
    +    /// thread-local storage will never be accessed from the current thread again.
    +    pub unsafe fn set_as_current_tls(&self) {
    +        // SAFETY: We guarantee that the length of `data` never changes and hence that it is never
    +        // reallocated. The caller guarantees that `self` and by extension `data` is never dropped.
    +        unsafe { Tls::set_as_current_base(self.ptr) };
    +    }
    +}
    +
    +/// The status of a cached data image.
     #[derive(Debug, Clone, PartialEq, Eq)]
     enum CacheStatus {
         /// The cached data image is up to date and can be used immediately.
    @@ -812,16 +1079,19 @@
     /// so we can use it in a `RangeMap`.
     #[derive(Debug, Clone)]
     struct StrongSectionRefWrapper(StrongSectionRef);
    +
     impl Deref for StrongSectionRefWrapper {
         type Target = StrongSectionRef;
         fn deref(&self) -> &Self::Target {
             &self.0
         }
     }
    +
     impl PartialEq for StrongSectionRefWrapper {
         fn eq(&self, other: &Self) -> bool {
             Arc::ptr_eq(&self.0, &other.0)
         }
     }
    -impl Eq for StrongSectionRefWrapper { }
    +
    +impl Eq for StrongSectionRefWrapper {}
     
    \ No newline at end of file diff --git a/doc/src/memory_aarch64/lib.rs.html b/doc/src/memory_aarch64/lib.rs.html index c22bd891ef..e3957b66a1 100644 --- a/doc/src/memory_aarch64/lib.rs.html +++ b/doc/src/memory_aarch64/lib.rs.html @@ -477,6 +477,11 @@ 477 478 479 +480 +481 +482 +483 +484
    //! This crate implements the virtual memory subsystem interfaces for Theseus on aarch64.
     //! `memory` uses this crate to get the memory layout and do other arch-specific operations on aarch64.  
     //! 
    @@ -830,8 +835,9 @@
             // | (5)  | .gcc_except_table | part/end of read-only pages   |
             // | (6)  | .tdata            | part/end of read-only pages   |
             // | (7)  | .tbss             | part/end of read-only pages   |
    -        // | (8)  | .data             | start of read-write pages     |
    -        // | (9)  | .bss              | end of read-write pages       |
    +        // | (8)  | .cls              | part/end of read-only pages   |
    +        // | (9)  | .data             | start of read-write pages     |
    +        // | (10) | .bss              | end of read-write pages       |
             // |------|-------------------|-------------------------------|
             //
             // Note that we combine the TLS data sections (.tdata and .tbss) into the read-only pages,
    @@ -865,7 +871,7 @@
                     rodata_flags = Some(flags);
                     "nano_core .gcc_except_table"
                 }
    -            // The following four sections are optional: .tdata, .tbss, .data, .bss.
    +            // The following five sections are optional: .tdata, .tbss, .cls, .data, .bss.
                 ".tdata" => {
                     rodata_end = Some((end_virt_addr, end_phys_addr));
                     "nano_core .tdata"
    @@ -875,6 +881,10 @@
                     debug!("     no need to map kernel section \".tbss\", it contains no content");
                     continue;
                 }
    +            ".cls" => {
    +                rodata_end = Some((end_virt_addr, end_phys_addr));
    +                "nano_core .cls"
    +            }
                 ".data" => {
                     data_start.get_or_insert((start_virt_addr, start_phys_addr));
                     data_end = Some((end_virt_addr, end_phys_addr));
    diff --git a/doc/src/memory_x86_64/lib.rs.html b/doc/src/memory_x86_64/lib.rs.html
    index 0b94115dff..00bf9acaef 100644
    --- a/doc/src/memory_x86_64/lib.rs.html
    +++ b/doc/src/memory_x86_64/lib.rs.html
    @@ -288,6 +288,11 @@
     288
     289
     290
    +291
    +292
    +293
    +294
    +295
     
    //! This crate implements the virtual memory subsystem interfaces for Theseus on x86_64.
     //!
     //! The `memory` crate uses this crate to obtain the multiboot2-provided memory layout
    @@ -399,12 +404,13 @@
             // | (3)  | .rodata           | start of read-only pages      |
             // | (4)  | .eh_frame         | part of read-only pages       |
             // | (5)  | .gcc_except_table | part/end of read-only pages   |
    -        // | (6)  | .tdata            | part/end of read-only pages   |
    -        // | (7)  | .tbss             | part/end of read-only pages   |
    -        // | (8)  | .data             | start of read-write pages     | 
    -        // | (9)  | .bss              | end of read-write pages       |
    -        // | (10) | .page_table       | separate .data-like section   |
    -        // | (11) | .stack            | separate .data-like section   |
    +        // | (6)  | .cls              | part/end of read-only pages   |
    +        // | (7)  | .tdata            | part/end of read-only pages   |
    +        // | (8)  | .tbss             | part/end of read-only pages   |
    +        // | (9)  | .data             | start of read-write pages     | 
    +        // | (10) | .bss              | end of read-write pages       |
    +        // | (11) | .page_table       | separate .data-like section   |
    +        // | (12) | .stack            | separate .data-like section   |
             // |------|-------------------|-------------------------------|
             //
             // Note that we combine the TLS data sections (.tdata and .tbss) into the read-only pages,
    @@ -438,8 +444,12 @@
                     rodata_flags = Some(flags);
                     "nano_core .gcc_except_table"
                 }
    -            // The following four sections are optional: .tdata, .tbss, .data, .bss.
    -            ".tdata" => {
    +            // The following five sections are optional: .cls, .tdata, .tbss, .data, .bss.
    +            ".cls" => {
    +                rodata_end = Some((end_virt_addr, end_phys_addr));
    +                "nano_core .cls"
    +            }
    +            ".tdata" => {
                     rodata_end = Some((end_virt_addr, end_phys_addr));
                     "nano_core .tdata"
                 }
    diff --git a/doc/src/mod_mgmt/lib.rs.html b/doc/src/mod_mgmt/lib.rs.html
    index bb0ba6c7aa..7dcbb1cb7f 100644
    --- a/doc/src/mod_mgmt/lib.rs.html
    +++ b/doc/src/mod_mgmt/lib.rs.html
    @@ -3078,6 +3078,150 @@
     3078
     3079
     3080
    +3081
    +3082
    +3083
    +3084
    +3085
    +3086
    +3087
    +3088
    +3089
    +3090
    +3091
    +3092
    +3093
    +3094
    +3095
    +3096
    +3097
    +3098
    +3099
    +3100
    +3101
    +3102
    +3103
    +3104
    +3105
    +3106
    +3107
    +3108
    +3109
    +3110
    +3111
    +3112
    +3113
    +3114
    +3115
    +3116
    +3117
    +3118
    +3119
    +3120
    +3121
    +3122
    +3123
    +3124
    +3125
    +3126
    +3127
    +3128
    +3129
    +3130
    +3131
    +3132
    +3133
    +3134
    +3135
    +3136
    +3137
    +3138
    +3139
    +3140
    +3141
    +3142
    +3143
    +3144
    +3145
    +3146
    +3147
    +3148
    +3149
    +3150
    +3151
    +3152
    +3153
    +3154
    +3155
    +3156
    +3157
    +3158
    +3159
    +3160
    +3161
    +3162
    +3163
    +3164
    +3165
    +3166
    +3167
    +3168
    +3169
    +3170
    +3171
    +3172
    +3173
    +3174
    +3175
    +3176
    +3177
    +3178
    +3179
    +3180
    +3181
    +3182
    +3183
    +3184
    +3185
    +3186
    +3187
    +3188
    +3189
    +3190
    +3191
    +3192
    +3193
    +3194
    +3195
    +3196
    +3197
    +3198
    +3199
    +3200
    +3201
    +3202
    +3203
    +3204
    +3205
    +3206
    +3207
    +3208
    +3209
    +3210
    +3211
    +3212
    +3213
    +3214
    +3215
    +3216
    +3217
    +3218
    +3219
    +3220
    +3221
    +3222
    +3223
    +3224
     
    #![allow(clippy::blocks_in_if_conditions)]
     #![no_std]
     #![feature(int_roundings)]
    @@ -3104,8 +3248,9 @@
     use path::Path;
     use memfs::MemFile;
     use hashbrown::HashMap;
    +use crate_metadata_serde::{CLS_SECTION_FLAG, CLS_SYMBOL_TYPE};
     
    -pub use tls_initializer::{TlsInitializer, TlsDataImage};
    +pub use local_storage_initializer::{TlsInitializer, TlsDataImage};
     pub use crate_name_utils::*;
     pub use crate_metadata::*;
     
    @@ -3150,8 +3295,7 @@
     ///
     /// Thus, we stick with a singleton `TlsInitializer` instance, which makes sense 
     /// because it behaves much like an allocator, in that it reserves space (index ranges) in the TLS area.
    -static TLS_INITIALIZER: Mutex<TlsInitializer> = Mutex::new(TlsInitializer::empty());
    -
    +static TLS_INITIALIZER: Mutex<TlsInitializer> = Mutex::new(TlsInitializer::new());
     
     /// Create a new application `CrateNamespace` that uses the default application directory 
     /// and is structured atop the given `recursive_namespace`. 
    @@ -4187,6 +4331,7 @@
                 data_pages:              data_pages.clone(),
                 global_sections:         BTreeSet::new(),
                 tls_sections:            BTreeSet::new(),
    +            cls_sections:            BTreeSet::new(),
                 data_sections:           BTreeSet::new(),
                 reexported_symbols:      BTreeSet::new(),
             });
    @@ -4202,6 +4347,7 @@
                 loaded_sections,
                 global_sections,
                 tls_sections,
    +            cls_sections,
                 data_sections,
              } = load_sections_fn(
                 self,
    @@ -4219,9 +4365,13 @@
                 new_crate_mut.sections        = loaded_sections;
                 new_crate_mut.global_sections = global_sections;
                 new_crate_mut.tls_sections    = tls_sections;
    +            new_crate_mut.cls_sections    = cls_sections;
                 new_crate_mut.data_sections   = data_sections;
             }
     
    +        // TODO: Should be reload().
    +        cls_allocator::reload_current_cpu();
    +
             Ok((new_crate, elf_file))
         }
     
    @@ -4250,7 +4400,7 @@
             let mut read_write_pages_locked = data_pages  .as_ref().map(|(dp, dp_range)| (dp.clone(), dp.lock(), dp_range.start));
     
             // The section header offset of the first read-only section, which is, in order of existence:
    -        // .rodata, .eh_frame, .gcc_except_table, .tdata
    +        // .rodata, .eh_frame, .gcc_except_table, .tdata, .cls
             let mut read_only_offset: Option<usize> = None;
             // The section header offset of the first read-write section, which is .data or .bss
             let mut read_write_offset:   Option<usize> = None;
    @@ -4268,11 +4418,13 @@
             let mut bss_shndx_and_offset:    Option<(Shndx, usize)>            = None;
             let mut tdata_shndx_and_section: Option<(Shndx, StrongSectionRef)> = None;
             let mut tbss_shndx_and_section:  Option<(Shndx, StrongSectionRef)> = None;
    +        let mut cls_shndx_and_section:   Option<(Shndx, StrongSectionRef)> = None;
     
             // The set of `LoadedSections` that will be parsed and populated into this `new_crate`.
             let mut loaded_sections: HashMap<usize, StrongSectionRef> = HashMap::new();
             let mut data_sections:   BTreeSet<usize> = BTreeSet::new();
             let mut tls_sections:    BTreeSet<usize> = BTreeSet::new();
    +        let mut cls_sections:    BTreeSet<usize> = BTreeSet::new();
             let mut last_shndx = 0;
     
             // Iterate over all "allocated" sections to copy their data from the object file into the above `MappedPages`s.
    @@ -4289,9 +4441,10 @@
                 // get the relevant section info, i.e., size, alignment, and data contents
                 let sec_size   = sec.size()   as usize;
                 let sec_offset = sec.offset() as usize;
    -            let is_write   = sec_flags & SHF_WRITE     == SHF_WRITE;
    -            let is_exec    = sec_flags & SHF_EXECINSTR == SHF_EXECINSTR;
    -            let is_tls     = sec_flags & SHF_TLS       == SHF_TLS;
    +            let is_write   = sec_flags & SHF_WRITE        == SHF_WRITE;
    +            let is_exec    = sec_flags & SHF_EXECINSTR    == SHF_EXECINSTR;
    +            let is_tls     = sec_flags & SHF_TLS          == SHF_TLS;
    +            let is_cls     = sec_flags & CLS_SECTION_FLAG == CLS_SECTION_FLAG;
     
                 let mut is_rodata = false;
                 let mut is_eh_frame = false;
    @@ -4314,8 +4467,8 @@
                         .ok_or("BUG: ELF file contained a .text section, but no text_pages were allocated")?;
                 }
     
    -            // Otherwise, if writable (excluding TLS), copy the .data/.bss section into `data_pages`.
    -            else if is_write && !is_tls {
    +            // Otherwise, if writable (excluding TLS and CLS), copy the .data/.bss section into `data_pages`.
    +            else if is_write && !is_tls && !is_cls {
                     match sec.get_type() {
                         Ok(ShType::ProgBits) => {
                             typ = SectionType::Data;
    @@ -4365,9 +4518,28 @@
                     (mapped_pages_ref, mapped_pages) = read_only_pages_locked.as_mut()
                         .map(|(rp_ref, rp, _)| (rp_ref, rp))
                         .ok_or("BUG: ELF file contained a .tdata/.tbss section, but no rodata_pages were allocated")?;
    -                // Use a placeholder vaddr; it will be replaced in `add_new_dynamic_tls_section()` below.
    +                // Use a placeholder vaddr; it will be replaced in `add_new_dynamic_section()` below.
                     virt_addr = VirtualAddress::zero();
                     tls_sections.insert(shndx);
    +            } else if is_cls {
    +                match sec.get_type() {
    +                    Ok(ShType::ProgBits) => {
    +                        typ = SectionType::Cls;
    +                        let read_only_start = read_only_offset.get_or_insert(sec_offset);
    +                        mapped_pages_offset = sec_offset - *read_only_start;
    +
    +                        (mapped_pages_ref, mapped_pages) = read_only_pages_locked.as_mut()
    +                            .map(|(rp_ref, rp, _)| (rp_ref, rp))
    +                            .ok_or("BUG: ELF file contained a .cls section, but no rodata_pages were allocated")?;
    +                        // Use a placeholder vaddr; it will be replaced in `add_new_dynamic_section()` below.
    +                        virt_addr = VirtualAddress::zero();
    +                        cls_sections.insert(shndx);
    +                    }
    +                    ty => {
    +                        error!("CLS section had incorrect type: {ty:?}");
    +                        return Err("CLS section had incorrect type");
    +                    },
    +                }
                 }
     
                 // Otherwise, if .rodata, .eh_frame, or .gcc_except_table, copy its data into `rodata_pages`.
    @@ -4445,7 +4617,7 @@
                     // This will also update the section's virtual address field to hold that offset value,
                     // which is used for relocation entries that ask for a section's offset from the TLS base.
                     let (_tls_offset, new_tls_section) = self.tls_initializer.lock()
    -                    .add_new_dynamic_tls_section(new_section, sec.align() as usize)
    +                    .add_new_dynamic_section(new_section, sec.align() as usize)
                         .map_err(|_| "Failed to add new dynamic TLS section")?;
     
                     // trace!("Updated new TLS section to have offset {:#X}: {:?}", _tls_offset, new_tls_section);
    @@ -4455,6 +4627,11 @@
                         tbss_shndx_and_section = Some((shndx, Arc::clone(&new_tls_section)));
                     }
                     new_tls_section
    +            } else if is_cls {
    +                let (_, new_cls_section) = cls_allocator::add_dynamic_section(new_section, sec.align() as usize)
    +                    .map_err(|_| "Failed to add new dynamic CLS section")?;
    +                cls_shndx_and_section = Some((shndx, Arc::clone(&new_cls_section)));
    +                new_cls_section
                 } else {
                     Arc::new(new_section)
                 };
    @@ -4496,6 +4673,7 @@
                 })?;
                 let is_global = sec_binding == Binding::Global;
                 let is_tls = sec_type == Type::Tls;
    +            let is_cls = sec_type == Type::OsSpecific(CLS_SYMBOL_TYPE);
                 let demangled = demangle(sec_name).to_string().as_str().into();
     
                 // Declare the items we need to create a new `LoadedSection`.
    @@ -4591,6 +4769,23 @@
                     mapped_pages = rp_ref;
                 }
     
    +            else if is_cls {
    +                let sym_shndx = symbol_entry.shndx() as Shndx;
    +                let rp_ref = read_only_pages_locked.as_ref()
    +                    .map(|(mp_arc, ..)| mp_arc)
    +                    .ok_or("BUG: found CLS symbol but no rodata_pages were allocated")?;
    +
    +                if let Some((cls_shndx, ref cls_sec)) = cls_shndx_and_section && sym_shndx == cls_shndx {
    +                    typ = SectionType::Cls;
    +                    mapped_pages_offset = cls_sec.mapped_pages_offset + sec_value;
    +                    virt_addr = cls_sec.virt_addr + sec_value;
    +                } else {
    +                    error!("BUG: found CLS symbol with an shndx that wasn't in .cls: {}", symbol_entry as &dyn Entry);
    +                    return Err("BUG: found CLS symbol with an shndx that wasn't in .cls");
    +                };
    +                mapped_pages = rp_ref;
    +            }
    +
                 else {
                     error!("Found unexpected symbol type: {}", symbol_entry as &dyn Entry);
                     return Err("Found unexpected symbol type");
    @@ -4618,7 +4813,6 @@
                 last_shndx += 1;
             } // end of iterating over all symbol table entries
     
    -
             // // Quick test to ensure that all .data and .bss sections are fully covered 
             // // by overlapping OBJECT symbols.
             // if !data_sections.is_empty() {
    @@ -4661,6 +4855,7 @@
                 loaded_sections,
                 global_sections,
                 tls_sections,
    +            cls_sections,
                 data_sections,
             })
         }
    @@ -4737,6 +4932,7 @@
             const RODATA_PREFIX:           &str = ".rodata.";
             const DATA_PREFIX:             &str = ".data.";
             const BSS_PREFIX:              &str = ".bss.";
    +        const CLS_PREFIX:              &str = ".cls.";
             const TLS_DATA_PREFIX:         &str = ".tdata.";
             const TLS_BSS_PREFIX:          &str = ".tbss.";
             // const RELRO_PREFIX:            &str = "rel.ro.";
    @@ -4783,11 +4979,11 @@
             let mut data_sections: BTreeSet<Shndx> = BTreeSet::new();
             // the set of Shndxes for TLS sections (.tdata, .tbss)
             let mut tls_sections: BTreeSet<Shndx> = BTreeSet::new();
    +        // the set of Shndxes for CLS sections (.cls)
    +        let mut cls_sections: BTreeSet<Shndx> = BTreeSet::new();
     
             let mut read_only_pages_locked  = rodata_pages.as_ref().map(|(rp, _)| (rp.clone(), rp.lock()));
             let mut read_write_pages_locked = data_pages  .as_ref().map(|(dp, _)| (dp.clone(), dp.lock()));
    -
    -
             // In this loop, we handle only "allocated" sections that occupy memory in the actual loaded object file.
             // This includes .text, .rodata, .data, .bss, .gcc_except_table, .eh_frame, and potentially others.
             for (shndx, sec) in elf_file.section_iter().enumerate() {
    @@ -4837,9 +5033,10 @@
                 // get the relevant section info, i.e., size, alignment, and data contents
                 let sec_size  = sec.size()  as usize;
                 let sec_align = sec.align() as usize;
    -            let is_write  = sec_flags & SHF_WRITE     == SHF_WRITE;
    -            let is_exec   = sec_flags & SHF_EXECINSTR == SHF_EXECINSTR;
    -            let is_tls    = sec_flags & SHF_TLS       == SHF_TLS;
    +            let is_write  = sec_flags & SHF_WRITE        == SHF_WRITE;
    +            let is_exec   = sec_flags & SHF_EXECINSTR    == SHF_EXECINSTR;
    +            let is_tls    = sec_flags & SHF_TLS          == SHF_TLS;
    +            let is_cls    = sec_flags & CLS_SECTION_FLAG == CLS_SECTION_FLAG;
     
     
                 // First, check for executable sections, which can only be .text sections.
    @@ -4923,7 +5120,7 @@
                             demangled,
                             Arc::clone(rp_ref),
                             mapped_pages_offset,
    -                        VirtualAddress::zero(), // will be replaced in `add_new_dynamic_tls_section()` below
    +                        VirtualAddress::zero(), // will be replaced in `add_new_dynamic_section()` below
                             sec_size,
                             global_sections.contains(&shndx),
                             new_crate.clone(),
    @@ -4935,7 +5132,7 @@
                         // This will also update the section's virtual address field to hold that offset value,
                         // which is used for relocation entries that ask for a section's offset from the TLS base.
                         let (_tls_offset, new_tls_section) = self.tls_initializer.lock()
    -                        .add_new_dynamic_tls_section(new_tls_section, sec_align)
    +                        .add_new_dynamic_section(new_tls_section, sec_align)
                             .map_err(|_| "Failed to add new TLS section")?;
     
                         // trace!("\t --> updated new TLS section: {:?}", new_tls_section);
    @@ -4949,6 +5146,52 @@
                     }
                 }
     
    +            else if is_cls {
    +                if sec.get_type() != Ok(ShType::ProgBits) {
    +                    return Err("CLS section had wrong type");
    +                }
    +
    +                let name = try_get_symbol_name_after_prefix!(sec_name, CLS_PREFIX);
    +                let demangled = demangle(name).to_string().as_str().into();
    +
    +                if let Some((ref rp_ref, ref mut rp)) = read_only_pages_locked {
    +                    let (mapped_pages_offset, sec_typ) = {
    +                        // Here: copy the TLS .tdata section's contents to the proper address in the read-only pages.
    +                        let dest_slice: &mut [u8] = rp.as_slice_mut(rodata_offset, sec_size)?;
    +                        match sec.get_data(elf_file) {
    +                            Ok(SectionData::Undefined(sec_data)) => dest_slice.copy_from_slice(sec_data),
    +                            _other => {
    +                                error!("load_crate_sections(): Couldn't get section data for CLS .cls section [{}] {}: {:?}", shndx, sec_name, _other);
    +                                return Err("couldn't get section data in CLS .cls section");
    +                            }
    +                        };
    +                        // As with all other normal sections, use the current offset for these read-only pages.
    +                        (rodata_offset, SectionType::Cls)
    +                    };
    +
    +                    let new_cls_section = LoadedSection::new(
    +                        sec_typ,
    +                        demangled,
    +                        Arc::clone(rp_ref),
    +                        mapped_pages_offset,
    +                        VirtualAddress::zero(), // will be replaced in `add_dynamic_section()` below
    +                        sec_size,
    +                        global_sections.contains(&shndx),
    +                        new_crate.clone(),
    +                    );
    +                    let (_, new_cls_section) = cls_allocator::add_dynamic_section(new_cls_section, sec_align)
    +                        .map_err(|_| "Failed to add new CLS section")?;
    +
    +                    loaded_sections.insert(shndx, new_cls_section);
    +                    cls_sections.insert(shndx);
    +
    +                    rodata_offset += sec_size.next_multiple_of(sec_align);
    +                }
    +                else {
    +                    return Err("no rodata_pages were allocated when handling TLS section");
    +                }
    +            }
    +
                 // Third, if not executable nor TLS, handle writable .data/.bss sections.
                 else if is_write {
                     // check if this section is .bss or .data
    @@ -5143,6 +5386,7 @@
                 loaded_sections,
                 global_sections,
                 tls_sections,
    +            cls_sections,
                 data_sections,
             })
         }
    @@ -5253,6 +5497,43 @@
                                     } else {
                                         source_sec_name
                                     };
    +
    +                                // See `cls_macros` for more details.
    +                                if source_sec_name == "__THESEUS_CLS_SIZE" {
    +                                    #[cfg(target_arch = "aarch64")]
    +                                    {
    +                                        return Err("encountered `__THESEUS_CLS_SIZE` relocation on AArch64");
    +                                    }
    +                                    #[cfg(target_arch = "x86_64")]
    +                                    {
    +                                        let cls_size = VirtualAddress::new(usize::MAX).unwrap();
    +                                        let relocation_entry = RelocationEntry::from_elf_relocation(rela_entry);
    +                                        write_relocation(
    +                                            relocation_entry,
    +                                            target_sec_slice,
    +                                            target_sec.mapped_pages_offset,
    +                                            cls_size,
    +                                            verbose_log,
    +                                        )?;
    +                                        continue;
    +                                    }
    +                                } else if source_sec_name == "__THESEUS_TLS_SIZE" {
    +                                    #[cfg(target_arch = "x86_64")]
    +                                    let tls_size = VirtualAddress::new(usize::MAX).unwrap();
    +                                    #[cfg(target_arch = "aarch64")]
    +                                    let tls_size = VirtualAddress::zero();
    +
    +                                    let relocation_entry = RelocationEntry::from_elf_relocation(rela_entry);
    +                                    write_relocation(
    +                                        relocation_entry,
    +                                        target_sec_slice,
    +                                        target_sec.mapped_pages_offset,
    +                                        tls_size,
    +                                        verbose_log,
    +                                    )?;
    +                                    continue;
    +                                }
    +                                
                                     let demangled = demangle(source_sec_name).to_string();
     
                                     // search for the symbol's demangled name in the kernel's symbol map
    @@ -5940,6 +6221,7 @@
         loaded_sections: HashMap<usize, Arc<LoadedSection>>,
         global_sections: BTreeSet<usize>,
         tls_sections:    BTreeSet<usize>,
    +    cls_sections:    BTreeSet<usize>,
         data_sections:   BTreeSet<usize>,
     }
     
    @@ -6026,9 +6308,10 @@
                 let addend = size.next_multiple_of(align);
     
                 // filter flags for ones we care about (we already checked that it's loaded (SHF_ALLOC))
    -            let is_write = sec_flags & SHF_WRITE     == SHF_WRITE;
    -            let is_exec  = sec_flags & SHF_EXECINSTR == SHF_EXECINSTR;
    -            let is_tls   = sec_flags & SHF_TLS       == SHF_TLS;
    +            let is_write = sec_flags & SHF_WRITE        == SHF_WRITE;
    +            let is_exec  = sec_flags & SHF_EXECINSTR    == SHF_EXECINSTR;
    +            let is_tls   = sec_flags & SHF_TLS          == SHF_TLS;
    +            let is_cls   = sec_flags & CLS_SECTION_FLAG == CLS_SECTION_FLAG;
                 // trace!("  Looking at sec {:?}, size {:#X}, align {:#X} --> addend {:#X}", sec.get_name(elf_file), size, align, addend);
                 if is_exec {
                     // this includes only .text sections
    @@ -6041,8 +6324,13 @@
                         ro_bytes += addend;
                     }
                     // Ignore .tbss sections, which have type `NoBits`.
    -            }
    -            else if is_write {
    +            } else if is_cls {
    +                if sec.get_type() == Ok(ShType::ProgBits) {
    +                    ro_bytes += addend;
    +                } else {
    +                    return Err("CLS section had unexpected type");
    +                }
    +            } else if is_write {
                     // this includes both .bss and .data sections
                     rw_bytes += addend;
                 }
    diff --git a/doc/src/mod_mgmt/parse_nano_core.rs.html b/doc/src/mod_mgmt/parse_nano_core.rs.html
    index 4498905d86..e5dd416461 100644
    --- a/doc/src/mod_mgmt/parse_nano_core.rs.html
    +++ b/doc/src/mod_mgmt/parse_nano_core.rs.html
    @@ -876,6 +876,69 @@
     876
     877
     878
    +879
    +880
    +881
    +882
    +883
    +884
    +885
    +886
    +887
    +888
    +889
    +890
    +891
    +892
    +893
    +894
    +895
    +896
    +897
    +898
    +899
    +900
    +901
    +902
    +903
    +904
    +905
    +906
    +907
    +908
    +909
    +910
    +911
    +912
    +913
    +914
    +915
    +916
    +917
    +918
    +919
    +920
    +921
    +922
    +923
    +924
    +925
    +926
    +927
    +928
    +929
    +930
    +931
    +932
    +933
    +934
    +935
    +936
    +937
    +938
    +939
    +940
    +941
     
    //! Routines for parsing the `nano_core`, the fully-linked, already-loaded base kernel image,
     //! in other words, the code that is currently executing.
     //! As such, it performs no loading, but rather just creates metadata that represents
    @@ -884,7 +947,7 @@
     #![allow(clippy::type_complexity)]
     
     use alloc::{collections::{BTreeMap, BTreeSet}, string::{String, ToString}, sync::Arc};
    -use crate::{CrateNamespace, mp_range};
    +use crate::{CrateNamespace, mp_range, CLS_SECTION_FLAG};
     use fs_node::FileRef;
     use path::Path;
     use rustc_demangle::demangle;
    @@ -1066,6 +1129,7 @@
             data_pages:          Some((data_pages.clone(),   mp_range(data_pages))),
             global_sections:     BTreeSet::new(),
             tls_sections:        BTreeSet::new(),
    +        cls_sections:        BTreeSet::new(),
             data_sections:       BTreeSet::new(),
             reexported_symbols:  BTreeSet::new(),
         });
    @@ -1130,7 +1194,9 @@
         let mut bss_shndx:      Option<Shndx> = None;
         let mut tls_data_info:  Option<(Shndx, VirtualAddress)> = None;
         let mut tls_bss_info:   Option<(Shndx, VirtualAddress)> = None;
    +    let mut cls_info:       Option<(Shndx, VirtualAddress)> = None;
         let mut total_tls_size: usize = 0;
    +    let mut total_cls_size: usize = 0;
     
         /// An internal function that parses a section header's index (e.g., "[7]") out of the given str.
         /// Returns a tuple of the parsed `Shndx` and the rest of the unparsed str after the shndx.
    @@ -1204,6 +1270,15 @@
                         })
                     );
             }
    +        else if line.contains(".cls") && line.contains("PROGBITS") {
    +            cls_info = parse_section_ndx(line)
    +                .and_then(|(shndx, rest_of_line)| parse_section_vaddr_size(rest_of_line)
    +                    .map(|(vaddr, size)| {
    +                        total_cls_size += size;
    +                        (shndx, vaddr)
    +                    })
    +                );
    +        }
             else if line.contains(".data ") && line.contains("PROGBITS") {
                 data_shndx = parse_section_ndx(line).map(|(shndx, _)| shndx);
             }
    @@ -1259,8 +1334,15 @@
         let data_shndx    = data_shndx  .ok_or("parse_nano_core_symbol_file(): couldn't find .data section index")?;
         let bss_shndx     = bss_shndx   .ok_or("parse_nano_core_symbol_file(): couldn't find .bss section index")?;
         let main_sec_info = MainSectionInfo {
    -        text_shndx, rodata_shndx, data_shndx, bss_shndx,
    -        tls_data_info, tls_bss_info, total_tls_size,
    +        text_shndx,
    +        rodata_shndx,
    +        data_shndx,
    +        bss_shndx,
    +        tls_data_info,
    +        tls_bss_info,
    +        cls_info,
    +        total_tls_size,
    +        total_cls_size,
         };
     
         // second, skip ahead to the start of the symbol table: a line which contains ".symtab" but does NOT contain "SYMTAB"
    @@ -1283,6 +1365,8 @@
             // third, parse each symbol table entry
             for (_line_num, line) in file_iterator {
                 if line.is_empty() { continue; }
    +            // CLS symbols have an OS specific symbol type which messes with the parser.
    +            let line = line.replace("<OS specific>: ", "");
                 
                 // we need the following items from a symbol table entry:
                 // * Value (address),      column 1
    @@ -1401,7 +1485,9 @@
         let mut bss_shndx:      Option<Shndx> = None;
         let mut tls_data_info:  Option<(Shndx, VirtualAddress)> = None;
         let mut tls_bss_info:   Option<(Shndx, VirtualAddress)> = None;
    +    let mut cls_info:       Option<(Shndx, VirtualAddress)> = None;
         let mut total_tls_size: usize = 0;
    +    let mut total_cls_size: usize = 0;
     
         // We will fill in these crate items while parsing the symbol file.
         let mut crate_items = ParsedCrateItems::empty();
    @@ -1454,8 +1540,17 @@
                     }
                     let sec_vaddr = VirtualAddress::new(sec.address() as usize)
                         .ok_or("the nano_core .tbss section had an invalid virtual address")?;
    -                    tls_bss_info = Some((shndx, sec_vaddr));
    -                    total_tls_size += sec_size;
    +                tls_bss_info = Some((shndx, sec_vaddr));
    +                total_tls_size += sec_size;
    +            }
    +            Ok(".cls") => {
    +                if sec.flags() & (SHF_ALLOC | SHF_WRITE | SHF_EXECINSTR | CLS_SECTION_FLAG) != (SHF_ALLOC | SHF_WRITE | CLS_SECTION_FLAG) {
    +                    return Err(".cls section had wrong flags!");
    +                }
    +                let sec_vaddr = VirtualAddress::new(sec.address() as usize)
    +                    .ok_or("the nano_core .cls section had an invalid virtual address")?;
    +                cls_info = Some((shndx, sec_vaddr));
    +                total_cls_size += sec_size;
                 }
                 Ok(".gcc_except_table") => {
                     let sec_vaddr = VirtualAddress::new(sec.address() as usize)
    @@ -1510,8 +1605,15 @@
         let data_shndx    = data_shndx.ok_or("couldn't find .data section in nano_core ELF")?;
         let bss_shndx     = bss_shndx.ok_or("couldn't find .bss section in nano_core ELF")?;
         let main_sec_info = MainSectionInfo {
    -        text_shndx, rodata_shndx, data_shndx, bss_shndx,
    -        tls_data_info, tls_bss_info, total_tls_size,
    +        text_shndx,
    +        rodata_shndx,
    +        data_shndx,
    +        bss_shndx,
    +        tls_data_info,
    +        tls_bss_info,
    +        cls_info,
    +        total_tls_size,
    +        total_cls_size,
         };
         
         {
    @@ -1590,8 +1692,10 @@
         data_shndx:      Shndx,
         bss_shndx:       Shndx,
         tls_data_info:   Option<(Shndx, VirtualAddress)>,
    +    cls_info:        Option<(Shndx, VirtualAddress)>,
         tls_bss_info:    Option<(Shndx, VirtualAddress)>,
         total_tls_size:  usize,
    +    total_cls_size:  usize,
     }
     
     /// A convenience function that separates out the logic 
    @@ -1697,7 +1801,7 @@
                 new_crate_weak_ref.clone(),
             );
             // Add this new TLS section to this namespace's TLS area image.
    -        let tls_section_ref = namespace.tls_initializer.lock().add_existing_static_tls_section(
    +        let tls_section_ref = namespace.tls_initializer.lock().add_existing_static_section(
                 tls_section,
                 tls_offset,
                 main_section_info.total_tls_size,
    @@ -1728,14 +1832,36 @@
                 new_crate_weak_ref.clone(),
             );
             // Add this new TLS section to this namespace's TLS area image.
    -        let tls_section_ref = namespace.tls_initializer.lock().add_existing_static_tls_section(
    +        let tls_section_ref = namespace.tls_initializer.lock().add_existing_static_section(
                 tls_section,
                 tls_offset,
                 main_section_info.total_tls_size,
             ).map_err(|_| "BUG: failed to add static TLS section to the TLS area initializer")?;
             Some(tls_section_ref)
         }
    -    else {
    +    else if main_section_info.cls_info.map_or(false, |(shndx, _)| sec_ndx == shndx) {
    +        let cls_offset = sec_vaddr;
    +        let cls_sec_data_vaddr = main_section_info.cls_info.unwrap().1 + cls_offset; 
    +
    +        let cls_section = LoadedSection::new(
    +            SectionType::Cls,
    +            sec_name,
    +            Arc::clone(rodata_pages),
    +            // CLS sections are lumped into the ".rodata" MappedPages with the read-only data sections.
    +            rodata_pages_locked.offset_of_address(cls_sec_data_vaddr).ok_or("nano_core CLS .cls section wasn't covered by the .rodata mapped pages!")?,
    +            VirtualAddress::new(cls_offset).ok_or("new TLS .cls section had invalid virtual address (CLS offset)")?,
    +            sec_size,
    +            global,
    +            new_crate_weak_ref.clone(),
    +        );
    +        // Add this new CLS section to this namespace's CLS area image.
    +        let cls_section_ref = cls_allocator::add_static_section(
    +            cls_section,
    +            cls_offset,
    +            main_section_info.total_cls_size,
    +        ).map_err(|_| "BUG: failed to add static CLS section to the CLS area")?;
    +        Some(cls_section_ref)
    +    } else {
             crate_items.init_symbols.insert(String::from(sec_name.as_str()), sec_vaddr);
             None
         };
    diff --git a/doc/src/mod_mgmt/serde.rs.html b/doc/src/mod_mgmt/serde.rs.html
    index e3fc486868..13bd948024 100644
    --- a/doc/src/mod_mgmt/serde.rs.html
    +++ b/doc/src/mod_mgmt/serde.rs.html
    @@ -135,6 +135,21 @@
     135
     136
     137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
     
    //! Routines for converting serializable crate metadata types
     //! into the actual runtime `LoadedCrate` and `LoadedSection` types.
     //! 
    @@ -161,6 +176,13 @@
             .filter_map(|shndx| serialized_crate.sections.get(shndx))
             .map(|tls_sec| tls_sec.size)
             .sum();
    +
    +    let total_cls_size: usize = serialized_crate.cls_sections
    +        .iter()
    +        .filter_map(|shndx| serialized_crate.sections.get(shndx))
    +        .map(|cls_sec| cls_sec.size)
    +        .sum();
    +
         
         // The sections need a weak reference back to the loaded_crate, and so we first create
         // the loaded_crate so we have something to reference when loading the sections.
    @@ -174,6 +196,7 @@
             data_pages:          Some((Arc::clone(data_pages), mp_range(data_pages))),
             global_sections:     serialized_crate.global_sections,
             tls_sections:        serialized_crate.tls_sections,
    +        cls_sections:        serialized_crate.cls_sections,
             data_sections:       serialized_crate.data_sections,
             reexported_symbols:  BTreeSet::new(),
         });
    @@ -195,6 +218,7 @@
                     rodata_pages,
                     data_pages,
                     total_tls_size,
    +                total_cls_size,
                 )?,
             );
         }
    @@ -223,6 +247,7 @@
     
     
     /// Convert the given [`SerializedSection`] into a [`LoadedSection`].
    +#[allow(clippy::too_many_arguments)]
     fn into_loaded_section(
         serialized_section: SerializedSection,
         parent_crate:       WeakCrateRef,
    @@ -231,12 +256,14 @@
         rodata_pages:       &Arc<Mutex<MappedPages>>,
         data_pages:         &Arc<Mutex<MappedPages>>,
         total_tls_size:     usize,
    +    total_cls_size:     usize,
     ) -> Result<Arc<LoadedSection>, &'static str> {
         let mapped_pages = match serialized_section.ty {
             SectionType::Text => Arc::clone(text_pages),
             SectionType::Rodata
             | SectionType::TlsData
             | SectionType::TlsBss
    +        | SectionType::Cls
             | SectionType::GccExceptTable
             | SectionType::EhFrame => Arc::clone(rodata_pages),
             SectionType::Data
    @@ -261,13 +288,16 @@
         );
     
         if serialized_section.ty.is_tls() {
    -        namespace.tls_initializer.lock().add_existing_static_tls_section(
    +        namespace.tls_initializer.lock().add_existing_static_section(
                 loaded_section,
                 // TLS sections encode their TLS offset in the virtual address field,
                 // which is necessary to properly calculate relocation entries that depend upon them.
                 serialized_section.virtual_address,
                 total_tls_size,
             ).map_err(|_| "BUG: failed to add deserialized static TLS section to the TLS area")
    +        // On AArch64, the linker includes a _TLS_MODULE_BASE_ zero sized symbol that we don't want to add.
    +    } else if serialized_section.ty == SectionType::Cls && serialized_section.size > 0 {
    +        cls_allocator::add_static_section(loaded_section, serialized_section.virtual_address, total_cls_size).map_err(|e| panic!("{:?}", e))
         } else {
             Ok(Arc::new(loaded_section))
         }
    diff --git a/doc/src/per_cpu/lib.rs.html b/doc/src/per_cpu/lib.rs.html
    deleted file mode 100644
    index 0d287d1d53..0000000000
    --- a/doc/src/per_cpu/lib.rs.html
    +++ /dev/null
    @@ -1,277 +0,0 @@
    -lib.rs - source
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -
    //! Contains [`PerCpuData`], the data stored on a per-CPU basis in Theseus.
    -//!
    -//! Each CPU has its own instance of `PerCpuData`, and each CPU's instance
    -//! can only be accessed by itself.
    -//!
    -//! ## This `per_cpu` crate vs. the `cpu_local` crate
    -//! These two crates exist to solve a circular dependency problem:
    -//! the crate that defines the per-CPU data structure (this `per_cpu` crate)
    -//! must depend on all the foreign crates that define the types used for
    -//! each field in the per-CPU data structure.
    -//! However, those foreign crates also want to *access* these per-CPU states,
    -//! which would require depending on this `per_cpu` crate.
    -//! This would create a cyclic dependency, so we break it into two crates.
    -//!
    -//! 1. This crate `per_cpu` directly depends on many other kernel crates,
    -//!    specifically the ones that define the types needed for each field of [`PerCpuData`].
    -//!    * If you want to add another piece of per-CPU data, you can do that here
    -//!      by modifying the [`PerCpuData`] struct, and then updating the const definitions
    -//!      of offsets and other metadata in `cpu_local::FixedCpuLocal`.
    -//!    * To actually access per-CPU data, do not use this crate,
    -//!      use `cpu_local::CpuLocal` instead.
    -//!
    -//! 2. The `cpu_local` crate is the "top-level" crate that is depended upon
    -//!    by each of the crates that needs to access per-CPU data.
    -//!    * `cpu_local` is a mostly standalone crate that does not depend
    -//!      on any of the specific types from other Theseus crates,
    -//!      which allows other Theseus crates to depend upon it.
    -//!    * `cpu_local` effectively decouples the definitions
    -//!    * This `per_cpu` crate also depends on `cpu_local` in order to initialize itself
    -//!      for each CPU right after that CPU has booted.
    -//!
    -
    -#![no_std]
    -#![feature(const_refs_to_cell)]
    -
    -use core::ops::Deref;
    -use cpu::CpuId;
    -use cpu_local::PerCpuField;
    -use preemption::PreemptionGuard;
    -use task::TaskRef;
    -
    -/// The data stored on a per-CPU basis in Theseus.
    -///
    -/// Currently, we do not support additional arbitrary per-CPU states, e.g.,
    -/// dynamically adding or removing states, or defining per-CPU states
    -/// outside this struct.
    -///
    -/// This struct is not directly accessible; per-CPU states are accessible
    -/// by other crates using the functions in the [`cpu_local`] crate.
    -///
    -/// ## Required traits
    -/// Each field in this struct must implement [`cpu_local::PerCpuField`],
    -/// which in turn mandates that each field have a unique type distinct from the type
    -/// of every other field.
    -/// Currently we achieve this with newtype wrappers
    -#[allow(dead_code)] // These fields are accessed via `cpu_local` functions.
    -#[repr(C)]
    -//
    -// IMPORTANT NOTE:
    -// * These fields must be kept in sync with `cpu_local::PerCpuField`.
    -// * The same applies for the `const_assertions` module at the end of this file.
    -//
    -pub struct PerCpuData {
    -    /// A pointer to the start of this struct in memory, similar to a TLS self pointer.
    -    /// This has a different initial value for each CPU's data image, of course.
    -    ///
    -    /// We use this to allow writes to this entire structure (for initialization),
    -    /// and also to allow faster access to large fields herein, as they don't need to be
    -    /// loaded in full before accessing a single sub-field. See this for more:
    -    /// <https://github.com/rust-osdev/x86_64/pull/257#issuecomment-849514649>.
    -    self_ptr: usize,
    -    /// The unique ID of this CPU. This is immutable.
    -    cpu_id: CpuLocalCpuId,
    -    /// The current preemption count of this CPU, which is used to determine
    -    /// whether task switching can occur or not.
    -    preemption_count: u8,
    -    /// A preemption guard used during task switching to ensure that one task switch
    -    /// cannot interrupt (preempt) another task switch already in progress.
    -    task_switch_preemption_guard: Option<PreemptionGuard>,
    -    /// Data that should be dropped after switching away from a task that has exited.
    -    /// Currently, this contains the previous task's `TaskRef` that was removed
    -    /// from its TLS area during the last task switch away from it.
    -    drop_after_task_switch: Option<TaskRef>,
    -}
    -
    -impl PerCpuData {
    -    /// Defines the initial values of each per-CPU state.
    -    fn new(self_ptr: usize, cpu_id: cpu::CpuId) -> Self {
    -        Self {
    -            self_ptr,
    -            cpu_id: CpuLocalCpuId(cpu_id),
    -            preemption_count: 0,
    -            task_switch_preemption_guard: None,
    -            drop_after_task_switch: None,
    -        }
    -    }
    -}
    -
    -
    -/// An immutable type wrapper for this CPU's unique ID, kept in CPU-local storage.
    -///
    -/// Derefs into a [`CpuId`].
    -pub struct CpuLocalCpuId(CpuId);
    -impl Deref for CpuLocalCpuId {
    -    type Target = CpuId;
    -    fn deref(&self) -> &Self::Target {
    -        &self.0
    -    }
    -}
    -// SAFETY: The `CpuLocalCpuId` type corresponds to a field in `PerCpuData`
    -//         with the offset specified by `PerCpuField::CpuId`.
    -unsafe impl cpu_local::CpuLocalField for CpuLocalCpuId {
    -    const FIELD: PerCpuField = PerCpuField::CpuId;
    -}
    -
    -
    -/// Initializes the current CPU's `PerCpuData`.
    -///
    -/// This must be invoked from (run on) the actual CPU with the given `cpu_id`;
    -/// the main bootstrap CPU cannot run this for all CPUs itself.
    -pub fn init(cpu_id: cpu::CpuId) -> Result<(), &'static str> {
    -    cpu_local::init(
    -        cpu_id.value(),
    -        core::mem::size_of::<PerCpuData>(),
    -        |self_ptr| PerCpuData::new(self_ptr, cpu_id),
    -    )
    -}
    -
    -mod const_assertions {
    -    use memoffset::offset_of;
    -    use super::*;
    -
    -    const _: () = assert!(0 == offset_of!(PerCpuData, self_ptr));
    -    const _: () = assert!(PerCpuField::CpuId.offset() == offset_of!(PerCpuData, cpu_id));
    -    const _: () = assert!(PerCpuField::PreemptionCount.offset() == offset_of!(PerCpuData, preemption_count));
    -    const _: () = assert!(PerCpuField::TaskSwitchPreemptionGuard.offset() == offset_of!(PerCpuData, task_switch_preemption_guard));
    -    const _: () = assert!(PerCpuField::DropAfterTaskSwitch.offset() == offset_of!(PerCpuData, drop_after_task_switch));
    -} 
    -
    \ No newline at end of file diff --git a/doc/src/preemption/lib.rs.html b/doc/src/preemption/lib.rs.html index 1b2a38979c..a0a5c9faf7 100644 --- a/doc/src/preemption/lib.rs.html +++ b/doc/src/preemption/lib.rs.html @@ -147,6 +147,9 @@ 147 148 149 +150 +151 +152
    //! Manages preemption on a per-CPU basis.
     //!
     //! Supports enabling and disabling preemption for the purpose of 
    @@ -159,7 +162,7 @@
     
     /// A reference to the preemption counter for the current CPU (in CPU-local storage).
     // NOTE: This offset must be kept in sync with `cpu_local::PerCpuField`.
    -#[cls_macros::cpu_local(12, cls_dep = false)]
    +#[cls_macros::cpu_local(cls_dep = false)]
     static PREEMPTION_COUNT: u8 = 0;
     
     /// Prevents preemption (preemptive task switching) from occurring
    @@ -229,6 +232,7 @@
     /// to move it across a "thread" boundary (into a different task).
     /// More specifically, it is invalid to move a `PreemptionGuard` across
     /// CPUs; this error condition is checked for when dropping it.
    +#[derive(Debug)]
     pub struct PreemptionGuard {
         /// The ID of the CPU on which preemption was held.
         ///
    @@ -266,8 +270,10 @@
             assert!(
                 self.cpu_id == cpu_id,
                 "PreemptionGuard::drop(): BUG: CPU IDs did not match! \
    -            This indicates an unexpected task migration across CPUs."
    -        );
    +            Task unexpectedly migrated from CPU {} to CPU {}.",
    +            self.cpu_id,
    +            cpu_id,
    +        );
     
             let prev_val = PREEMPTION_COUNT.fetch_sub(1);
     
    diff --git a/doc/src/spawn/lib.rs.html b/doc/src/spawn/lib.rs.html
    index a57ea045f2..27a14da88b 100644
    --- a/doc/src/spawn/lib.rs.html
    +++ b/doc/src/spawn/lib.rs.html
    @@ -1126,10 +1126,10 @@
                 }
                 info!("Cleaned up all {} bootstrap tasks.", total_tasks);
                 *BOOTSTRAP_TASKS.lock() = Vec::new(); // replace the Vec to drop it
    -            // Now that all bootstrap tasks are finished executing and have been cleaned up,
    -            // we can safely deallocate the early TLS data image because it is guaranteed
    -            // to no longer be in use on any CPU.
    -            early_tls::drop();
    +            // SAFETY: Now that all bootstrap tasks are finished executing and have been cleaned up,
    +            // we can safely deallocate the early TLS data image because it is guaranteed to no
    +            // longer be in use on any CPU.
    +            unsafe { early_tls::drop() };
             },
             num_tasks,
         )
    diff --git a/doc/src/task/lib.rs.html b/doc/src/task/lib.rs.html
    index f2b157405d..d9ba1d1bbf 100644
    --- a/doc/src/task/lib.rs.html
    +++ b/doc/src/task/lib.rs.html
    @@ -1221,6 +1221,7 @@
     1221
     1222
     1223
    +1224
     
    //! Key types and functions for multitasking that build on the basic [`Task`].
     //!
     //! The main types of interest are:
    @@ -1498,7 +1499,8 @@
         /// Currently, this simply updates the current CPU's TLS base register
         /// to point to this task's TLS data image.
         fn set_as_current_task(&self) {
    -        self.0.task.tls_area().set_as_current_tls_base();
    +        // SAFETY: We don't drop the TLS area until the task is finished.
    +        unsafe { self.0.task.tls_area().set_as_current_tls() };
         }
     }
     
    @@ -1830,7 +1832,7 @@
             // If preemption was not previously enabled (before we disabled it above),
             // then we shouldn't perform a task switch here.
             if !preemption_guard.preemption_was_enabled() {
    -            // trace!("Note: preemption was disabled on CPU {}, skipping scheduler.", current_cpu());
    +            // trace!("Note: preemption was disabled on CPU {}, skipping scheduler.", cpu::current_cpu());
                 return false;
             }
     
    @@ -2192,7 +2194,7 @@
     /// and then retrieved from here right after the context switch ends.
     /// It is stored in a CPU-local variable because it's only related to
     /// a task switching operation on a particular CPU.
    -#[cls::cpu_local(16, stores_guard = PreemptionGuard)]
    +#[cls::cpu_local(stores_guard = PreemptionGuard)]
     static TASK_SWITCH_PREEMPTION_GUARD: Option<PreemptionGuard> = None;
     
     /// Data that should be dropped after switching away from a task that has exited.
    @@ -2200,7 +2202,7 @@
     /// Currently, this contains the previous Task's `TaskRef` removed from its TLS area;
     /// it is stored in a CPU-local variable because it's only related to
     /// a task switching operation on a particular CPU.
    -#[cls::cpu_local(24)]
    +#[cls::cpu_local]
     static DROP_AFTER_TASK_SWITCH: Option<TaskRef> = None;
     
     pub use tls_current_task::*;
    diff --git a/doc/stack_trace/struct.CrateNamespace.html b/doc/stack_trace/struct.CrateNamespace.html
    index b1c91fc541..2efb5d191d 100644
    --- a/doc/stack_trace/struct.CrateNamespace.html
    +++ b/doc/stack_trace/struct.CrateNamespace.html
    @@ -26,7 +26,7 @@ 
    Arguments

    pub fn dir(&self) -> &NamespaceDir

    Returns the directory that this CrateNamespace is based on.

    pub fn recursive_namespace(&self) -> Option<&Arc<CrateNamespace>>

    Returns the recursive namespace that this CrateNamespace is built atop, if one exists.

    -

    pub fn get_tls_initializer_data(&self) -> TlsDataImage

    Returns a new copy of this namespace’s initial TLS area, +

    pub fn get_tls_initializer_data(&self) -> LocalStorageDataImage<Tls>

    Returns a new copy of this namespace’s initial TLS area, which can be used as the initial TLS area data image for a new task.

    pub fn crate_names(&self, recursive: bool) -> Vec<StrRef, Global>

    Returns a list of all of the crate names currently loaded into this CrateNamespace, including all crates in any recursive namespaces as well if recursive is true. diff --git a/doc/task/enum.InitCurrentTaskError.html b/doc/task/enum.InitCurrentTaskError.html index da0ff41ea2..a55a6e625a 100644 --- a/doc/task/enum.InitCurrentTaskError.html +++ b/doc/task/enum.InitCurrentTaskError.html @@ -1,4 +1,4 @@ -InitCurrentTaskError in task - Rust

    pub enum InitCurrentTaskError {
    +InitCurrentTaskError in task - Rust
    pub enum InitCurrentTaskError {
         MismatchedTaskIds(usize, usize),
         NotInTasklist(usize),
         AlreadyInited(usize),
    @@ -9,7 +9,7 @@
     
    §

    AlreadyInited(usize)

    The current task was already initialized; its task ID is enclosed.

    §

    AlreadyBorrowed(usize)

    The current task reference was already borrowed, thus it could not be mutably borrowed again. The ID of the task attempting to be initialized is enclosed.

    -

    Trait Implementations§

    source§

    impl Debug for InitCurrentTaskError

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for InitCurrentTaskError

    source§

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

    Formats the value using the given formatter. Read more

    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.

    diff --git a/doc/task/fn.bootstrap_task.html b/doc/task/fn.bootstrap_task.html index 77d1bf5f15..f0dea665a5 100644 --- a/doc/task/fn.bootstrap_task.html +++ b/doc/task/fn.bootstrap_task.html @@ -1,4 +1,4 @@ -bootstrap_task in task - Rust

    Function task::bootstrap_task

    source ·
    pub fn bootstrap_task(
    +bootstrap_task in task - Rust

    Function task::bootstrap_task

    source ·
    pub fn bootstrap_task(
         cpu_id: CpuId,
         stack: NoDrop<Stack>,
         kernel_mmi_ref: MmiRef
    diff --git a/doc/task/fn.get_my_current_task.html b/doc/task/fn.get_my_current_task.html
    index 8e750096c1..1adf2b5441 100644
    --- a/doc/task/fn.get_my_current_task.html
    +++ b/doc/task/fn.get_my_current_task.html
    @@ -1,4 +1,4 @@
    -get_my_current_task in task - Rust

    Function task::get_my_current_task

    source ·
    pub fn get_my_current_task() -> Option<TaskRef>
    Expand description

    Returns a cloned reference to the current task.

    +get_my_current_task in task - Rust

    Function task::get_my_current_task

    source ·
    pub fn get_my_current_task() -> Option<TaskRef>
    Expand description

    Returns a cloned reference to the current task.

    Using with_current_task() is preferred because it operates on a borrowed reference to the current task and avoids cloning that reference.

    This function must clone the current task’s TaskRef in order to ensure diff --git a/doc/task/fn.get_my_current_task_id.html b/doc/task/fn.get_my_current_task_id.html index daf49d7921..53da49ff76 100644 --- a/doc/task/fn.get_my_current_task_id.html +++ b/doc/task/fn.get_my_current_task_id.html @@ -1,2 +1,2 @@ -get_my_current_task_id in task - Rust

    pub fn get_my_current_task_id() -> usize
    Expand description

    Returns the unique ID of the current task.

    +get_my_current_task_id in task - Rust
    pub fn get_my_current_task_id() -> usize
    Expand description

    Returns the unique ID of the current task.

    \ No newline at end of file diff --git a/doc/task/fn.schedule.html b/doc/task/fn.schedule.html index fbe5143531..5f9ea58b50 100644 --- a/doc/task/fn.schedule.html +++ b/doc/task/fn.schedule.html @@ -1,4 +1,4 @@ -schedule in task - Rust

    Function task::schedule

    source ·
    pub fn schedule() -> bool
    Expand description

    Yields the current CPU by selecting a new Task to run next, +schedule in task - Rust

    Function task::schedule

    source ·
    pub fn schedule() -> bool
    Expand description

    Yields the current CPU by selecting a new Task to run next, and then switches to that new Task.

    The new “next” Task to run will be selected by the currently-active scheduler policy.

    diff --git a/doc/task/fn.set_kill_handler.html b/doc/task/fn.set_kill_handler.html index b87d3ed13b..1804a99bab 100644 --- a/doc/task/fn.set_kill_handler.html +++ b/doc/task/fn.set_kill_handler.html @@ -1,4 +1,4 @@ -set_kill_handler in task - Rust

    Function task::set_kill_handler

    source ·
    pub fn set_kill_handler(function: KillHandler) -> Result<(), &'static str>
    Expand description

    Registers a kill handler function for the current Task.

    +set_kill_handler in task - Rust

    Function task::set_kill_handler

    source ·
    pub fn set_kill_handler(function: KillHandler) -> Result<(), &'static str>
    Expand description

    Registers a kill handler function for the current Task.

    KillHandlers are called when a Task panics or otherwise fails (e.g., due to a machine exception).

    Locking / Deadlock

    diff --git a/doc/task/fn.set_scheduler_policy.html b/doc/task/fn.set_scheduler_policy.html index 91798187bc..dbdab48723 100644 --- a/doc/task/fn.set_scheduler_policy.html +++ b/doc/task/fn.set_scheduler_policy.html @@ -1,4 +1,4 @@ -set_scheduler_policy in task - Rust

    Function task::set_scheduler_policy

    source ·
    pub fn set_scheduler_policy(select_next_task_func: SchedulerFunc)
    Expand description

    Sets the active scheduler policy used by schedule() to select the next task.

    +set_scheduler_policy in task - Rust

    Function task::set_scheduler_policy

    source ·
    pub fn set_scheduler_policy(select_next_task_func: SchedulerFunc)
    Expand description

    Sets the active scheduler policy used by schedule() to select the next task.

    Currently, we only support one scheduler policy for the whole system, but supporting different policies on a per-CPU, per-namespace, or per-arbitrary domain basis would be a relatively simple immprovement.

    diff --git a/doc/task/fn.take_kill_handler.html b/doc/task/fn.take_kill_handler.html index 9c8b4462a1..f4200aa19e 100644 --- a/doc/task/fn.take_kill_handler.html +++ b/doc/task/fn.take_kill_handler.html @@ -1,4 +1,4 @@ -take_kill_handler in task - Rust

    Function task::take_kill_handler

    source ·
    pub fn take_kill_handler() -> Option<KillHandler>
    Expand description

    Takes ownership of the current Task’s KillHandler function.

    +take_kill_handler in task - Rust

    Function task::take_kill_handler

    source ·
    pub fn take_kill_handler() -> Option<KillHandler>
    Expand description

    Takes ownership of the current Task’s KillHandler function.

    The registered KillHandler function is removed from the current task, if it exists, and returned such that it can be invoked without holding the Task’s inner lock.

    diff --git a/doc/task/fn.task_switch.html b/doc/task/fn.task_switch.html index def5435443..d0de42ac9f 100644 --- a/doc/task/fn.task_switch.html +++ b/doc/task/fn.task_switch.html @@ -1,4 +1,4 @@ -task_switch in task - Rust

    Function task::task_switch

    source ·
    pub fn task_switch(
    +task_switch in task - Rust

    Function task::task_switch

    source ·
    pub fn task_switch(
         next: TaskRef,
         cpu_id: CpuId,
         preemption_guard: PreemptionGuard
    diff --git a/doc/task/fn.with_current_task.html b/doc/task/fn.with_current_task.html
    index e9d1ecc524..991c97e446 100644
    --- a/doc/task/fn.with_current_task.html
    +++ b/doc/task/fn.with_current_task.html
    @@ -1,4 +1,4 @@
    -with_current_task in task - Rust

    Function task::with_current_task

    source ·
    pub fn with_current_task<F, R>(function: F) -> Result<R, CurrentTaskNotFound>where
    +with_current_task in task - Rust

    Function task::with_current_task

    source ·
    pub fn with_current_task<F, R>(function: F) -> Result<R, CurrentTaskNotFound>where
         F: FnOnce(&TaskRef) -> R,
    Expand description

    Invokes the given function with a reference to the current task.

    This is useful to avoid cloning a reference to the current task.

    Returns a CurrentTaskNotFound error if the current task cannot be obtained.

    diff --git a/doc/task/fn.with_current_task_and_value.html b/doc/task/fn.with_current_task_and_value.html index 9b3bb77b13..6bb89b97e2 100644 --- a/doc/task/fn.with_current_task_and_value.html +++ b/doc/task/fn.with_current_task_and_value.html @@ -1,4 +1,4 @@ -with_current_task_and_value in task - Rust
    pub fn with_current_task_and_value<F, R, T>(
    +with_current_task_and_value in task - Rust
    pub fn with_current_task_and_value<F, R, T>(
         function: F,
         value: T
     ) -> Result<R, T>where
    diff --git a/doc/task/index.html b/doc/task/index.html
    index 51fd06e167..767fdae98f 100644
    --- a/doc/task/index.html
    +++ b/doc/task/index.html
    @@ -1,4 +1,4 @@
    -task - Rust

    Crate task

    source ·
    Expand description

    Key types and functions for multitasking that build on the basic Task.

    +task - Rust

    Crate task

    source ·
    Expand description

    Key types and functions for multitasking that build on the basic Task.

    The main types of interest are:

    1. TaskRef: a shareable reference to a Task that can actually be used, diff --git a/doc/task/struct.CurrentTaskNotFound.html b/doc/task/struct.CurrentTaskNotFound.html index e8068ce461..d65dd0e777 100644 --- a/doc/task/struct.CurrentTaskNotFound.html +++ b/doc/task/struct.CurrentTaskNotFound.html @@ -1,5 +1,5 @@ -CurrentTaskNotFound in task - Rust
      pub struct CurrentTaskNotFound;
      Expand description

      An error type indicating that the current task has not yet been initialized.

      -

      Trait Implementations§

      source§

      impl Debug for CurrentTaskNotFound

      source§

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

      Formats the value using the given formatter. Read more

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +CurrentTaskNotFound in task - Rust
      pub struct CurrentTaskNotFound;
      Expand description

      An error type indicating that the current task has not yet been initialized.

      +

      Trait Implementations§

      source§

      impl Debug for CurrentTaskNotFound

      source§

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

      Formats the value using the given formatter. Read more

      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.

      diff --git a/doc/task/struct.ExitableTaskRef.html b/doc/task/struct.ExitableTaskRef.html index 6da7c41ff8..b3d250e277 100644 --- a/doc/task/struct.ExitableTaskRef.html +++ b/doc/task/struct.ExitableTaskRef.html @@ -1,4 +1,4 @@ -ExitableTaskRef in task - Rust

      Struct task::ExitableTaskRef

      source ·
      pub struct ExitableTaskRef { /* private fields */ }
      Expand description

      A wrapper around TaskRef that allows this task to mark itself as exited.

      +ExitableTaskRef in task - Rust

      Struct task::ExitableTaskRef

      source ·
      pub struct ExitableTaskRef { /* private fields */ }
      Expand description

      A wrapper around TaskRef that allows this task to mark itself as exited.

      This is primarily an internal implementation details, as it is only obtainable when a task is first switched to, specifically while it is executing the spawn::task_wrapper() (before it proceeds to running its actual entry function).

      @@ -7,7 +7,7 @@

      Not Clone-ableExitableTaskRef per task.

      However, this type auto-derefs into an inner TaskRef, which can be cloned, so you can easily call .clone() on it.

      -

      Implementations§

      source§

      impl ExitableTaskRef

      Implementations§

      source§

      impl ExitableTaskRef

      source

      pub fn mark_as_exited( &self, exit_value: Box<dyn Any + Send> ) -> Result<(), &'static str>

      Call this function to indicate that this task has successfully ran to completion, @@ -23,7 +23,7 @@

      Return
      Note

      The Task will not be halted immediately – it will finish running its current timeslice, and then never be run again.

      -
      source

      pub fn mark_as_killed(&self, reason: KillReason) -> Result<(), &'static str>

      Call this function to indicate that this task has been cleaned up (e.g., by unwinding) +

      source

      pub fn mark_as_killed(&self, reason: KillReason) -> Result<(), &'static str>

      Call this function to indicate that this task has been cleaned up (e.g., by unwinding) and it is ready to be marked as killed, i.e., it will never run again.

      If you want to kill another task, use TaskRef::kill() instead.

      This is only usable within task cleanup functions (e.g., after unwinding) to indicate @@ -36,11 +36,11 @@

      Return
      Note

      The Task will not be halted immediately – it will finish running its current timeslice, and then never be run again.

      -
      source

      pub fn reap_if_orphaned(&self)

      Reaps this task (if orphaned) by taking and dropping its exit value and removing it +

      source

      pub fn reap_if_orphaned(&self)

      Reaps this task (if orphaned) by taking and dropping its exit value and removing it from the system task list.

      If this task has not been orphaned, meaning it is still joinable, then this function does nothing.

      -
      source

      pub fn post_context_switch_action(&self) -> PreemptionGuard

      Perform any actions needed after a context switch.

      +
      source

      pub fn post_context_switch_action(&self) -> PreemptionGuard

      Perform any actions needed after a context switch.

      Currently this only does two things:

      1. Drops any data that the original previous task (before the context switch) @@ -139,7 +139,7 @@
        Locking / Deadlock

      pub fn unsuspend(&self)

      Unsuspends this Task.

      pub fn is_suspended(&self) -> bool

      Returns true if this Task is suspended.

      Note that a task being suspended is independent from its RunState.

      -

      Trait Implementations§

      source§

      impl Debug for ExitableTaskRef

      source§

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

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

      impl Deref for ExitableTaskRef

      §

      type Target = TaskRef

      The resulting type after dereferencing.
      source§

      fn deref(&self) -> &Self::Target

      Dereferences the value.
      source§

      impl !Send for ExitableTaskRef

      source§

      impl !Sync for ExitableTaskRef

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +

      Trait Implementations§

      source§

      impl Debug for ExitableTaskRef

      source§

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

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

      impl Deref for ExitableTaskRef

      §

      type Target = TaskRef

      The resulting type after dereferencing.
      source§

      fn deref(&self) -> &Self::Target

      Dereferences the value.
      source§

      impl !Send for ExitableTaskRef

      source§

      impl !Sync for ExitableTaskRef

      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.

      diff --git a/doc/task/struct.JoinableTaskRef.html b/doc/task/struct.JoinableTaskRef.html index 23e05f85d9..3706bbe65d 100644 --- a/doc/task/struct.JoinableTaskRef.html +++ b/doc/task/struct.JoinableTaskRef.html @@ -1,4 +1,4 @@ -JoinableTaskRef in task - Rust

      Struct task::JoinableTaskRef

      source ·
      pub struct JoinableTaskRef { /* private fields */ }
      Expand description

      A reference to a Task that can be joined; auto-derefs into TaskRef.

      +JoinableTaskRef in task - Rust

      Struct task::JoinableTaskRef

      source ·
      pub struct JoinableTaskRef { /* private fields */ }
      Expand description

      A reference to a Task that can be joined; auto-derefs into TaskRef.

      This allows another task to join this task, i.e., wait for this task to finish executing, and to obtain its ExitValue thereafter.

      Drop-based Behavior

      @@ -12,8 +12,8 @@

      Not Clone-ableJoinableTaskRef per task.

      However, this type auto-derefs into an inner TaskRef, which can be cloned, so you can easily call .clone() on it.

      -

      Implementations§

      source§

      impl JoinableTaskRef

      source

      pub fn set_waker(&self, waker: Waker)

      Sets the waker to be awoken when this task exits.

      -
      source

      pub fn join(&self) -> Result<ExitValue, &'static str>

      Blocks the current task until this task has exited.

      +

      Implementations§

      source§

      impl JoinableTaskRef

      source

      pub fn set_waker(&self, waker: Waker)

      Sets the waker to be awoken when this task exits.

      +
      source

      pub fn join(&self) -> Result<ExitValue, &'static str>

      Blocks the current task until this task has exited.

      Synchronizes memory with respect to the joined task.

      Return

      pub fn unsuspend(&self)

      Unsuspends this Task.

      pub fn is_suspended(&self) -> bool

      Returns true if this Task is suspended.

      Note that a task being suspended is independent from its RunState.

      -

      Trait Implementations§

      source§

      impl Debug for JoinableTaskRef

      source§

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

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

      impl Deref for JoinableTaskRef

      §

      type Target = TaskRef

      The resulting type after dereferencing.
      source§

      fn deref(&self) -> &Self::Target

      Dereferences the value.
      source§

      impl Drop for JoinableTaskRef

      source§

      fn drop(&mut self)

      Marks the inner Task as not joinable, meaning that it is an orphaned task +

      Trait Implementations§

      source§

      impl Debug for JoinableTaskRef

      source§

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

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

      impl Deref for JoinableTaskRef

      §

      type Target = TaskRef

      The resulting type after dereferencing.
      source§

      fn deref(&self) -> &Self::Target

      Dereferences the value.
      source§

      impl Drop for JoinableTaskRef

      source§

      fn drop(&mut self)

      Marks the inner Task as not joinable, meaning that it is an orphaned task that will be auto-reaped after exiting.

      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 diff --git a/doc/task/struct.ScheduleOnDrop.html b/doc/task/struct.ScheduleOnDrop.html index 1b058cbf28..dfc933756d 100644 --- a/doc/task/struct.ScheduleOnDrop.html +++ b/doc/task/struct.ScheduleOnDrop.html @@ -1,5 +1,5 @@ -ScheduleOnDrop in task - Rust

      Struct task::ScheduleOnDrop

      source ·
      pub struct ScheduleOnDrop {}
      Expand description

      An empty struct that invokes schedule() when it is dropped.

      -

      Trait Implementations§

      source§

      impl Drop for ScheduleOnDrop

      source§

      fn drop(&mut self)

      Executes the destructor for this type. Read more

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +ScheduleOnDrop in task - Rust

      Struct task::ScheduleOnDrop

      source ·
      pub struct ScheduleOnDrop {}
      Expand description

      An empty struct that invokes schedule() when it is dropped.

      +

      Trait Implementations§

      source§

      impl Drop for ScheduleOnDrop

      source§

      fn drop(&mut self)

      Executes the destructor for this type. Read more

      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.

      diff --git a/doc/task/struct.TaskRef.html b/doc/task/struct.TaskRef.html index b1b5f81585..ac60896d2f 100644 --- a/doc/task/struct.TaskRef.html +++ b/doc/task/struct.TaskRef.html @@ -6,7 +6,7 @@

      Equality comparisons

      TaskRef implements the PartialEq and Eq traits to ensure that two TaskRefs are considered equal if they point to the same underlying Task.

      -

      Implementations§

      source§

      impl TaskRef

      source

      pub fn create( +

      Implementations§

      source§

      impl TaskRef

      source

      pub fn create( task: Task, failure_cleanup_function: FailureCleanupFunction ) -> JoinableTaskRef

      Creates a new TaskRef, a shareable wrapper around the given Task.

      @@ -109,11 +109,11 @@
      Locking / Deadlock

      pub fn unsuspend(&self)

      Unsuspends this Task.

      pub fn is_suspended(&self) -> bool

      Returns true if this Task is suspended.

      Note that a task being suspended is independent from its RunState.

      -

      Trait Implementations§

      source§

      impl Clone for TaskRef

      source§

      fn clone(&self) -> TaskRef

      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 TaskRef

      source§

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

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

      impl Deref for TaskRef

      §

      type Target = Task

      The resulting type after dereferencing.
      source§

      fn deref(&self) -> &Self::Target

      Dereferences the value.
      source§

      impl Hash for TaskRef

      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 +

      Trait Implementations§

      source§

      impl Clone for TaskRef

      source§

      fn clone(&self) -> TaskRef

      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 TaskRef

      source§

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

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

      impl Deref for TaskRef

      §

      type Target = Task

      The resulting type after dereferencing.
      source§

      fn deref(&self) -> &Self::Target

      Dereferences the value.
      source§

      impl Hash for TaskRef

      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 PartialEq<TaskRef> for TaskRef

      source§

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

      This method tests for self and other values to be equal, and is used + Self: Sized,

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

      source§

      impl PartialEq<TaskRef> for TaskRef

      source§

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

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

      source§

      impl Eq for TaskRef

      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
      §

      impl<T> CallHasher for Twhere diff --git a/doc/task/struct.WeakTaskRef.html b/doc/task/struct.WeakTaskRef.html index 2e352cc5d3..45c22604b2 100644 --- a/doc/task/struct.WeakTaskRef.html +++ b/doc/task/struct.WeakTaskRef.html @@ -1,11 +1,11 @@ -WeakTaskRef in task - Rust

      Struct task::WeakTaskRef

      source ·
      pub struct WeakTaskRef(_);
      Expand description

      A weak reference to a shared Task reference (TaskRef).

      +WeakTaskRef in task - Rust

      Struct task::WeakTaskRef

      source ·
      pub struct WeakTaskRef(_);
      Expand description

      A weak reference to a shared Task reference (TaskRef).

      WeakTaskRef and TaskRef behave analogously to Weak and Arc; see the documentation of Weak for more detail.

      This is created via TaskRef::downgrade().

      -

      Implementations§

      source§

      impl WeakTaskRef

      source

      pub fn upgrade(&self) -> Option<TaskRef>

      Attempts to upgrade this WeakTaskRef to a TaskRef; see Weak::upgrade().

      +

      Implementations§

      source§

      impl WeakTaskRef

      source

      pub fn upgrade(&self) -> Option<TaskRef>

      Attempts to upgrade this WeakTaskRef to a TaskRef; see Weak::upgrade().

      Returns None if the TaskRef has already been dropped, meaning that the Task itself no longer exists has been exited, cleaned up, and fully dropped.

      -

      Trait Implementations§

      source§

      impl Clone for WeakTaskRef

      source§

      fn clone(&self) -> WeakTaskRef

      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 WeakTaskRef

      source§

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

      Formats the value using the given formatter. Read more

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +

      Trait Implementations§

      source§

      impl Clone for WeakTaskRef

      source§

      fn clone(&self) -> WeakTaskRef

      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 WeakTaskRef

      source§

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

      Formats the value using the given formatter. Read more

      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.

      diff --git a/doc/task/type.SchedulerFunc.html b/doc/task/type.SchedulerFunc.html index ce20c43366..1dbe378b75 100644 --- a/doc/task/type.SchedulerFunc.html +++ b/doc/task/type.SchedulerFunc.html @@ -1,3 +1,3 @@ -SchedulerFunc in task - Rust

      Type Definition task::SchedulerFunc

      source ·
      pub type SchedulerFunc = fn(_: u8) -> Option<TaskRef>;
      Expand description

      The signature for the function that selects the next task for the given CPU.

      +SchedulerFunc in task - Rust

      Type Definition task::SchedulerFunc

      source ·
      pub type SchedulerFunc = fn(_: u8) -> Option<TaskRef>;
      Expand description

      The signature for the function that selects the next task for the given CPU.

      This is used when the schedule() function is invoked.

      \ No newline at end of file diff --git a/doc/task_struct/enum.KillReason.html b/doc/task_struct/enum.KillReason.html index e2b3ced90c..3ae993245b 100644 --- a/doc/task_struct/enum.KillReason.html +++ b/doc/task_struct/enum.KillReason.html @@ -8,7 +8,7 @@
      §

      Panic(PanicInfoOwned)

      A Rust-level panic occurred while running this Task.

      §

      Exception(u8)

      A non-language-level problem, such as a Page Fault or some other machine exception. The number of the exception is included, e.g., 15 (0xE) for a Page Fault.

      -

      Trait Implementations§

      source§

      impl Debug for KillReason

      source§

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

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

      impl Display for KillReason

      source§

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

      Formats the value using the given formatter. Read more

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +

      Trait Implementations§

      source§

      impl Debug for KillReason

      source§

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

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

      impl Display for KillReason

      source§

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

      Formats the value using the given formatter. Read more

      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.

      diff --git a/doc/task_struct/struct.PanicInfoOwned.html b/doc/task_struct/struct.PanicInfoOwned.html index 0b0ad7a401..d9b66fd848 100644 --- a/doc/task_struct/struct.PanicInfoOwned.html +++ b/doc/task_struct/struct.PanicInfoOwned.html @@ -8,7 +8,7 @@

      Fields§

      §payload: Option<Box<dyn Any + Send>>§msg: String§file: String§line: u32§column: u32

      Implementations§

      source§

      impl PanicInfoOwned

      source

      pub fn from_payload(payload: Box<dyn Any + Send>) -> PanicInfoOwned

      Constructs a new PanicInfoOwned object containing only the given payload without any location or message info.

      Useful for forwarding panic payloads through a catch and resume unwinding sequence.

      -

      Trait Implementations§

      source§

      impl Debug for PanicInfoOwned

      source§

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

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

      impl Default for PanicInfoOwned

      source§

      fn default() -> PanicInfoOwned

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

      impl Display for PanicInfoOwned

      source§

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

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

      impl<'p> From<&PanicInfo<'p>> for PanicInfoOwned

      source§

      fn from(info: &PanicInfo<'_>) -> PanicInfoOwned

      Converts to this type from the input type.

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere +

      Trait Implementations§

      source§

      impl Debug for PanicInfoOwned

      source§

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

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

      impl Default for PanicInfoOwned

      source§

      fn default() -> PanicInfoOwned

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

      impl Display for PanicInfoOwned

      source§

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

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

      impl<'p> From<&PanicInfo<'p>> for PanicInfoOwned

      source§

      fn from(info: &PanicInfo<'_>) -> PanicInfoOwned

      Converts to this type from the input type.

      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.

      diff --git a/doc/tls_initializer/all.html b/doc/tls_initializer/all.html deleted file mode 100644 index 3f36b21e5f..0000000000 --- a/doc/tls_initializer/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
      \ No newline at end of file diff --git a/doc/tls_initializer/enum.TlsInitializerError.html b/doc/tls_initializer/enum.TlsInitializerError.html deleted file mode 100644 index c621bf5a6c..0000000000 --- a/doc/tls_initializer/enum.TlsInitializerError.html +++ /dev/null @@ -1,22 +0,0 @@ -TlsInitializerError in tls_initializer - Rust
      pub enum TlsInitializerError {
      -    OverlapWithExistingSection(usize),
      -    InvalidVirtualAddress(usize),
      -    NoRemainingSpace,
      -}
      Expand description

      Errors that may occur when adding TLS sections to a TlsInitializer.

      -

      Variants§

      §

      OverlapWithExistingSection(usize)

      Inserting a TLS section at the included offset -would erroneously overlap with an existing section. -This indicates a link-time bug or a bug in the symbol parsing code -that invokes the TlsInitializer::add_existing_static_tls_section().

      -
      §

      InvalidVirtualAddress(usize)

      The included virtual address calculated for a TLS section was invalid.

      -
      §

      NoRemainingSpace

      There was insufficient space to insert a TLS section into the TLS data image.

      -

      Trait Implementations§

      source§

      impl Debug for TlsInitializerError

      source§

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

      Formats the value using the given formatter. Read more

      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, 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.
      \ No newline at end of file diff --git a/doc/tls_initializer/index.html b/doc/tls_initializer/index.html deleted file mode 100644 index ba7784fd90..0000000000 --- a/doc/tls_initializer/index.html +++ /dev/null @@ -1,13 +0,0 @@ -tls_initializer - Rust

      Crate tls_initializer

      source ·
      Expand description

      Logic for generating Thread-Local Storage (TLS) data image for TLS areas.

      -

      The two key types are:

      -
        -
      1. TlsInitializer: a “factory” that maintains a list of loaded TLS sections -in order to correctly generate new TLS data images.
      2. -
      3. TlsDataImage: a generated TLS data image that can be used as the TLS area -for a single task.
      4. -
      -

      TODO FIXME: currently we are unsure of the virt_addr_values calculated -for TLS sections on aarch64. The placement of those sections in the -TLS data image is correct, but relocations against them may not be.

      -

      Structs

      • An initialized TLS area data image ready to be used by a new task.
      • A “factory” that creates Thread-Local Storage (TLS) data images, -which are used to initialize a new Task’s TLS area.

      Enums

      \ No newline at end of file diff --git a/doc/tls_initializer/sidebar-items.js b/doc/tls_initializer/sidebar-items.js deleted file mode 100644 index b076560973..0000000000 --- a/doc/tls_initializer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["TlsInitializerError"],"struct":["TlsDataImage","TlsInitializer"]}; \ No newline at end of file diff --git a/doc/tls_initializer/struct.TlsDataImage.html b/doc/tls_initializer/struct.TlsDataImage.html deleted file mode 100644 index 7706e50d4c..0000000000 --- a/doc/tls_initializer/struct.TlsDataImage.html +++ /dev/null @@ -1,26 +0,0 @@ -TlsDataImage in tls_initializer - Rust
      pub struct TlsDataImage { /* private fields */ }
      Expand description

      An initialized TLS area data image ready to be used by a new task.

      -

      The data is opaque, but one can obtain a pointer to the TLS area.

      -

      The enclosed opaque data is stored as a boxed slice (Box<[u8]>) -instead of a vector (Vec<u8>) because it is instantiated once upon task creation -and should never be expanded or shrunk.

      -

      The data is “immutable” with respect to Theseus task management functions -at the language level. -However, the data within this TLS area will be modified directly by code -that executes “in” this task, e.g., instructions that access the current TLS area.

      -

      Implementations§

      source§

      impl TlsDataImage

      source

      pub const fn empty() -> TlsDataImage

      Creates an empty TLS data image with no TLS section content.

      -
      source

      pub fn set_as_current_tls_base(&self)

      Sets the current CPU’s TLS register to point to this TLS data image.

      -
        -
      • On x86_64, this writes to the FsBase MSR.
      • -
      • On ARMv8, this writes to TPIDR_EL0.
      • -
      -

      Trait Implementations§

      source§

      impl Debug for TlsDataImage

      source§

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

      Formats the value using the given formatter. Read more

      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, 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.
      \ No newline at end of file diff --git a/doc/tls_initializer/struct.TlsInitializer.html b/doc/tls_initializer/struct.TlsInitializer.html deleted file mode 100644 index 75541b217a..0000000000 --- a/doc/tls_initializer/struct.TlsInitializer.html +++ /dev/null @@ -1,82 +0,0 @@ -TlsInitializer in tls_initializer - Rust
      pub struct TlsInitializer { /* private fields */ }
      Expand description

      A “factory” that creates Thread-Local Storage (TLS) data images, -which are used to initialize a new Task’s TLS area.

      -

      Implementations§

      source§

      impl TlsInitializer

      source

      pub const fn empty() -> TlsInitializer

      Creates an empty TLS initializer with no TLS data sections.

      -
      source

      pub fn add_existing_static_tls_section( - &mut self, - tls_section: LoadedSection, - offset: usize, - total_static_tls_size: usize -) -> Result<StrongSectionRef, TlsInitializerError>

      Add a TLS section that has pre-determined offset, e.g., -one that was specified in the statically-linked base kernel image.

      -

      This function modifies the tls_section’s starting virtual address field -to hold the proper value such that this tls_section can be correctly used -as the source of a relocation calculation (e.g., when another section depends on it).

      -
        -
      • On x86_64, that value will be the negative offset from the end of -all the static TLS sections, i.e., where the TLS self pointer exists in memory, -to the start of this section in the TLS image. -
          -
        • VirtAddr = -1 * (total_static_tls_size - offset);
        • -
        -
      • -
      • On aarch64, that value will simply be the given offset. -
          -
        • VirtAddr = offset;.
        • -
        • However, on aarch64, the actual location of this section in the TLS data image -is given by offset + max(16, TLS_segment_align). -The ELF TLS ABI on aarch64 specifies that this augmented value is -the real offset used to access this TLS variable from the TLS base address -(from the beginning of all sections).
        • -
        -
      • -
      -
      Arguments
      -
        -
      • tls_section: the TLS section present in base kernel image.
      • -
      • offset: the offset of this section as determined by the linker. -This corresponds to the “value” of this section’s symbol in the ELF file.
      • -
      • total_static_tls_size: the total size of all statically-known TLS sections, -including both TLS BSS (.tbss) and TLS data (.tdata) sections.
      • -
      -
      Return
      -
        -
      • A reference to the newly added and properly modified section, if successful.
      • -
      • An error if inserting the given tls_section at the given offset -would overlap with an existing section. -An error occurring here would indicate a link-time bug -or a bug in the symbol parsing code that invokes this function.
      • -
      -
      source

      pub fn add_new_dynamic_tls_section( - &mut self, - section: LoadedSection, - alignment: usize -) -> Result<(usize, StrongSectionRef), TlsInitializerError>

      Inserts the given section into this TLS area at the next index -(i.e., offset into the TLS area) where the section will fit.

      -

      This also modifies the virtual address field of the given section -to hold the proper value based on that offset, which is necessary -for calculating relocation entries that depend on this section.

      -

      Returns a tuple of:

      -
        -
      1. The index at which the new section was inserted, -which is the offset from the beginning of the TLS area where the section data starts.
      2. -
      3. The modified section as a StrongSectionRef.
      4. -
      -

      Returns an Error if there is no remaining space that can fit the section.

      -
      source

      pub fn invalidate(&mut self)

      Invalidates the cached data image in this TlsInitializer area.

      -

      This is useful for when a TLS section’s data has been modified, -e.g., while performing relocations, -and thus the data image needs to be re-created by re-reading the section data.

      -
      source

      pub fn get_data(&mut self) -> TlsDataImage

      Returns a new copy of the TLS data image.

      -

      This function lazily generates the TLS image data on demand, if needed.

      -

      Trait Implementations§

      source§

      impl Clone for TlsInitializer

      source§

      fn clone(&self) -> TlsInitializer

      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 TlsInitializer

      source§

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

      Formats the value using the given formatter. Read more

      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.
      \ No newline at end of file diff --git a/doc/tty/struct.Master.html b/doc/tty/struct.Master.html index 06b3ff2f47..49a4c27002 100644 --- a/doc/tty/struct.Master.html +++ b/doc/tty/struct.Master.html @@ -1,14 +1,14 @@ Master in tty - Rust

      Struct tty::Master

      source ·
      pub struct Master { /* private fields */ }
      Expand description

      The master (i.e. terminal) end of a Tty.

      Implementations§

      source§

      impl Master

      source

      pub fn discipline(&self) -> Arc<LineDiscipline>

      source

      pub fn read_byte(&self) -> Result<u8>

      source

      pub fn read(&self, buf: &mut [u8]) -> Result<usize>

      source

      pub fn try_read(&self, buf: &mut [u8]) -> Result<usize>

      source

      pub fn write_byte(&self, byte: u8) -> Result<()>

      source

      pub fn write(&self, buf: &[u8]) -> Result<usize>

      Trait Implementations§

      source§

      impl Clone for Master

      source§

      fn clone(&self) -> Master

      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 Read for Master

      source§

      fn read(&mut self, buf: &mut [u8]) -> Result<usize>

      Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
      §

      fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>

      Read all bytes until EOF in this source, placing them into buf. Read more
      §

      fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

      Read all bytes until EOF in this source, appending them to buf. Read more
      §

      unsafe fn initializer(&self) -> Initializer

      Determines if this Reader can work with buffers of uninitialized -memory. Read more
      §

      fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

      Read the exact number of bytes required to fill buf. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere +memory. Read more

      §

      fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

      Read the exact number of bytes required to fill buf. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

      Creates a “by reference” adaptor for this instance of Read. Read more
      §

      fn bytes(self) -> Bytes<Self>where Self: Sized,

      Transforms this Read instance to an Iterator over its bytes. Read more
      §

      fn chain<R>(self, next: R) -> Chain<Self, R>where R: Read, Self: Sized,

      Creates an adaptor which will chain this stream with another. Read more
      §

      fn take(self, limit: u64) -> Take<Self>where Self: Sized,

      Creates an adaptor which will read at most limit bytes from it. Read more
      source§

      impl Write for Master

      source§

      fn write(&mut self, buf: &[u8]) -> Result<usize>

      Write a buffer into this writer, returning how many bytes were written. Read more
      source§

      fn flush(&mut self) -> Result<()>

      Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
      §

      fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

      Attempts to write an entire buffer into this writer. Read more
      §

      fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

      Writes a formatted string into this writer, returning any error -encountered. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere +encountered. Read more

      §

      fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

      Creates a “by reference” adaptor for this instance of Write. Read more

      Auto Trait Implementations§

      §

      impl !RefUnwindSafe for Master

      §

      impl Send for Master

      §

      impl Sync for Master

      §

      impl Unpin for Master

      §

      impl !UnwindSafe for Master

      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 diff --git a/doc/tty/struct.Slave.html b/doc/tty/struct.Slave.html index dce3eb58cc..5ff8027b6c 100644 --- a/doc/tty/struct.Slave.html +++ b/doc/tty/struct.Slave.html @@ -1,14 +1,14 @@ Slave in tty - Rust

      Struct tty::Slave

      source ·
      pub struct Slave { /* private fields */ }
      Expand description

      The slave (i.e. application) end of a Tty.

      Implementations§

      source§

      impl Slave

      source

      pub fn discipline(&self) -> Arc<LineDiscipline>

      source

      pub fn read_byte(&self) -> Result<u8>

      source

      pub fn read(&self, buf: &mut [u8]) -> Result<usize>

      source

      pub fn try_read(&self, buf: &mut [u8]) -> Result<usize>

      source

      pub fn write_byte(&self, byte: u8) -> Result<()>

      source

      pub fn write(&self, buf: &[u8]) -> Result<usize>

      Trait Implementations§

      source§

      impl Clone for Slave

      source§

      fn clone(&self) -> Slave

      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 Read for Slave

      source§

      fn read(&mut self, buf: &mut [u8]) -> Result<usize>

      Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
      §

      fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>

      Read all bytes until EOF in this source, placing them into buf. Read more
      §

      fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

      Read all bytes until EOF in this source, appending them to buf. Read more
      §

      unsafe fn initializer(&self) -> Initializer

      Determines if this Reader can work with buffers of uninitialized -memory. Read more
      §

      fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

      Read the exact number of bytes required to fill buf. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere +memory. Read more

      §

      fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

      Read the exact number of bytes required to fill buf. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

      Creates a “by reference” adaptor for this instance of Read. Read more
      §

      fn bytes(self) -> Bytes<Self>where Self: Sized,

      Transforms this Read instance to an Iterator over its bytes. Read more
      §

      fn chain<R>(self, next: R) -> Chain<Self, R>where R: Read, Self: Sized,

      Creates an adaptor which will chain this stream with another. Read more
      §

      fn take(self, limit: u64) -> Take<Self>where Self: Sized,

      Creates an adaptor which will read at most limit bytes from it. Read more

      source§

      impl Write for Slave

      source§

      fn write(&mut self, buf: &[u8]) -> Result<usize>

      Write a buffer into this writer, returning how many bytes were written. Read more
      source§

      fn flush(&mut self) -> Result<()>

      Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
      §

      fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

      Attempts to write an entire buffer into this writer. Read more
      §

      fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

      Writes a formatted string into this writer, returning any error -encountered. Read more
      §

      fn by_ref(&mut self) -> &mut Selfwhere +encountered. Read more

      §

      fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

      Creates a “by reference” adaptor for this instance of Write. Read more

      Auto Trait Implementations§

      §

      impl !RefUnwindSafe for Slave

      §

      impl Send for Slave

      §

      impl Sync for Slave

      §

      impl Unpin for Slave

      §

      impl !UnwindSafe for Slave

      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