Fix segfault when accessing bad memory addresses
[riscv-isa-sim.git] / riscv / sim.cc
index ebf94b6ad57d43a93b4e30d4e33db0241e1b81fb..edf0819369cc084fd63730fe373594cd28b96e5a 100644 (file)
@@ -317,8 +317,9 @@ void sim_t::make_dtb()
 
 char* sim_t::addr_to_mem(reg_t addr) {
   auto desc = bus.find_device(addr);
-  if (auto mem = dynamic_cast<mem_t*>(desc.device))
-    return mem->contents() + (addr - desc.base);
+  if (auto mem = dynamic_cast<mem_t*>(desc.second))
+    if (addr - desc.first < mem->size())
+      return mem->contents() + (addr - desc.first);
   return NULL;
 }