Add arch independent accessor for user ctx stack
authorKevin Klues <klueska@cs.berkeley.edu>
Tue, 10 Nov 2015 21:50:52 +0000 (13:50 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 16 Nov 2015 23:15:03 +0000 (15:15 -0800)
Signed-off-by: Kevin Klues <klueska@cs.berkeley.edu>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/include/riscv/vcore.h
user/parlib/include/x86/vcore32.h
user/parlib/include/x86/vcore64.h

index 1615292..4d6d3e3 100644 (file)
@@ -106,6 +106,11 @@ static inline void init_user_ctx(struct user_context *ctx, uint32_t entry_pt,
        u_tf->epc = entry_pt;
 }
 
+static inline uintptr_t get_user_ctx_stack(struct user_context *ctx)
+{
+       return ctx->tf.hw_tf.gpr[GPR_SP];
+}
+
 #define __vcore_id_on_entry \
 ({ \
        register int temp asm ("a0"); \
index a9ffd24..88f4de1 100644 (file)
@@ -314,6 +314,14 @@ static inline void init_user_ctx(struct user_context *ctx, uint32_t entry_pt,
        sw_tf->tf_fpucw = 0x037f;               /* x86 default FP CW */
 }
 
+static inline uintptr_t get_user_ctx_stack(struct user_context *ctx)
+{
+       if (ctx->type == ROS_HW_CTX)
+               return ctx->tf.hw_tf.tf_esp;
+       else
+               return ctx->tf.sw_tf.tf_esp;
+}
+
 // this is how we get our thread id on entry.
 #define __vcore_id_on_entry \
 ({ \
index 638e209..77efbb3 100644 (file)
@@ -353,6 +353,14 @@ static inline void init_user_ctx(struct user_context *ctx, uintptr_t entry_pt,
        sw_tf->tf_fpucw = 0x037f;               /* x86 default FP CW */
 }
 
+static inline uintptr_t get_user_ctx_stack(struct user_context *ctx)
+{
+       if (ctx->type == ROS_HW_CTX)
+               return ctx->tf.hw_tf.tf_rsp;
+       else
+               return ctx->tf.sw_tf.tf_rsp;
+}
+
 // this is how we get our thread id on entry.
 #define __vcore_id_on_entry \
 ({ \