Latest update.
This commit is contained in:
@@ -25,17 +25,33 @@
|
||||
# define ASYNC_POSIX
|
||||
# define ASYNC_ARCH
|
||||
|
||||
# ifdef __CET__
|
||||
/*
|
||||
* When Intel CET is enabled, makecontext will create a different
|
||||
* shadow stack for each context. async_fibre_swapcontext cannot
|
||||
* use _longjmp. It must call swapcontext to swap shadow stack as
|
||||
* well as normal stack.
|
||||
*/
|
||||
# define USE_SWAPCONTEXT
|
||||
# endif
|
||||
# include <ucontext.h>
|
||||
# include <setjmp.h>
|
||||
# ifndef USE_SWAPCONTEXT
|
||||
# include <setjmp.h>
|
||||
# endif
|
||||
|
||||
typedef struct async_fibre_st {
|
||||
ucontext_t fibre;
|
||||
# ifndef USE_SWAPCONTEXT
|
||||
jmp_buf env;
|
||||
int env_init;
|
||||
# endif
|
||||
} async_fibre;
|
||||
|
||||
static ossl_inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r)
|
||||
{
|
||||
# ifdef USE_SWAPCONTEXT
|
||||
swapcontext(&o->fibre, &n->fibre);
|
||||
# else
|
||||
o->env_init = 1;
|
||||
|
||||
if (!r || !_setjmp(o->env)) {
|
||||
@@ -44,6 +60,7 @@ static ossl_inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, i
|
||||
else
|
||||
setcontext(&n->fibre);
|
||||
}
|
||||
# endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user