Arch specific PC/IP and FP/BP helpers
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 9 Oct 2013 19:12:04 +0000 (12:12 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 02:23:22 +0000 (18:23 -0800)
Ultimately, we'll settle on read_pc and read_fp.

kern/arch/riscv/kdebug.h
kern/arch/riscv/riscv.h
kern/arch/x86/x86.h

index 4d13768..2320ddc 100644 (file)
@@ -16,6 +16,7 @@
  * site.  Returns 0 when we can't jump back any farther. */
 static inline uintptr_t get_caller_pc(void)
 {
+#warning Returning PC instead of caller pc
        return read_pc();
 }
 
index c23c962..23aa8fe 100644 (file)
@@ -23,6 +23,14 @@ read_pc(void)
        return pc;
 }
 
+static inline uintptr_t
+read_bp(void)
+{
+       /* frame pointer.  yes, read_bp is a shitty name.  i'll change all of them
+        * to read_fp when you read this and implement the function.  =) */
+       return 0;
+}
+
 static __inline void
 send_ipi(uint32_t who, uint8_t vector)
 {
index ec459ae..5eb1fe3 100644 (file)
@@ -108,7 +108,7 @@ static inline unsigned long read_flags(void) __attribute__((always_inline));
 static inline void write_eflags(unsigned long eflags)
               __attribute__((always_inline));
 static inline unsigned long read_bp(void) __attribute__((always_inline));
-static inline unsigned long read_ip(void) __attribute__((always_inline));
+static inline unsigned long read_pc(void) __attribute__((always_inline));
 static inline unsigned long read_sp(void) __attribute__((always_inline));
 static inline void cpuid(uint32_t info1, uint32_t info2, uint32_t *eaxp,
                          uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
@@ -284,7 +284,7 @@ static inline unsigned long read_bp(void)
        return bp;
 }
 
-static inline unsigned long read_ip(void)
+static inline unsigned long read_pc(void)
 {
        unsigned long ip;
        asm volatile("call 1f; 1: pop %0" : "=r"(ip));