[sim,pk] fixed minor pk bugs and trap codes
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Tue, 12 Apr 2011 08:42:20 +0000 (01:42 -0700)
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Tue, 12 Apr 2011 08:42:20 +0000 (01:42 -0700)
riscv/mmu.h
riscv/trap.h

index c61eb80af2fc94118f6e1a73f216eaf4f7a173c4..f7bd8ce8d526f089453abc9b1c6ad2a1d0904cf6 100644 (file)
@@ -52,14 +52,16 @@ private:
   size_t memsz;
   reg_t badvaddr;
 
-  void check_align(reg_t addr, int size, bool fetch)
+  void check_align(reg_t addr, int size, bool store, bool fetch)
   {
     if(addr & (size-1))
     {
       badvaddr = addr;
       if(fetch)
         throw trap_instruction_address_misaligned;
-      throw trap_data_address_misaligned;
+      if(store)
+        throw trap_store_address_misaligned;
+      throw trap_load_address_misaligned;
     }
   }
 
@@ -76,7 +78,7 @@ private:
 
   void check_align_and_bounds(reg_t addr, int size, bool store, bool fetch)
   {
-    check_align(addr, size, fetch);
+    check_align(addr, size, store, fetch);
     check_bounds(addr, size, store, fetch);
   }
 };
index 8424d80b9e66182feb59f9c25a656dc94e753396..698852c8b88c0410bdc3b8317c26f2ace6c499db 100644 (file)
@@ -10,7 +10,8 @@
   DECLARE_TRAP(interrupt), \
   DECLARE_TRAP(syscall), \
   DECLARE_TRAP(breakpoint), \
-  DECLARE_TRAP(data_address_misaligned), \
+  DECLARE_TRAP(load_address_misaligned), \
+  DECLARE_TRAP(store_address_misaligned), \
   DECLARE_TRAP(load_access_fault), \
   DECLARE_TRAP(store_access_fault), \
   DECLARE_TRAP(vector_disabled), \