Browse Source

Only check instruction-fetch data triggers on complete instructions

Signed-off-by: Andrew Waterman <andrew@sifive.com>
pull/2357/head
Andrew Waterman 1 week ago
parent
commit
168f52e056
Failed to extract signature
  1. 10
      riscv/mmu.cc
  2. 6
      riscv/mmu.h

10
riscv/mmu.cc

@ -137,15 +137,7 @@ mmu_t::insn_parcel_t mmu_t::fetch_slow_path(reg_t vaddr)
refill_tlb(vaddr, paddr, (char*)host_addr, FETCH);
}
auto res = perform_intrapage_fetch(vaddr, host_addr, paddr);
if (!check_triggers_fetch)
return res;
check_triggers(triggers::OPERATION_EXECUTE, vaddr,
access_info.effective_virt, sizeof(insn_parcel_t), res);
return res;
return perform_intrapage_fetch(vaddr, host_addr, paddr);
}
static reg_t reg_from_bytes(size_t len, const uint8_t* bytes)

6
riscv/mmu.h

@ -545,6 +545,12 @@ private:
length = insn_length(insn);
}
if (check_triggers_fetch) {
auto access_info = generate_access_info(addr, FETCH, {});
check_triggers(triggers::OPERATION_EXECUTE, addr,
access_info.effective_virt, length, insn);
}
return std::make_tuple(insn, length);
}

Loading…
Cancel
Save