Zth (libzth)
|
Base class of the Context. More...
#include <context.h>
Classes | |
struct | Stack |
Stack information. More... | |
Public Member Functions | |
ContextAttr & | attr () noexcept |
Return the context attributes, requested by the user. More... | |
ContextAttr const & | attr () const noexcept |
Return the context attributes, requested by the user. More... | |
int | create () noexcept |
Create context. More... | |
void | destroy () noexcept |
Destroy and cleanup context. More... | |
int | initStack (Stack &stack, Stack &usable) noexcept |
Allocate and initialize stack. More... | |
void | deinitStack (Stack &stack) noexcept |
Deinit and free stack. More... | |
Stack const & | stack () const noexcept |
Return the stack address. More... | |
Stack const & | stackUsable () const noexcept |
Return the start of the actual usable stack. More... | |
size_t | calcStackSize (size_t size) noexcept |
Compute the stack size, given the requested user size and current configuration. More... | |
void * | allocStack (size_t size) noexcept |
Allocate requested size of stack memory. More... | |
void | deallocStack (Stack &stack) noexcept |
Frees the previously allocated stack. More... | |
void | stackAlign (Stack &stack) noexcept |
Compute and modify the stack alignment and size, within the allocated space. More... | |
void | valgrindRegister () noexcept |
Register the current stack to valgrind. More... | |
void | valgrindDeregister () noexcept |
Deregister the current stack from valgrind. More... | |
int | stackGuardInit () noexcept |
Initialize guards around the stack memory. More... | |
void | stackGuardDeinit () noexcept |
Release the guards around the memory. More... | |
void | stackGuard () noexcept |
Configure the guard for the current fiber. More... | |
void | stackGuard (Stack const &stack) noexcept |
Configure the guard for the given stack. More... | |
void * | stackGuard (void *p) noexcept |
Configure the guard for the address. More... | |
void | context_switch (Context &to) noexcept |
Perform a context switch. More... | |
void | context_push_regs () noexcept |
Pre-sjlj context saving. More... | |
void | context_pop_regs () noexcept |
Post-sjlj context restoring. More... | |
void | context_prepare_jmp (Impl &to, jmp_buf &env) noexcept |
Pre-sjlj jump. More... | |
void | die () noexcept |
Flag fiber as died after it returned from context_entry() . More... | |
bool | alive () const noexcept |
Check if fiber is still running. More... | |
void * | stack_switch (void *stack, size_t size, void *(*f)(void *) noexcept, void *arg) noexcept |
Static Public Member Functions | |
static int | init () noexcept |
One-time system initialization. More... | |
static void | deinit () noexcept |
Final system cleanup. More... | |
static size_t | pageSize () noexcept |
Get system's page size. More... | |
static bool | stackGrowsDown (void const *reference) |
Checks if the stack grows down or up. More... | |
static void ** | sp (Stack const &stack) noexcept |
Get the initial stack pointer for the given stack. More... | |
static void | stack_push (void **&sp, void *p) noexcept |
Push data into the stack. More... | |
static void | set_sp (jmp_buf &env, void **sp) noexcept |
Set the stack pointer in a jmp_buf . More... | |
static void | set_pc (jmp_buf &env, void *sp) noexcept |
Set the program counter in a jmp_buf . More... | |
static void | context_trampoline_from_jmp_buf () |
Entry point to jump to from a (sig)jmp_buf. More... | |
Protected Member Functions | |
constexpr | ContextBase (ContextAttr const &attr) noexcept |
~ContextBase () | |
Dtor. More... | |
Impl & | impl () noexcept |
Return Impl this . More... | |
Impl const & | impl () const noexcept |
Return Impl this . More... | |
Base class of the Context.
The Context consists of three layers:
Although the classes inherit each other and override methods, they are not virtual. All implementation is done in the header. The lowest subclass is passed as template parameter to the parents, which allows invoking the most specific methods. This allows fully inlining and optimizing the functions.
|
inlineexplicitconstexprprotectednoexcept |
|
inlineprotected |
|
inlinenoexcept |
|
inlinenoexcept |
Allocate requested size of stack memory.
Alignment does not have to be enforced.
size | the requested size, which is a multiple of pageSize(). |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
noexcept |
Perform a context switch.
|
static |
Entry point to jump to from a (sig)jmp_buf.
As the pc is probably set via set_pc(), which is not really supported by the standard libary, you may also have to implement this function a bit more careful.
It should call context_entry in the end.
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinestaticnoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
Flag fiber as died after it returned from context_entry()
.
|
inlineprotectednoexcept |
|
inlineprotectednoexcept |
|
inlinestaticnoexcept |
|
inlinenoexcept |
|
inlinestaticnoexcept |
|
staticnoexcept |
Set the program counter in a jmp_buf
.
|
staticnoexcept |
Set the stack pointer in a jmp_buf
.
|
staticnoexcept |
Get the initial stack pointer for the given stack.
|
inlinenoexcept |
|
staticnoexcept |
Push data into the stack.
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinestatic |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |