Browse Source

Invoke memtracer correctly for CBOs

pull/2297/head
Andrew Waterman 17 hours ago
parent
commit
e7a5c9b8f2
Failed to extract signature
  1. 12
      riscv/mmu.h

12
riscv/mmu.h

@ -229,11 +229,11 @@ public:
check_triggers(triggers::OPERATION_STORE, transformed_addr, false, blocksz); check_triggers(triggers::OPERATION_STORE, transformed_addr, false, blocksz);
reg_t paddr = translate(access_info, 1); reg_t paddr = translate(access_info, 1) - (transformed_addr & (blocksz - 1));
if (auto host_addr = sim->addr_to_mem(paddr)) { if (auto host_addr = sim->addr_to_mem(paddr)) {
if (tracer.interested_in_range(paddr, paddr + PGSIZE, STORE)) if (tracer.interested_in_range(paddr, paddr + blocksz, STORE))
tracer.trace(paddr - (transformed_addr & (blocksz - 1)), blocksz, STORE); tracer.trace(paddr, blocksz, STORE);
memset(host_addr - (transformed_addr & (blocksz - 1)), 0, blocksz); memset(host_addr, 0, blocksz);
} else { } else {
throw trap_store_access_fault((proc) ? proc->state.v : false, transformed_addr, 0, 0); throw trap_store_access_fault((proc) ? proc->state.v : false, transformed_addr, 0, 0);
} }
@ -245,9 +245,9 @@ public:
check_triggers(triggers::OPERATION_STORE, transformed_addr, false, blocksz); check_triggers(triggers::OPERATION_STORE, transformed_addr, false, blocksz);
convert_load_traps_to_store_traps({ convert_load_traps_to_store_traps({
const reg_t paddr = translate(access_info, 1); const reg_t paddr = translate(access_info, 1) - (transformed_addr & (blocksz - 1));
if (sim->reservable(paddr)) { if (sim->reservable(paddr)) {
if (tracer.interested_in_range(paddr, paddr + PGSIZE, LOAD)) if (tracer.interested_in_range(paddr, paddr + blocksz, LOAD))
tracer.clean_invalidate(paddr, blocksz, clean, inval); tracer.clean_invalidate(paddr, blocksz, clean, inval);
} else { } else {
throw trap_store_access_fault((proc) ? proc->state.v : false, transformed_addr, 0, 0); throw trap_store_access_fault((proc) ? proc->state.v : false, transformed_addr, 0, 0);

Loading…
Cancel
Save