target-mips: fix single-stepping
authorNathan Froyd <froydnj@codesourcery.com>
Tue, 14 Jul 2009 15:33:11 +0000 (08:33 -0700)
committerAurelien Jarno <aurelien@aurel32.net>
Mon, 14 Sep 2009 17:34:12 +0000 (19:34 +0200)
commit7b270ef2a3f1429b3a97aab4f5a3332da61591b9
tree19e17d327cfde958be899ce9ffe3c9109f618131
parentb37fc148bb81b5b022846156a6cba266e6c23962
target-mips: fix single-stepping

Single-stepping branches on MIPS didn't work right, because the
generation of EXCP_DEBUG happened after the generation of the code to
exit the current TB.  That is, given the code:

    bne v0,v1,target
    nop
    ...
  target:
    addu v0,v0,v1
  1:

when you single-stepped through the NOP, execution wouldn't actually
halt until you reached the label `1'.

This patch corrects that and also changes single-stepping so that a
branch and its delay slot are executed as one instruction for the
purposes of single-stepping.  This behavior is comparable to what other
MIPS tools (e.g. MIPSsim with MDI) do.  GDB avoids placing breakpoints
in branch delay slots, so this change doesn't break anything on the GDB
side.

Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-mips/translate.c