summary refs log tree commit diff stats
path: root/results/classifier/118/none/942659
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/118/none/942659')
-rw-r--r--results/classifier/118/none/94265978
1 files changed, 78 insertions, 0 deletions
diff --git a/results/classifier/118/none/942659 b/results/classifier/118/none/942659
new file mode 100644
index 00000000..b4603d15
--- /dev/null
+++ b/results/classifier/118/none/942659
@@ -0,0 +1,78 @@
+mistranslation: 0.713
+arm: 0.670
+semantic: 0.575
+architecture: 0.557
+kernel: 0.545
+device: 0.294
+assembly: 0.255
+socket: 0.171
+register: 0.157
+PID: 0.143
+virtual: 0.140
+x86: 0.140
+peripherals: 0.127
+graphic: 0.124
+ppc: 0.120
+performance: 0.116
+permissions: 0.095
+hypervisor: 0.091
+debug: 0.087
+vnc: 0.080
+user-level: 0.076
+risc-v: 0.073
+network: 0.065
+files: 0.064
+boot: 0.058
+VMM: 0.043
+TCG: 0.032
+i386: 0.029
+KVM: 0.024
+
+ARM: CORTEX M, PRIMASK does not disable interrupts
+
+qemu version 0.15.1
+but the same code is in qemu 1.0
+
+"CPSID I" does not disable interrupts for CORTEX M3
+
+
+if (interrupt_request & CPU_INTERRUPT_HARD
+                        && ((IS_M(env) && env->regs[15] < 0xfffffff0)
+                            || !(env->uncached_cpsr & CPSR_I))) {
+                        env->exception_index = EXCP_IRQ;
+                        do_interrupt(env);
+                        next_tb = 0;
+                    }
+
+
+do_interrupt() will be executed even if (env->uncached_cpsr & CPSR_I) == 1 , disable interrupt bit set.
+
+
+then changed to: 
+
+if (interrupt_request & CPU_INTERRUPT_HARD 
+                        && !(env->uncached_cpsr & CPSR_I)
+                        && (IS_M(env) ? env->regs[15] < 0xfffffff0: 1) ) {
+                        env->exception_index = EXCP_IRQ;
+                        do_interrupt(env);
+                        next_tb = 0;
+                    }
+
+works
+
+This change changes the behaviour for non-M-profile cores, which looks wrong.
+
+See discussion in this mailing list thread where a similar patch was suggested:
+ http://lists.gnu.org/archive/html/qemu-devel/2011-06/msg00500.html
+
+M profile interrupt handling is known-broken. I'm not accepting any patches in this area unless they come attached to a decent explanation of why they are the correct change to make and show some evidence of the whole problem having been considered.
+
+
+> This change changes the behaviour for non-M-profile cores
+
+...or maybe not: I was confused by the resemblance to that other patch. I still think one-line fixes are unlikely to be the right approach here, though.
+
+
+This long-standing bug has been fixed by the rewrite of the M-profile exception handling for QEMU 2.9.
+
+