gdbserver: fix typo that broke read/write watchpoint

It looks like a bugfix from normal breakpoints was not
copied over.

Do not use clever mathematics and assumptions to convert from
GDB enum for break/watchpoints to OpenOCD enum.

Drop connection upon unknown breakpoint type, this code path
was not really considered by the previous code I think.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
__archive__
Øyvind Harboe 2010-01-11 09:22:08 +01:00
parent 6c75f5249c
commit 3e33393078
1 changed files with 8 additions and 2 deletions

View File

@ -1423,7 +1423,7 @@ int gdb_breakpoint_watchpoint_packet(struct connection *connection, struct targe
{ {
int type; int type;
enum breakpoint_type bp_type = BKPT_SOFT /* dummy init to avoid warning */; enum breakpoint_type bp_type = BKPT_SOFT /* dummy init to avoid warning */;
enum watchpoint_rw wp_type; enum watchpoint_rw wp_type = WPT_READ /* dummy init to avoid warning */;
uint32_t address; uint32_t address;
uint32_t size; uint32_t size;
char *separator; char *separator;
@ -1443,6 +1443,12 @@ int gdb_breakpoint_watchpoint_packet(struct connection *connection, struct targe
wp_type = WPT_READ; wp_type = WPT_READ;
else if (type == 4) /* access watchpoint */ else if (type == 4) /* access watchpoint */
wp_type = WPT_ACCESS; wp_type = WPT_ACCESS;
else
{
LOG_ERROR("invalid gdb watch/breakpoint type(%d), dropping connection", type);
return ERROR_SERVER_REMOTE_CLOSED;
}
if (gdb_breakpoint_override && ((bp_type == BKPT_SOFT)||(bp_type == BKPT_HARD))) if (gdb_breakpoint_override && ((bp_type == BKPT_SOFT)||(bp_type == BKPT_HARD)))
{ {
@ -1493,7 +1499,7 @@ int gdb_breakpoint_watchpoint_packet(struct connection *connection, struct targe
{ {
if (packet[0] == 'Z') if (packet[0] == 'Z')
{ {
if ((retval = watchpoint_add(target, address, size, type-2, 0, 0xffffffffu)) != ERROR_OK) if ((retval = watchpoint_add(target, address, size, wp_type, 0, 0xffffffffu)) != ERROR_OK)
{ {
if ((retval = gdb_error(connection, retval)) != ERROR_OK) if ((retval = gdb_error(connection, retval)) != ERROR_OK)
return retval; return retval;