Move the get_user_ctx_* helpers to ros/ (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Sep 2016 15:45:08 +0000 (11:45 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 16 Sep 2016 18:35:09 +0000 (14:35 -0400)
Userspace can use these helpers too, they are fundamentally based on the
structs that are already in the kernel headers, and we might as well have
one copy of them.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/riscv/ros/trapframe.h
kern/arch/riscv/trap.h
kern/arch/x86/ros/trapframe.h
kern/arch/x86/trap64.h
kern/include/ros/trapframe.h
kern/src/trap.c

index b632529..b5025a6 100644 (file)
@@ -39,3 +39,67 @@ typedef struct ancillary_state
        uint64_t fpr[32];
        uint32_t fsr;
 } ancillary_state_t;
+
+static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
+{
+       #warning "fix me"
+       return 0;
+       //return hw_tf->tf_rip;
+}
+
+static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
+{
+       /* do you even have frame pointers?  this is used for backtrace, but if you
+        * don't use FPs, we'll need to change up our parameters or something. */
+       #warning "fix me"
+       return 0;
+       //return hw_tf->tf_rbp;
+}
+
+static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf)
+{
+       /* do you even have frame pointers?  this is used for backtrace, but if you
+        * don't use FPs, we'll need to change up our parameters or something. */
+       #warning "fix me"
+       return 0;
+       //return hw_tf->tf_rsp;
+}
+
+static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
+{
+       #warning "fix me"
+       return 0;
+       //return sw_tf->tf_rip;
+}
+
+static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
+{
+       #warning "fix me"
+       return 0;
+       //return sw_tf->tf_rbp;
+}
+
+static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf)
+{
+       #warning "fix me"
+       return 0;
+       //return sw_tf->tf_rsp;
+}
+
+static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf)
+{
+       #warning "fix me"
+       return 0;
+}
+
+static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf)
+{
+       #warning "fix me"
+       return 0;
+}
+
+static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf)
+{
+       #warning "fix me"
+       return 0;
+}
index 46fae1f..5034b86 100644 (file)
@@ -26,70 +26,6 @@ static inline bool in_kernel(struct hw_trapframe *hw_tf)
        return hw_tf->sr & SR_PS;
 }
 
