Ignore:
Timestamp:
2018-03-08T18:25:31Z (7 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
53ad43c, 615e83d
Parents:
fd57cf17
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-06 22:03:11)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-08 18:25:31)
Message:

Introduce context_swap() and use it to simplify fibril implementation.

This wraps the use of context_save()/context_restore(), to provide a more
natural (and easier to understand) control flow. The patch also hides the
details of the underlying context, requiring the use of context_get_pc()
to acquire program counter. This might allow context_swap() to only store
one pointer in the context, storing the remaining information in its stack
frame. However, that is not done in this patch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/arch/abs32le/include/libarch/fibril.h

    rfd57cf17 re0a4686  
    3737
    3838#include <stdint.h>
     39#include <libarch/fibril_context.h>
    3940
    4041#define SP_DELTA  0
     
    4849        } while (0)
    4950
    50 /*
    51  * On real hardware this stores the registers which
    52  * need to be preserved across function calls.
    53  */
    54 typedef struct {
    55         uintptr_t sp;
    56         uintptr_t fp;
    57         uintptr_t pc;
    58         uintptr_t tls;
    59 } context_t;
    60 
    61 static inline uintptr_t context_get_fp(context_t *ctx)
     51static inline uintptr_t _context_get_fp(context_t *ctx)
    6252{
    6353        /* On real hardware, this function returns the frame pointer. */
Note: See TracChangeset for help on using the changeset viewer.