Add flags that VMs need. But many other things do as well.
[akaros.git] / kern / arch / x86 / trap32.h
index 9d286d0..e56ed11 100644 (file)
@@ -27,6 +27,7 @@ static inline bool in_kernel(struct hw_trapframe *hw_tf)
 static inline void save_kernel_ctx(struct kernel_ctx *ctx)
 {
        /* Save the regs and the future esp. */
+       /* Careful when updating; %0, %1, and %2 are not listed as clobbers */
        asm volatile("movl %%esp,(%0);       " /* save esp in it's slot*/
                     "pushl %%eax;           " /* temp save eax */
                     "leal 1f,%%eax;         " /* get future eip */
@@ -85,6 +86,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;
@@ -96,4 +107,14 @@ static inline void x86_set_stacktop_tss(struct taskstate *tss, uintptr_t top)
        tss->ts_ss0 = GD_KD;
 }
 
+static inline uintptr_t x86_get_hwtf_pc(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_eip;
+}
+
+static inline uintptr_t x86_get_hwtf_fp(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_regs.reg_ebp;
+}
+
 #endif /* ROS_KERN_ARCH_TRAP32_H */