summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <pedro@codesourcery.com>2009-06-25 22:13:52 +0000
committerPedro Alves <pedro@codesourcery.com>2009-06-25 22:13:52 +0000
commitcaa5e412314b510ca5b8b0b33e410f66196ac4b0 (patch)
tree5095f7c65d5e91134950e334615cb422302b099e
parent2137e6aadb0a311b8aa4d9500d1b1e154d18794e (diff)
downloadgdb-caa5e412314b510ca5b8b0b33e410f66196ac4b0.tar.gz
* 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.
-rw-r--r--gdb/gdbserver/ChangeLog21
-rw-r--r--gdb/gdbserver/linux-crisv32-low.c8
-rw-r--r--gdb/gdbserver/linux-low.c21
-rw-r--r--gdb/gdbserver/linux-low.h7
-rw-r--r--gdb/gdbserver/server.c50
-rw-r--r--gdb/gdbserver/target.h6
6 files changed, 62 insertions, 51 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index a43a86fd57e..8cb2d92f499 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,24 @@
+2009-06-25 Pedro Alves <pedro@codesourcery.com>
+
+ * 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 <muller@ics.u-strasbg.fr>
* 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 0838b657713..25304e5ec26 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 7ff112e5c77..9f325181391 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 a23945ad07e..8369db912d1 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 01928c9a6fe..76c2e0ec550 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 5ca63901ab2..5fdfee312a8 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. */