BXE: min->MIN, plus an spatch
[akaros.git] / kern / arch / x86 / trap32.h
index 9d286d0..d70a52b 100644 (file)
 #error "Do not include arch/trap32.h directly."
 #endif
 
-/* For kernel contexts, when we save/restore/move them around. */
-struct kernel_ctx {
-       struct hw_trapframe             hw_tf;
-};
-
 static inline bool in_kernel(struct hw_trapframe *hw_tf)
 {
        return (hw_tf->tf_cs & ~3) == GD_KT;
 }
 
-static inline void save_kernel_ctx(struct kernel_ctx *ctx)
+static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_eip;
+}
+
+static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
 {
-       /* Save the regs and the future esp. */
-       asm volatile("movl %%esp,(%0);       " /* save esp in it's slot*/
-                    "pushl %%eax;           " /* temp save eax */
-                    "leal 1f,%%eax;         " /* get future eip */
-                    "movl %%eax,(%1);       " /* store future eip */
-                    "popl %%eax;            " /* restore eax */
-                    "movl %2,%%esp;         " /* move to the beginning of the tf */
-                    "addl $0x20,%%esp;      " /* move to after the push_regs */
-                    "pushal;                " /* save regs */
-                    "addl $0x44,%%esp;      " /* move to esp slot */
-                    "popl %%esp;            " /* restore esp */
-                    "1:                     " /* where this tf will restart */
-                    : 
-                    : "r"(&ctx->hw_tf.tf_esp), "r"(&ctx->hw_tf.tf_eip),
-                      "g"(&ctx->hw_tf)
-                    : "eax", "memory", "cc");
+       return hw_tf->tf_regs.reg_ebp;
 }
 
 static inline uintptr_t x86_get_ip_hw(struct hw_trapframe *hw_tf)
@@ -85,6 +70,16 @@ static inline long x86_get_sysenter_arg1(struct hw_trapframe *hw_tf)
        return hw_tf->tf_regs.reg_esi;
 }
 
+static inline long x86_get_systrap_arg0(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_regs.reg_eax;
+}
+
+static inline long x86_get_systrap_arg1(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_regs.reg_edx;
+}
+
 static inline uintptr_t x86_get_stacktop_tss(struct taskstate *tss)
 {
        return tss->ts_esp0;