update include/arch/aarch64/context.h for arm building

main
xiaosuGW 3 years ago
parent 8e91735e44
commit 66440cf74d

@ -2,9 +2,7 @@
#if defined(AARCH64) || defined(aarch64) #if defined(AARCH64) || defined(aarch64)
#include <assert.h> #include <assert.h>
#include "arch/common.h" #include "arch/common.h"
#include "current_sandbox.h"
#define ARCH_SIG_JMP_OFF 0x100 /* Based on code generated! */ #define ARCH_SIG_JMP_OFF 0x100 /* Based on code generated! */
@ -48,10 +46,10 @@ arch_context_switch(struct arch_context *a, struct arch_context *b)
* Assumption: In the case of a slow context switch, the caller * Assumption: In the case of a slow context switch, the caller
* set current_sandbox to the sandbox containing the target context * set current_sandbox to the sandbox containing the target context
*/ */
if (b->variant == ARCH_CONTEXT_VARIANT_SLOW) { /*if (b->variant == ARCH_CONTEXT_VARIANT_SLOW) {
struct sandbox *current = current_sandbox_get(); struct sandbox *current = current_sandbox_get();
assert(current != NULL && b == &current->ctxt); assert(current != NULL && b == &current->ctxt);
} }*/
#endif #endif
/* if both a and b are NULL, there is no state change */ /* if both a and b are NULL, there is no state change */
@ -110,6 +108,34 @@ arch_context_switch(struct arch_context *a, struct arch_context *b)
return 0; return 0;
} }
/**
* Load a new sandbox that preempted an existing sandbox, restoring only the
* instruction pointer and stack pointer registers.
* @param active_context - the context of the current worker thread
* @param sandbox_context - the context that we want to restore
*/
static inline void
arch_context_restore_new(mcontext_t *active_context, struct arch_context *sandbox_context)
{
assert(active_context != NULL);
assert(sandbox_context != NULL);
/* Assumption: Base Context is only ever used by arch_context_switch */
assert(sandbox_context != &worker_thread_base_context);
assert(sandbox_context->regs[UREG_SP]);
assert(sandbox_context->regs[UREG_IP]);
/* Transitioning from Fast -> Running */
assert(sandbox_context->variant == ARCH_CONTEXT_VARIANT_FAST);
sandbox_context->variant = ARCH_CONTEXT_VARIANT_RUNNING;
active_context->sp = sandbox_context->regs[UREG_SP];
active_context->pc = sandbox_context->regs[UREG_IP] + ARCH_SIG_JMP_OFF;
}
#else #else
#warning "Neither AARCH64 nor aarch64 was defined, but aarch64/context.h was included!" #warning "Neither AARCH64 nor aarch64 was defined, but aarch64/context.h was included!"
#endif #endif

Loading…
Cancel
Save