[−][src]Struct sunrise_libuser::thread_local_storage::ThreadLocalStaticRegion
Represents an allocated thread local static region.
Because TLS regions have a really specific layout, we don't use Box and instead interact with the allocator directly. This type is the equivalent of a Box, it stores the pointer to the allocated memory, and deallocates it on Drop.
Fields
ptr: usize
Pointer to the allocated memory
layout: Layout
Layout of the allocated memory. Used when deallocating.
tcb_offset: usize
Offset of the TCB in this allocation.
Implementations
impl ThreadLocalStaticRegion
[src]
fn tcb(&self) -> &ThreadControlBlock
[src]
Returns a pointer to the ThreadControlBlock in the allocated region. All TLS arithmetic are done relative to this pointer.
For TLS to work, the value stored at this address should be the address itself, i.e. having a pointer pointing to itself.
fn allocate(block_src: &[u8], block_size: usize, block_align: usize) -> Self
[src]
Allocates a ThreadLocalStaticRegion.
The region's content is copied from the TLS initialisation image described by block_src
,
padded with 0s for block_size
, to which is appended a ThreadControlBlock
.
The ThreadLocalStaticRegion uses PT_TLS
's p_align
field passed in block_align
to compute its layout and total size.
Alignment
V----------------------V tls_align_up(tls_size_1, align_1)
+-- gs:0
|
+----------------------|-- tlsoffset_1 = gs:0 - tls_align_up(tls_size_1, align_1)
| |
V V
j----------------~-----j---------j
... | tls_size_1 | pad | TCB |
j----------------~-----j---------j
^ ^ ^
| | |
| | +-- TCB_align: Determines alignment of everything.
| | = max(align_of::<TCB>(), align_1). e.g. : 16.
| |
| +------------------------- TCB_align - n * align_1
| => still aligned to align_1 because TCB is aligned to align_1.
|
+------------------------------ alloc_align == TCB_align
=> &TCB = &alloc + tls_align_up(gs:0 - tls_offset_1, TCB_align)
^---^ alloc_pad
Trait Implementations
impl Debug for ThreadLocalStaticRegion
[src]
impl Drop for ThreadLocalStaticRegion
[src]
Auto Trait Implementations
impl RefUnwindSafe for ThreadLocalStaticRegion
impl Send for ThreadLocalStaticRegion
impl Sync for ThreadLocalStaticRegion
impl Unpin for ThreadLocalStaticRegion
impl UnwindSafe for ThreadLocalStaticRegion
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> SizedIPCBuffer for T
[src]
fn size(&Self) -> usize
[src]
fn is_cool(usize, usize) -> bool
[src]
unsafe fn from_raw_parts<'a>(usize, usize) -> &'a T
[src]
unsafe fn from_raw_parts_mut<'a>(usize, usize) -> &'a mut T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,