summary refs log tree commit diff stats
path: root/results/classifier/105/instruction/1851939
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/105/instruction/1851939')
-rw-r--r--results/classifier/105/instruction/185193934
1 files changed, 34 insertions, 0 deletions
diff --git a/results/classifier/105/instruction/1851939 b/results/classifier/105/instruction/1851939
new file mode 100644
index 000000000..f4991d18e
--- /dev/null
+++ b/results/classifier/105/instruction/1851939
@@ -0,0 +1,34 @@
+instruction: 0.908
+mistranslation: 0.790
+semantic: 0.781
+device: 0.768
+other: 0.672
+network: 0.629
+graphic: 0.625
+socket: 0.600
+vnc: 0.479
+boot: 0.380
+KVM: 0.350
+assembly: 0.269
+
+RISC-V mstatus TSR bit not correctly implemented
+
+Hi,
+
+since qemu 4.1.0 the TSR bit in mstatus register is supported. But it does not allow for executing sret in m-mode.
+
+From the RISC-V specifications:
+"When TSR=1, attempts to execute SRET while executing in S-mode will raise an illegal instruction
+exception. When TSR=0, this operation is permitted in S-mode."
+
+This means an exception should only be raised when executing in S-mode, but not in M-mode, hence you should change the condition in helper_sret (target/riscv/op_helper.c) from:
+     if (env->priv_ver >= PRIV_VERSION_1_10_0 &&
+          get_field(env->mstatus, MSTATUS_TSR))
+to:
+     if (env->priv_ver >= PRIV_VERSION_1_10_0 &&
+          get_field(env->mstatus, MSTATUS_TSR) && !(env->priv >= PRV_M))
+
+Fixed here:
+https://git.qemu.org/?p=qemu.git;a=commitdiff;h=ed5abf46b3c4
+
+