On 02/14/2017 06:33 AM, Pranith Kumar wrote:
On Mon, Feb 13, 2017 at 2:19 PM, Richard Henderson <r...@twiddle.net> wrote:
On 02/13/2017 11:10 PM, Alex Bennée wrote:

@@ -239,9 +240,16 @@ static void cpu_exec_step(CPUState *cpu)
                      1 | CF_NOCACHE | CF_IGNORE_ICOUNT);
     tb->orig_tb = NULL;
     tb_unlock();
-    /* execute the generated code */
-    trace_exec_tb_nocache(tb, pc);
-    cpu_tb_exec(cpu, tb);
+
+    cc->cpu_exec_enter(cpu);
+
+    if (sigsetjmp(cpu->jmp_env, 0) == 0) {
+        /* execute the generated code */
+        trace_exec_tb_nocache(tb, pc);
+        cpu_tb_exec(cpu, tb);
+    }


I don't understand this, since cpu_tb_exec has its own sigsetjmp.  Where is
the exception supposed to come from that escapes?

cpu_exec() has its own sigsetjmp, not cpu_tb_exec(). The exception is
the debug exception from the generated code. Without this new
sigsetjmp, it'll jump to cpu_exec() instead of coming back here.

Bah.  Sorry, ENOCOFFEE.

Reviewed-by: Richard Henderson <r...@twiddle.net>


r~


Reply via email to