Browse Source

Merge pull request #1511 from YenHaoChen/pr-stimecmp

stimecmp: perform menvcfg.STCE permission check when accessing vstimecmp in HS-mode
pull/1514/head
Andrew Waterman 2 years ago
committed by GitHub
parent
commit
90aa49f85b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      riscv/csrs.cc
  2. 1
      riscv/csrs.h

8
riscv/csrs.cc

@ -1535,7 +1535,7 @@ virtualized_stimecmp_csr_t::virtualized_stimecmp_csr_t(processor_t* const proc,
virtualized_csr_t(proc, orig, virt) {
}
void virtualized_stimecmp_csr_t::verify_permissions(insn_t insn, bool write) const {
void stimecmp_csr_t::verify_permissions(insn_t insn, bool write) const {
if (!(state->menvcfg->read() & MENVCFG_STCE)) {
// access to (v)stimecmp with MENVCFG.STCE = 0
if (state->prv < PRV_M)
@ -1549,7 +1549,11 @@ void virtualized_stimecmp_csr_t::verify_permissions(insn_t insn, bool write) con
throw trap_virtual_instruction(insn.bits());
}
virtualized_csr_t::verify_permissions(insn, write);
basic_csr_t::verify_permissions(insn, write);
}
void virtualized_stimecmp_csr_t::verify_permissions(insn_t insn, bool write) const {
orig_csr->verify_permissions(insn, write);
}
scountovf_csr_t::scountovf_csr_t(processor_t* const proc, const reg_t addr):

1
riscv/csrs.h

@ -780,6 +780,7 @@ class senvcfg_csr_t final: public envcfg_csr_t {
class stimecmp_csr_t: public basic_csr_t {
public:
stimecmp_csr_t(processor_t* const proc, const reg_t addr, const reg_t imask);
virtual void verify_permissions(insn_t insn, bool write) const override;
protected:
virtual bool unlogged_write(const reg_t val) noexcept override;
private:

Loading…
Cancel
Save