Syscall debugging helper
[akaros.git] / kern / include / process.h
index 15a752e..fa3a889 100644 (file)
@@ -60,6 +60,7 @@ extern spinlock_t pid_hash_lock;
 void proc_init(void);
 
 /* Process management: */
+struct proc *pid_nth(unsigned int n);
 error_t proc_alloc(struct proc **pp, struct proc *parent);
 void __proc_ready(struct proc *p);
 struct proc *proc_create(struct file *prog, char **argv, char **envp);
@@ -70,12 +71,14 @@ void proc_incref(struct proc *p, unsigned int val);
 void proc_decref(struct proc *p);
 void proc_run_s(struct proc *p);
 void __proc_run_m(struct proc *p);
+void __proc_startcore(struct proc *p, struct user_context *ctx);
 void proc_restartcore(void);
 void proc_destroy(struct proc *p);
 void proc_signal_parent(struct proc *child);
 int __proc_disown_child(struct proc *parent, struct proc *child);
 int proc_change_to_m(struct proc *p);
-void __proc_save_context_s(struct proc *p, struct trapframe *tf);
+void __proc_save_fpu_s(struct proc *p);
+void __proc_save_context_s(struct proc *p, struct user_context *ctx);
 void proc_yield(struct proc *SAFE p, bool being_nice);
 void proc_notify(struct proc *p, uint32_t vcoreid);
 void proc_wakeup(struct proc *p);
@@ -128,20 +131,18 @@ void clear_owning_proc(uint32_t coreid);
 void proc_tlbshootdown(struct proc *p, uintptr_t start, uintptr_t end);
 
 /* Kernel message handlers for process management */
-void __startcore(struct trapframe *tf, uint32_t srcid, long a0, long a1,
-                 long a2);
-void __set_curtf(struct trapframe *tf, uint32_t srcid, long a0, long a1,
-                 long a2);
-void __notify(struct trapframe *tf, uint32_t srcid, long a0, long a1, long a2);
-void __preempt(trapframe_t *tf, uint32_t srcid, long a0, long a1, long a2);
-void __death(struct trapframe *tf, uint32_t srcid, long a0, long a1, long a2);
-void __tlbshootdown(struct trapframe *tf, uint32_t srcid, long a0, long a1,
-                    long a2);
+void __startcore(uint32_t srcid, long a0, long a1, long a2);
+void __set_curctx(uint32_t srcid, long a0, long a1, long a2);
+void __notify(uint32_t srcid, long a0, long a1, long a2);
+void __preempt(uint32_t srcid, long a0, long a1, long a2);
+void __death(uint32_t srcid, long a0, long a1, long a2);
+void __tlbshootdown(uint32_t srcid, long a0, long a1, long a2);
 
 /* Arch Specific */
-void proc_init_trapframe(trapframe_t *SAFE tf, uint32_t vcoreid,
-                         uintptr_t entryp, uintptr_t stack_top);
-void proc_secure_trapframe(struct trapframe *tf);
+void proc_pop_ctx(struct user_context *ctx) __attribute__((noreturn));
+void proc_init_ctx(struct user_context *ctx, uint32_t vcoreid, uintptr_t entryp,
+                   uintptr_t stack_top, uintptr_t tls_desc);
+void proc_secure_ctx(struct user_context *ctx);
 void __abandon_core(void);
 
 /* Degubbing */