don't store host pointers in soft TLB
[riscv-isa-sim.git] / riscv / mmu.cc
index 0cc10352a7aa3d9ce0165703e2f1177e078f5775..84c94592266fa84828c24172a08ae3322183cc7c 100644 (file)
@@ -27,7 +27,7 @@ void mmu_t::flush_tlb()
   flush_icache();
 }
 
-void* mmu_t::refill_tlb(reg_t addr, reg_t bytes, bool store, bool fetch)
+reg_t mmu_t::refill_tlb(reg_t addr, reg_t bytes, bool store, bool fetch)
 {
   reg_t idx = (addr >> PGSHIFT) % TLB_ENTRIES;
   reg_t expected_tag = addr & ~(PGSIZE-1);
@@ -60,10 +60,10 @@ void* mmu_t::refill_tlb(reg_t addr, reg_t bytes, bool store, bool fetch)
     tlb_load_tag[idx] = (pte_perm & PTE_UR) ? expected_tag : -1;
     tlb_store_tag[idx] = (pte_perm & PTE_UW) ? expected_tag : -1;
     tlb_insn_tag[idx] = (pte_perm & PTE_UX) ? expected_tag : -1;
-    tlb_data[idx] = (char*)mem + pgbase;
+    tlb_data[idx] = pgbase;
   }
 
-  return (char*)mem + paddr;
+  return paddr;
 }
 
 pte_t mmu_t::walk(reg_t addr)