Add a get_stack_pointer() helper to parlib
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 1 Apr 2016 19:42:03 +0000 (15:42 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 5 Apr 2016 19:42:18 +0000 (15:42 -0400)
I went with the same naming convention as set_stack_pointer.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/include/parlib/riscv/arch.h
user/parlib/include/parlib/x86/arch.h

index 143306e..9948823 100644 (file)
@@ -16,6 +16,14 @@ set_stack_pointer(void* sp)
        asm volatile ("move sp, %0" : : "r"(sp) : "memory");
 }
 
+static inline unsigned long get_stack_pointer(void)
+{
+       unsigned long sp;
+
+       asm volatile("move %0, sp" : "=r"(sp));
+       return sp;
+}
+
 static __inline void
 breakpoint(void)
 {
index 5f80938..58b2e4e 100644 (file)
@@ -41,6 +41,14 @@ set_stack_pointer(void *sp)
        asm volatile("mov %0,%%"X86_REG_SP"" : : "r"(sp) : "memory", X86_REG_SP);
 }
 
+static inline unsigned long get_stack_pointer(void)
+{
+       unsigned long sp;
+
+       asm volatile("mov %%"X86_REG_SP",%0" : "=r"(sp));
+       return sp;
+}
+
 static inline void breakpoint(void)
 {
        asm volatile("int3");