diff --git a/include/platform/context.h b/include/platform/context.h index dbf5b94..dc6b27f 100644 --- a/include/platform/context.h +++ b/include/platform/context.h @@ -2,10 +2,25 @@ struct process_context_t; -void *initialize_context(void *task_entry); +/** + * @brief Allocates a new process context and initializes it with the given + * program counter. + * + * @param task_entry + * @return void* + */ +void *initialize_context(void *pc); void destroy_context(void *ctx); void save_context(struct process_context_t *context); void load_context(struct process_context_t *context); + +void set_context_pc(struct process_context_t *context, void *pc); + +void set_context_stack(struct process_context_t *context, void *stack); + +void set_context_flags(struct process_context_t *context, unsigned long flags); + +void set_context_return(struct process_context_t *context, unsigned long value); diff --git a/src/x86/context.c b/src/x86/context.c index bcb6f7f..0f37597 100644 --- a/src/x86/context.c +++ b/src/x86/context.c @@ -42,4 +42,24 @@ void destroy_context(void *ctx) void save_context(struct process_context_t *context) { store_active_context(context, sizeof(*context)); +} + +void set_context_pc(struct process_context_t *context, void *pc) +{ + context->eip = pc; +} + +void set_context_stack(struct process_context_t *context, void *stack) +{ + context->esp = stack; +} + +void set_context_flags(struct process_context_t *context, unsigned long flags) +{ + context->flags = flags; +} + +void set_context_return(struct process_context_t *context, unsigned long value) +{ + context->eax = value; } \ No newline at end of file