| Home | Libraries | People | FAQ | More

### Struct `fcontext_t` and related functions

    struct stack_t
    {
        void    *   sp;
        std::size_t size;
    };

    struct fcontext_t
    {
        < platform specific >

        stack_t  fc_stack;
    };

    intptr_t jump_fcontext( fcontext_t * ofc, fcontext_t const* nfc, intptr_t vp, bool preserve_fpu = true);
    fcontext_t * make_fcontext( void * sp, std::size_t size, void(* fn)(intptr_t) );

##### `sp`

Member:

  Pointer to the beginning of the stack (depending of the architecture the stack grows downwards or upwards).

##### `size`

Member:

  Size of the stack in bytes.

##### `fc_stack`

Member:

  Tracks the memory for the context's stack.

##### `intptr_t jump_fcontext( fcontext_t * ofc, fcontext_t * nfc, intptr_t p, bool preserve_fpu = true)`

Effects:

  Stores the current context data (stack pointer, instruction pointer, and CPU registers) to `*ofc` and restores the context data from `*nfc`, which implies jumping to `*nfc`'s execution context. The intptr_t argument, `p`, is passed to the current context to be returned by the most recent call to `jump_fcontext()` in the same thread. The last argument controls if fpu registers have to be preserved.

Returns:

  The third pointer argument passed to the most recent call to `jump_fcontext()`, if any.

##### `fcontext_t * make_fcontext( void * sp, std::size_t size, void(*fn)(intptr_t))`

Precondition:

  Stack `sp` function pointer `fn` are valid and `size` > 0.

Effects:

  Creates an fcontext_t at the beginning of the stack and prepares the stack to execute the context-function `fn`.

Returns:

  Returns a pointer to fcontext_t which is placed on the stack.