Zth (libzth)
zth::Context Class Reference

#include <sigaltstack.h>

Inheritance diagram for zth::Context:
zth::impl::ContextArch< Context > zth::impl::ContextArch< Context > zth::impl::ContextArch< Context > zth::impl::ContextArch< Context > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl > zth::impl::ContextBase< Impl >

Public Types

typedef impl::ContextArch< Contextbase
 
typedef ContextArch< Contextbase
 
typedef impl::ContextArch< Contextbase
 
typedef impl::ContextArch< Contextbase
 
- Public Types inherited from zth::impl::ContextArch< Context >
typedef ContextBase< Contextbase
 
typedef ContextBase< Contextbase
 

Public Member Functions

constexpr Context (ContextAttr const &attr) noexcept
 
int create () noexcept
 
void context_switch (Context &to) noexcept
 
constexpr Context (ContextAttr const &attr) noexcept
 
int create () noexcept
 
void context_switch (Context &to) noexcept
 
constexpr Context (ContextAttr const &attr) noexcept
 
int create () noexcept
 
void context_switch (Context &to) noexcept
 
constexpr Context (ContextAttr const &attr) noexcept
 
int initStack (Stack &UNUSED_PAR(stack), Stack &UNUSED_PAR(usable)) noexcept
 
void deinitStack (Stack &UNUSED_PAR(stack)) noexcept
 
int stackGuardInit () noexcept
 
void stackGuardDeinit () noexcept
 
void valgrindRegister () noexcept
 
void valgrindDeregister () noexcept
 
int create () noexcept
 
void destroy () noexcept
 
void context_switch (Context &to) noexcept
 
- Public Member Functions inherited from zth::impl::ContextArch< Context >
size_t calcStackSize (size_t size) noexcept
 
void stackAlign (Stack &stack) noexcept
 
Contextimpl () noexcept
 Return Impl this. More...
 
Context const & impl () const noexcept
 Return Impl this. More...
 
- Public Member Functions inherited from zth::impl::ContextBase< Impl >
ContextAttrattr () 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
 
static void deinit () noexcept
 
static int init () noexcept
 
- Static Public Member Functions inherited from zth::impl::ContextArch< Context >
static size_t pageSize () noexcept
 
static void * sp () noexcept
 
- Static Public Member Functions inherited from zth::impl::ContextBase< Impl >
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...
 

Additional Inherited Members

- Protected Member Functions inherited from zth::impl::ContextArch< Context >
constexpr ContextArch (ContextAttr const &attr) noexcept
 
constexpr ContextArch (ContextAttr const &attr) noexcept
 
- Protected Member Functions inherited from zth::impl::ContextBase< Impl >
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...
 

Detailed Description

Examples
measure.cpp.

Definition at line 60 of file sigaltstack.h.

Member Typedef Documentation

◆ base [1/4]

Definition at line 63 of file sigaltstack.h.

◆ base [2/4]

Definition at line 26 of file sjlj.h.

◆ base [3/4]

Definition at line 37 of file ucontext.h.

◆ base [4/4]

Definition at line 25 of file winfiber.h.

Constructor & Destructor Documentation

◆ Context() [1/4]

constexpr zth::Context::Context ( ContextAttr const &  attr)
inlineexplicitconstexprnoexcept

Definition at line 65 of file sigaltstack.h.

◆ Context() [2/4]

constexpr zth::Context::Context ( ContextAttr const &  attr)
inlineexplicitconstexprnoexcept

Definition at line 28 of file sjlj.h.

◆ Context() [3/4]

constexpr zth::Context::Context ( ContextAttr const &  attr)
inlineexplicitconstexprnoexcept

Definition at line 39 of file ucontext.h.

◆ Context() [4/4]

constexpr zth::Context::Context ( ContextAttr const &  attr)
inlineexplicitconstexprnoexcept

Definition at line 27 of file winfiber.h.

Member Function Documentation

◆ context_switch() [1/4]

void zth::Context::context_switch ( Context to)
inlinenoexcept

Definition at line 291 of file sigaltstack.h.

◆ context_switch() [2/4]

void zth::Context::context_switch ( Context to)
inlinenoexcept

Definition at line 64 of file sjlj.h.

◆ context_switch() [3/4]

void zth::Context::context_switch ( Context to)
inlinenoexcept

Definition at line 115 of file ucontext.h.

◆ context_switch() [4/4]

void zth::Context::context_switch ( Context to)
inlinenoexcept

Definition at line 106 of file winfiber.h.

◆ create() [1/4]

int zth::Context::create ( )
inlinenoexcept

Definition at line 151 of file sigaltstack.h.

◆ create() [2/4]

int zth::Context::create ( )
inlinenoexcept

Definition at line 46 of file sjlj.h.

◆ create() [3/4]

int zth::Context::create ( )
inlinenoexcept

Definition at line 67 of file ucontext.h.

◆ create() [4/4]

int zth::Context::create ( )
inlinenoexcept

Definition at line 67 of file winfiber.h.

◆ deinit()

static void zth::Context::deinit ( )
inlinestaticnoexcept

Definition at line 139 of file sigaltstack.h.

◆ deinitStack()

void zth::Context::deinitStack ( Stack UNUSED_PARstack)
inlinenoexcept

Definition at line 50 of file winfiber.h.

◆ destroy()

void zth::Context::destroy ( )
inlinenoexcept

Definition at line 92 of file winfiber.h.

◆ init() [1/2]

static int zth::Context::init ( )
inlinestaticnoexcept

Definition at line 119 of file sigaltstack.h.

◆ init() [2/2]

static int zth::Context::init ( )
inlinestaticnoexcept

Definition at line 32 of file winfiber.h.

◆ initStack()

int zth::Context::initStack ( Stack UNUSED_PARstack,
Stack UNUSED_PARusable 
)
inlinenoexcept

Definition at line 43 of file winfiber.h.

◆ stackGuardDeinit()

void zth::Context::stackGuardDeinit ( )
inlinenoexcept

Definition at line 58 of file winfiber.h.

◆ stackGuardInit()

int zth::Context::stackGuardInit ( )
inlinenoexcept

Definition at line 52 of file winfiber.h.

◆ valgrindDeregister()

void zth::Context::valgrindDeregister ( )
inlinenoexcept

Definition at line 65 of file winfiber.h.

◆ valgrindRegister()

void zth::Context::valgrindRegister ( )
inlinenoexcept

Definition at line 60 of file winfiber.h.

Member Data Documentation

◆ m_did_trampoline

sig_atomic_t volatile zth::Context::m_did_trampoline

Definition at line 306 of file sigaltstack.h.

◆ m_env

sigjmp_buf zth::Context::m_env

Definition at line 302 of file sigaltstack.h.

◆ m_parent

sigjmp_buf* volatile zth::Context::m_parent

Definition at line 307 of file sigaltstack.h.

◆ m_trampoline_env

jmp_buf zth::Context::m_trampoline_env

Definition at line 301 of file sigaltstack.h.


The documentation for this class was generated from the following files: