qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] PPC32 Trace Exception and Trap instruction


From: Jason Wessel
Subject: [Qemu-devel] [PATCH] PPC32 Trace Exception and Trap instruction
Date: Wed, 27 Dec 2006 10:05:45 -0600
User-agent: Thunderbird 1.5.0.8 (Windows/20061025)

Please add this patch to CVS.
The patch has two purposes:

1) The NIP needs to be updated for a tw instruction. I found that when executing protected mode traps
   the PC was always set to the begining of the code
   generation block instead of the instruction the trap
   occurred on.

   The usual PPC breakpoint instruction is:
   7d 82 10 08 twge    r2,r2  (Trap when rA >= rB)

2) Single stepping was fixed up earlier in the year
   for using a debugger connected to the QEMU
   gdb stub.  Now it is enabled for connecting a
   runtime single stepping with the trace trap so you
   can use ptrace() or even debug KGDB.

signed-off-by: address@hidden

Thanks,
Jason.
Index: qemu/target-ppc/helper.c
===================================================================
--- qemu.orig/target-ppc/helper.c
+++ qemu/target-ppc/helper.c
@@ -1113,8 +1113,6 @@ void do_interrupt (CPUState *env)
         }
         goto store_next;
     case EXCP_TRACE: /* 0x0D00 */
-        /* XXX: TODO */
-        cpu_abort(env, "Trace exception is not implemented yet !\n");
         goto store_next;
     case EXCP_PERF: /* 0x0F00 */
         /* XXX: TODO */
Index: qemu/target-ppc/translate.c
===================================================================
--- qemu.orig/target-ppc/translate.c
+++ qemu/target-ppc/translate.c
@@ -1956,6 +1956,8 @@ GEN_HANDLER(tw, 0x1F, 0x04, 0xFF, 0x0000
 {
     gen_op_load_gpr_T0(rA(ctx->opcode));
     gen_op_load_gpr_T1(rB(ctx->opcode));
+    /* Update the nip since this might generate a trap exception */
+    gen_op_update_nip(ctx->nip);
     gen_op_tw(TO(ctx->opcode));
 }
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]