xscale: fix sw breakpoints for thumb; set bp immediately
commit35691065f72110d4490df3a127467ea9c04c70ca
authorMike Dunn <mikedunn@newsguy.com>
Mon, 13 Sep 2010 19:45:37 +0000 (13 12:45 -0700)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 13 Sep 2010 19:52:43 +0000 (13 21:52 +0200)
tree13fc14aac1b0028d8521c9eb6df18e42a9a33ca2
parent81e0d4438ec4b4112e28a9e90ba2fc1fb548310b
xscale: fix sw breakpoints for thumb; set bp immediately

Hi everyone,

Version 2 of this patch.  Code added to breakpoints.c was removed from previous
patch, and item 3 added, per discussion with Øyvind regarding error reporting.
Item 4 added, which I just noticed.

I tried to use a software breakpoint in thumb code on the xscale for the first
time recently, and was surprised to find that it didn't work.  The result was
this patch, which does four things:

1): fix trivial cut-n-paste error that caused thumb breakpoints to not work
2): call xscale_set_breakpoint() from xscale_add_breakpoint()
3): log error on data abort in xscale_write_memory()
4): fixed incorrect error code returned by xscale_set_breakpoint() when no
    breakpoint register is available; added comment

Item 2 not only makes the xscale breakpoint code consistent with other targets,
but also alerts the user immediately if an error occurs when writing the
breakpoint instruction to target memory (previously, xscale_set_breakpoint() was
not called until execution resumed).  Also, calling xscale_breakpoint_set() as
part of the call chain starting with handle_bp_command() and propagating the
return status back up the chain avoids the situation where OpenOCD "thinks" the
breakpoint is set when in reality an error ocurred.

Item 3 provides a helpful message for a common reason for failure to set sw
breakpoint.

This was thoroughly tested, mindful of the fact that breakpoint management is
somewhat dicey during single-stepping.

Comments and criticisms of course gratefully received.

Mike

Signed-off-by: Mike Dunn <mikedunn@newsguy.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/target/xscale.c