don't dereference PC during trap entry
authorAndrew Waterman <waterman@eecs.berkeley.edu>
Tue, 15 May 2012 12:06:47 +0000 (05:06 -0700)
committerAndrew Waterman <waterman@eecs.berkeley.edu>
Tue, 15 May 2012 12:06:47 +0000 (05:06 -0700)
kern/arch/riscv/entry.S
kern/arch/riscv/ros/trapframe.h
kern/arch/riscv/trap.c
kern/arch/riscv/trap.h

index e9ac29d..6ffdabc 100644 (file)
@@ -183,16 +183,6 @@ trap_entry:
   mfpcr  x3,ASM_CR(PCR_CAUSE)        # cause
   STORE  x3,35*REGBYTES(x2)
 
-  # get faulting insn, if it wasn't a fetch-related trap
-  li    x5, CAUSE_MISALIGNED_FETCH
-  li    x6, CAUSE_FAULT_FETCH
-  beq   x3, x5, 1f
-  beq   x3, x6, 1f
-  lh    x3,0(x4)
-  lh    x4,2(x4)
-  sh    x3,  36*REGBYTES(x2)
-  sh    x4,2+36*REGBYTES(x2)
-1:
   li    s9, 0
   move  sp, x2
   move  a0, x2
index 8e99ef2..23092eb 100644 (file)
@@ -11,7 +11,6 @@ typedef struct trapframe
   uintptr_t epc;
   uintptr_t badvaddr;
   long cause;
-  uintptr_t insn;
 } trapframe_t;
 
 /* TODO: consider using a user-space specific trapframe, since they don't need
index b46e75a..7bc8f3a 100644 (file)
@@ -139,8 +139,8 @@ format_trapframe(trapframe_t *tf, char* buf, int bufsz)
                                        j < 3 ? ' ' : '\n');
        }
        len += snprintf(buf+len, bufsz-len,
-                       "sr %016lx pc %016lx va %016lx insn       %008x\n", tf->sr, tf->epc,
-                       tf->badvaddr, (uint32_t)tf->insn);
+                       "sr %016lx pc %016lx va %016lx\n", tf->sr, tf->epc,
+                       tf->badvaddr);
 
        buf[bufsz-1] = 0;
        return len;
index c6e0326..75b65cb 100644 (file)
@@ -2,9 +2,9 @@
 #define ROS_ARCH_TRAP_H
 
 #ifdef __riscv64
-# define SIZEOF_TRAPFRAME_T (37*8)
+# define SIZEOF_TRAPFRAME_T (36*8)
 #else
-# define SIZEOF_TRAPFRAME_T (37*4)
+# define SIZEOF_TRAPFRAME_T (36*4)
 #endif
 
 #ifndef __ASSEMBLER__