-static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
-{
-       #warning "fix me"
-       return 0;
-       //return hw_tf->tf_rip;
-}
-
-static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
-{
-       /* do you even have frame pointers?  this is used for backtrace, but if you
-        * don't use FPs, we'll need to change up our parameters or something. */
-       #warning "fix me"
-       return 0;
-       //return hw_tf->tf_rbp;
-}
-
-static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf)
-{
-       /* do you even have frame pointers?  this is used for backtrace, but if you
-        * don't use FPs, we'll need to change up our parameters or something. */
-       #warning "fix me"
-       return 0;
-       //return hw_tf->tf_rsp;
-}
-
-static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
-{
-       #warning "fix me"
-       return 0;
-       //return sw_tf->tf_rip;
-}
-
-static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
-{
-       #warning "fix me"
-       return 0;
-       //return sw_tf->tf_rbp;
-}
-
-static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf)
-{
-       #warning "fix me"
-       return 0;
-       //return sw_tf->tf_rsp;
-}
-
-static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf)
-{
-       #warning "fix me"
-       return 0;
-}
-
-static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf)
-{
-       #warning "fix me"
-       return 0;
-}
-
-static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf)
-{
-       #warning "fix me"
-       return 0;
-}
-
 static inline void __attribute__((always_inline))
 set_stack_pointer(uintptr_t sp)
 {
index cac80d6..68d3983 100644 (file)
 
 #include <ros/arch/trapframe64.h>
 
+static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_rip;
+}
+
+static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_rbp;
+}
+
+static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf)
+{
+       return hw_tf->tf_rsp;
+}
+
+static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
+{
+       return sw_tf->tf_rip;
+}
+
+static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
+{
+       return sw_tf->tf_rbp;
+}
+
+static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf)
+{
+       return sw_tf->tf_rsp;
+}
+
+static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf)
+{
+       return vm_tf->tf_rip;
+}
+
+static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf)
+{
+       return vm_tf->tf_rbp;
+}
+
+static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf)
+{
+       return vm_tf->tf_rsp;
+}
+
 /* FP state and whatever else the kernel won't muck with automatically.  For
  * now, it's the Non-64-bit-mode layout of FP and XMM registers, as used by
  * FXSAVE and FXRSTOR.  Other modes will require a union on a couple entries.
index 6475e2e..c6977eb 100644 (file)
@@ -20,51 +20,6 @@ static inline bool in_kernel(struct hw_trapframe *hw_tf)
        return (hw_tf->tf_cs & ~3) == GD_KT;
 }
 
-static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
-{
-       return hw_tf->tf_rip;
-}
-
-static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
-{
-       return hw_tf->tf_rbp;
-}
-
-static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf)
-{
-       return hw_tf->tf_rsp;
-}
-
-static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
-{
-       return sw_tf->tf_rip;
-}
-
-static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
-{
-       return sw_tf->tf_rbp;
-}
-
-static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf)
-{
-       return sw_tf->tf_rsp;
-}
-
-static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf)
-{
-       return vm_tf->tf_rip;
-}
-
-static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf)
-{
-       return vm_tf->tf_rbp;
-}
-
-static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf)
-{
-       return vm_tf->tf_rsp;
-}
-
 static inline void x86_advance_ip(struct hw_trapframe *hw_tf, size_t bytes)
 {
        hw_tf->tf_rip += bytes;
index 9b03d8e..28251a1 100644 (file)
@@ -18,3 +18,42 @@ struct user_context {
                struct vm_trapframe             vm_tf;
        } tf;
 };
+
+static inline uintptr_t get_user_ctx_pc(struct user_context *ctx)
+{
+       switch (ctx->type) {
+       case ROS_HW_CTX:
+               return get_hwtf_pc(&ctx->tf.hw_tf);
+       case ROS_SW_CTX:
+               return get_swtf_pc(&ctx->tf.sw_tf);
+       case ROS_VM_CTX:
+               return get_vmtf_pc(&ctx->tf.vm_tf);
+       }
+       return 0xf00baa;
+}
+
+static inline uintptr_t get_user_ctx_fp(struct user_context *ctx)
+{
+       switch (ctx->type) {
+       case ROS_HW_CTX:
+               return get_hwtf_fp(&ctx->tf.hw_tf);
+       case ROS_SW_CTX:
+               return get_swtf_fp(&ctx->tf.sw_tf);
+       case ROS_VM_CTX:
+               return get_vmtf_fp(&ctx->tf.vm_tf);
+       }
+       return 0xf00baa;
+}
+
+static inline uintptr_t get_user_ctx_sp(struct user_context *ctx)
+{
+       switch (ctx->type) {
+       case ROS_HW_CTX:
+               return get_hwtf_sp(&ctx->tf.hw_tf);
+       case ROS_SW_CTX:
+               return get_swtf_sp(&ctx->tf.sw_tf);
+       case ROS_VM_CTX:
+               return get_vmtf_sp(&ctx->tf.vm_tf);
+       }
+       return 0xf00baa;
+}
index 02abbe1..83d4a58 100644 (file)
@@ -94,48 +94,6 @@ void reflect_unhandled_trap(unsigned int trap_nr, unsigned int err,
        }
 }
 
-uintptr_t get_user_ctx_pc(struct user_context *ctx)
-{
-       switch (ctx->type) {
-       case ROS_HW_CTX:
-               return get_hwtf_pc(&ctx->tf.hw_tf);
-       case ROS_SW_CTX:
-               return get_swtf_pc(&ctx->tf.sw_tf);
-       case ROS_VM_CTX:
-               return get_vmtf_pc(&ctx->tf.vm_tf);
-       default:
-               panic("Bad context type %d for ctx %p\n", ctx->type, ctx);
-       }
-}
-
-uintptr_t get_user_ctx_fp(struct user_context *ctx)
-{
-       switch (ctx->type) {
-       case ROS_HW_CTX:
-               return get_hwtf_fp(&ctx->tf.hw_tf);
-       case ROS_SW_CTX:
-               return get_swtf_fp(&ctx->tf.sw_tf);
-       case ROS_VM_CTX:
-               return get_vmtf_fp(&ctx->tf.vm_tf);
-       default:
-               panic("Bad context type %d for ctx %p\n", ctx->type, ctx);
-       }
-}
-
-uintptr_t get_user_ctx_sp(struct user_context *ctx)
-{
-       switch (ctx->type) {
-       case ROS_HW_CTX:
-               return get_hwtf_sp(&ctx->tf.hw_tf);
-       case ROS_SW_CTX:
-               return get_swtf_sp(&ctx->tf.sw_tf);
-       case ROS_VM_CTX:
-               return get_vmtf_sp(&ctx->tf.vm_tf);
-       default:
-               panic("Bad context type %d for ctx %p\n", ctx->type, ctx);
-       }
-}
-
 /* Helper, copies the current context to to_ctx. */
 void copy_current_ctx_to(struct user_context *to_ctx)
 {