refactor: Decompose arch common header

main
Sean McBride 4 years ago
parent 100f66966f
commit f42ada6eca

@ -0,0 +1,29 @@
#pragma once
#include "panic.h"
/* The enum is compared directly in assembly, so maintain integral values! */
typedef enum
{
ARCH_CONTEXT_VARIANT_UNUSED = 0, /* Has not have saved a context */
ARCH_CONTEXT_VARIANT_FAST = 1, /* Saved a fastpath context */
ARCH_CONTEXT_VARIANT_SLOW = 2, /* Saved a slowpath context */
ARCH_CONTEXT_VARIANT_RUNNING = 3 /* Context is executing and content is out of date */
} arch_context_variant_t;
static inline char *
arch_context_variant_print(arch_context_variant_t context)
{
switch (context) {
case ARCH_CONTEXT_VARIANT_UNUSED:
return "Unused";
case ARCH_CONTEXT_VARIANT_FAST:
return "Fast";
case ARCH_CONTEXT_VARIANT_SLOW:
return "Slow";
case ARCH_CONTEXT_VARIANT_RUNNING:
return "Running";
default:
panic("Encountered unexpected arch_context variant: %u\n", context);
}
}

@ -1,11 +1,16 @@
#pragma once #pragma once
#include <assert.h> #include <assert.h>
#include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <ucontext.h> #include <ucontext.h>
#include <unistd.h> #include <unistd.h>
#include "arch/arch_context_t.h"
#include "arch/arch_context_variant_t.h"
#include "arch/reg_t.h"
#include "arch/ureg_t.h"
#include "software_interrupt.h" #include "software_interrupt.h"
/* /*
@ -17,48 +22,6 @@
* can be walked to resolve all symbols when the file is active * can be walked to resolve all symbols when the file is active
*/ */
typedef uint64_t reg_t;
/* Register context saved and restored on user-level, direct context switches. */
typedef enum
{
UREG_SP = 0,
UREG_IP = 1,
UREG_COUNT
} ureg_t;
/* The enum is compared directly in assembly, so maintain integral values! */
typedef enum
{
ARCH_CONTEXT_VARIANT_UNUSED = 0, /* Has not have saved a context */
ARCH_CONTEXT_VARIANT_FAST = 1, /* Saved a fastpath context */
ARCH_CONTEXT_VARIANT_SLOW = 2, /* Saved a slowpath context */
ARCH_CONTEXT_VARIANT_RUNNING = 3 /* Context is executing and content is out of date */
} arch_context_variant_t;
static inline char *
arch_context_variant_print(arch_context_variant_t context)
{
switch (context) {
case ARCH_CONTEXT_VARIANT_UNUSED:
return "Unused";
case ARCH_CONTEXT_VARIANT_FAST:
return "Fast";
case ARCH_CONTEXT_VARIANT_SLOW:
return "Slow";
case ARCH_CONTEXT_VARIANT_RUNNING:
return "Running";
default:
panic("Encountered unexpected arch_context variant: %u\n", context);
}
}
struct arch_context {
arch_context_variant_t variant;
reg_t regs[UREG_COUNT];
mcontext_t mctx;
};
/* /*
* This is the slowpath switch to a preempted sandbox! * This is the slowpath switch to a preempted sandbox!

@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
typedef uint64_t reg_t;

@ -0,0 +1,9 @@
#pragma once
/* Register context saved and restored on user-level, direct context switches. */
typedef enum
{
UREG_SP = 0,
UREG_IP = 1,
UREG_COUNT
} ureg_t;
Loading…
Cancel
Save