Browse Source
Merge pull request #1675 from chihminchao/cfi-fix
zicflip: fix [ms]ret behavior
pull/1684/head
Andrew Waterman
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
2 additions and
2 deletions
-
riscv/insns/mret.h
-
riscv/insns/sret.h
|
|
|
@ -11,8 +11,8 @@ s = set_field(s, MSTATUS_MPP, p->extension_enabled('U') ? PRV_U : PRV_M); |
|
|
|
s = set_field(s, MSTATUS_MPV, 0); |
|
|
|
if (ZICFILP_xLPE(prev_virt, prev_prv)) { |
|
|
|
STATE.elp = static_cast<elp_t>(get_field(s, MSTATUS_MPELP)); |
|
|
|
s = set_field(s, MSTATUS_MPELP, elp_t::NO_LP_EXPECTED); |
|
|
|
} |
|
|
|
s = set_field(s, MSTATUS_MPELP, elp_t::NO_LP_EXPECTED); |
|
|
|
STATE.mstatus->write(s); |
|
|
|
if (STATE.mstatush) STATE.mstatush->write(s >> 32); // log mstatush change
|
|
|
|
p->set_privilege(prev_prv, prev_virt); |
|
|
|
|
|
|
|
@ -25,7 +25,7 @@ if (!STATE.v) { |
|
|
|
} |
|
|
|
if (ZICFILP_xLPE(prev_virt, prev_prv)) { |
|
|
|
STATE.elp = static_cast<elp_t>(get_field(s, SSTATUS_SPELP)); |
|
|
|
s = set_field(s, SSTATUS_SPELP, elp_t::NO_LP_EXPECTED); |
|
|
|
} |
|
|
|
s = set_field(s, SSTATUS_SPELP, elp_t::NO_LP_EXPECTED); |
|
|
|
STATE.sstatus->write(s); |
|
|
|
p->set_privilege(prev_prv, prev_virt); |
|
|
|
|