Changeset e0a4686 in mainline for uspace/lib/c/generic/setjmp.c


Ignore:
Timestamp:
2018-03-08T18:25:31Z (6 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/generic/setjmp.c

    rfd57cf17 re0a4686  
    3737
    3838#include <setjmp.h>
    39 #include <libarch/fibril.h>
    40 #include <fibril.h>
     39#include <context.h>
     40
     41// TODO: setjmp/longjmp are basically a stronger version of
     42// context_save/context_restore. It would be preferable to turn
     43// those two into setjmp/longjmp (all it would need is preserving the
     44// return value).
    4145
    4246/**
     
    5256        env[0].return_value = (val == 0) ? 1 : val;
    5357        context_restore(&env[0].context);
    54         __builtin_unreachable();
    5558}
    5659
Note: See TracChangeset for help on using the changeset viewer.