Browse Source

Remove physical address checks in sim_t

Processors are responsible for validating physical addresses; the bus
is only responsible for making some device lives at a given address.
pull/2037/head
Andrew Waterman 10 months ago
parent
commit
94beb3c026
  1. 12
      riscv/sim.cc

12
riscv/sim.cc

@ -337,22 +337,16 @@ void sim_t::set_procs_debug(bool value)
procs[i]->set_debug(value);
}
static bool paddr_ok(reg_t addr)
{
static_assert(MAX_PADDR_BITS == 8 * sizeof(addr));
return true;
}
bool sim_t::mmio_load(reg_t paddr, size_t len, uint8_t* bytes)
{
if (paddr + len < paddr || !paddr_ok(paddr + len - 1))
if (paddr + len < paddr)
return false;
return bus.load(paddr, len, bytes);
}
bool sim_t::mmio_store(reg_t paddr, size_t len, const uint8_t* bytes)
{
if (paddr + len < paddr || !paddr_ok(paddr + len - 1))
if (paddr + len < paddr)
return false;
return bus.store(paddr, len, bytes);
}
@ -403,8 +397,6 @@ void sim_t::set_rom()
}
char* sim_t::addr_to_mem(reg_t paddr) {
if (!paddr_ok(paddr))
return NULL;
auto desc = bus.find_device(paddr >> PGSHIFT << PGSHIFT, PGSIZE);
if (auto mem = dynamic_cast<abstract_mem_t*>(desc.second))
return mem->contents(paddr - desc.first);

Loading…
Cancel
Save