Cut the translation block after translating a break insn. This avoids an issue where QEMU finds an illegal CRIS insn while the guest is returning through a signal return trampoline.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3997 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/target-cris/translate.c b/target-cris/translate.c
index 4150737..e653afd 100644
--- a/target-cris/translate.c
+++ b/target-cris/translate.c
@@ -71,6 +71,8 @@
 #define BUG() (gen_BUG(dc, __FILE__, __LINE__))
 #define BUG_ON(x) ({if (x) BUG();})
 
+#define DISAS_SWI 5
+
 /* Used by the decoder.  */
 #define EXTRACT_FIELD(src, start, end) \
             (((src) >> start) & ((1 << (end - start + 1)) - 1))
@@ -2112,6 +2114,7 @@
 			gen_op_movl_pc_T0();
 			/* Breaks start at 16 in the exception vector.  */
 			gen_op_break_im(dc->op1 + 16);
+			dc->is_jmp = DISAS_SWI;
 			break;
 		default:
 			printf ("op2=%x\n", dc->op2);
@@ -2332,7 +2335,8 @@
 	do
 	{
 		check_breakpoint(env, dc);
-		if (dc->is_jmp == DISAS_JUMP)
+		if (dc->is_jmp == DISAS_JUMP
+		    || dc->is_jmp == DISAS_SWI)
 			goto done;
 
 		if (search_pc) {
@@ -2404,6 +2408,7 @@
 				   to find the next TB */
 				tcg_gen_exit_tb(0);
 				break;
+			case DISAS_SWI:
 			case DISAS_TB_JUMP:
 				/* nothing more to generate */
 				break;