blob: 6b07e1aba55aa15572a1b42dfb04697bf1df47e1 [file] [log] [blame] [view]
<!--
Copyright 2019, Data61
Commonwealth Scientific and Industrial Research Organisation (CSIRO)
ABN 41 687 119 230.
This software may be distributed and modified according to the terms of
the BSD 2-Clause license. Note that NO WARRANTY is provided.
See "LICENSE_BSD2.txt" for details.
@TAG(DATA61_BSD)
-->
# The seL4 Run-time
This provides a minimal runtime for running a C or C-compatible process,
i.e. one with a C-like `main`, in a minimal seL4 environment.
This runtime provides mechanisms for accessing everything a standard
process would expect to need at start and provides additional utilities
for delegating the creation of processes and threads.
## Standard Processes
All processes (except for the root task) will use the entry-points
provided here as normal and require the `_start` entry-point provided in
the architecture-dependant `crt0.S`. This will then bootstrap into the
runtime entry-point `__sel4_start_c` which simply processes the stack to
find the argument, environment, and auxiliary vectors.
The found vectors, along with`main`, are passed into
`__sel4_start_main` which configures the runtime before starting
`main`.
## Root Task
The root task requires an alternate entry-point `_sel4_start` which
assumes that the `seL4_BootInfo` argument has been passed to it and that
it has not been given a stack.
This entry-point moves onto a static 16 kilobyte stack before invoking
`__sel4_start_root`, which constructs the argument, environment, and
auxiliary vectors. It then passes the constructed vectors, along with
`main`, into `__sel4_start_main` which configures the runtime before
starting `main`.
## Thread-local storage layout
There are two standard layouts for thread local storage commonly used.
One where the TLS base address refers to the first address in memory of
the region and one where it refers to the address that immediately
follows the region. Intel's x86_64 and ia32 architectures use the latter
method as it aligns with the segmentation view of memory presented by
the processor. Most other platforms use former method, where the TLS can
be said to be 'above' the thread pointer.
In order to store metadata for the current thread in the same memory
allocation as the TLS, the run-time utilises memory on the other side of
the thread pointer for it's thread structure.