diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index a43a86fd57..8cb2d92f49 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,24 @@ +2009-06-25 Pedro Alves + + * server.c (process_serial_event): Re-return unsupported, not + error, if the type isn't recognized. Re-allow supporting only + insert or remove packets. Also call require_running for + breakpoints. Add missing break statement to default case. Tidy. + * target.h (struct target_ops): Rename insert_watchpoint to + insert_point, and remove_watchpoint to remove_point. + + * linux-low.h (struct linux_target_ops): Likewise. + * linux-low.c (linux_insert_watchpoint): Rename to ... + (linux_insert_point): ... this. Adjust. + (linux_remove_watchpoint): Rename to ... + (linux_remove_point): ... this. Adjust. + (linux_target_ops): Adjust. + * linux-crisv32-low.c (cris_insert_watchpoint): Rename to ... + (cris_insert_point): ... this. + (cris_remove_watchpoint): Rename to ... + (cris_remove_point): ... this. + (the_low_target): Adjust. + 2009-06-24 Pierre Muller * server.c (handle_v_kill): Pass signal_pid to diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c index 0838b65771..25304e5ec2 100644 --- a/gdb/gdbserver/linux-crisv32-low.c +++ b/gdb/gdbserver/linux-crisv32-low.c @@ -137,7 +137,7 @@ cris_write_data_breakpoint (int bp, unsigned long start, unsigned long end) } static int -cris_insert_watchpoint (char type, CORE_ADDR addr, int len) +cris_insert_point (char type, CORE_ADDR addr, int len) { int bp; unsigned long bp_ctrl; @@ -220,7 +220,7 @@ cris_insert_watchpoint (char type, CORE_ADDR addr, int len) } static int -cris_remove_watchpoint (char type, CORE_ADDR addr, int len) +cris_remove_point (char type, CORE_ADDR addr, int len) { int bp; unsigned long bp_ctrl; @@ -375,8 +375,8 @@ struct linux_target_ops the_low_target = { cris_reinsert_addr, 0, cris_breakpoint_at, - cris_insert_watchpoint, - cris_remove_watchpoint, + cris_insert_point, + cris_remove_point, cris_stopped_by_watchpoint, cris_stopped_data_address, }; diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 7ff112e5c7..9f32518139 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -2671,24 +2671,25 @@ linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len) return n; } -/* These watchpoint related wrapper functions simply pass on the function call - if the target has registered a corresponding function. */ +/* These breakpoint and watchpoint related wrapper functions simply + pass on the function call if the target has registered a + corresponding function. */ static int -linux_insert_watchpoint (char type, CORE_ADDR addr, int len) +linux_insert_point (char type, CORE_ADDR addr, int len) { - if (the_low_target.insert_watchpoint != NULL) - return the_low_target.insert_watchpoint (type, addr, len); + if (the_low_target.insert_point != NULL) + return the_low_target.insert_point (type, addr, len); else /* Unsupported (see target.h). */ return 1; } static int -linux_remove_watchpoint (char type, CORE_ADDR addr, int len) +linux_remove_point (char type, CORE_ADDR addr, int len) { - if (the_low_target.remove_watchpoint != NULL) - return the_low_target.remove_watchpoint (type, addr, len); + if (the_low_target.remove_point != NULL) + return the_low_target.remove_point (type, addr, len); else /* Unsupported (see target.h). */ return 1; @@ -3030,8 +3031,8 @@ static struct target_ops linux_target_ops = { linux_look_up_symbols, linux_request_interrupt, linux_read_auxv, - linux_insert_watchpoint, - linux_remove_watchpoint, + linux_insert_point, + linux_remove_point, linux_stopped_by_watchpoint, linux_stopped_data_address, #if defined(__UCLIBC__) && defined(HAS_NOMMU) diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h index a23945ad07..8369db912d 100644 --- a/gdb/gdbserver/linux-low.h +++ b/gdb/gdbserver/linux-low.h @@ -80,9 +80,10 @@ struct linux_target_ops int decr_pc_after_break; int (*breakpoint_at) (CORE_ADDR pc); - /* Watchpoint related functions. See target.h for comments. */ - int (*insert_watchpoint) (char type, CORE_ADDR addr, int len); - int (*remove_watchpoint) (char type, CORE_ADDR addr, int len); + /* Breakpoint and watchpoint related functions. See target.h for + comments. */ + int (*insert_point) (char type, CORE_ADDR addr, int len); + int (*remove_point) (char type, CORE_ADDR addr, int len); int (*stopped_by_watchpoint) (void); CORE_ADDR (*stopped_data_address) (void); diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 01928c9a6f..76c2e0ec55 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -2383,38 +2383,26 @@ process_serial_event (void) int len = strtol (lenptr + 1, &dataptr, 16); char type = own_buf[1]; int res; - const int insert_ = ch == 'Z'; + const int insert = ch == 'Z'; - /* Type: '0' - software-breakpoint - '1' - hardware-breakpoint - '2' - write watchpoint - '3' - read watchpoint - '4' - access watchpoint */ - - if (the_target->insert_watchpoint == NULL - || the_target->remove_watchpoint == NULL) - res = 1; /* Not supported. */ - else - switch (type) - { - case '2': - /* Fallthrough. */ - case '3': - /* Fallthrough. */ - case '4': - require_running (own_buf); - /* Fallthrough. */ - case '0': - /* Fallthrough. */ - case '1': - res = insert_ ? (*the_target->insert_watchpoint) (type, addr, - len) - : (*the_target->remove_watchpoint) (type, addr, - len); - break; - default: - res = -1; /* Unrecognized type. */ - } + /* Default to unrecognized/unsupported. */ + res = 1; + switch (type) + { + case '0': /* software-breakpoint */ + case '1': /* hardware-breakpoint */ + case '2': /* write watchpoint */ + case '3': /* read watchpoint */ + case '4': /* access watchpoint */ + require_running (own_buf); + if (insert && the_target->insert_point != NULL) + res = (*the_target->insert_point) (type, addr, len); + else if (!insert && the_target->remove_point != NULL) + res = (*the_target->remove_point) (type, addr, len); + break; + default: + break; + } if (res == 0) write_ok (own_buf); diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h index 5ca63901ab..5fdfee312a 100644 --- a/gdb/gdbserver/target.h +++ b/gdb/gdbserver/target.h @@ -213,7 +213,7 @@ struct target_ops int (*read_auxv) (CORE_ADDR offset, unsigned char *myaddr, unsigned int len); - /* Insert and remove a hardware watchpoint. + /* Insert and remove a break or watchpoint. Returns 0 on success, -1 on failure and 1 on unsupported. The type is coded as follows: '0' - software-breakpoint @@ -222,8 +222,8 @@ struct target_ops '3' - read watchpoint '4' - access watchpoint */ - int (*insert_watchpoint) (char type, CORE_ADDR addr, int len); - int (*remove_watchpoint) (char type, CORE_ADDR addr, int len); + int (*insert_point) (char type, CORE_ADDR addr, int len); + int (*remove_point) (char type, CORE_ADDR addr, int len); /* Returns 1 if target was stopped due to a watchpoint hit, 0 otherwise. */