aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r--gdb/gdbserver/ChangeLog20
-rw-r--r--gdb/gdbserver/linux-low.c11
-rw-r--r--gdb/gdbserver/lynx-low.c5
-rw-r--r--gdb/gdbserver/nto-low.c5
-rw-r--r--gdb/gdbserver/server.c12
-rw-r--r--gdb/gdbserver/spu-low.c2
-rw-r--r--gdb/gdbserver/target.c8
-rw-r--r--gdb/gdbserver/target.h13
-rw-r--r--gdb/gdbserver/win32-low.c5
9 files changed, 51 insertions, 30 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 25c01ff..7831b85 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,25 @@
2015-09-15 Yao Qi <yao.qi@linaro.org>
+ * linux-low.c (linux_supports_conditional_breakpoints): Rename
+ it to ...
+ (linux_supports_hardware_single_step): ... New function.
+ (linux_target_ops): Update.
+ * lynx-low.c (lynx_target_ops): Set field
+ supports_hardware_single_step to target_can_do_hardware_single_step.
+ * nto-low.c (nto_target_ops): Likewise.
+ * spu-low.c (spu_target_ops): Likewise.
+ * win32-low.c (win32_target_ops): Likewise.
+ * target.c (target_can_do_hardware_single_step): New function.
+ * target.h (struct target_ops) <supports_conditional_breakpoints>:
+ Remove. <supports_hardware_single_step>: New field.
+ (target_supports_conditional_breakpoints): Remove.
+ (target_supports_hardware_single_step): New macro.
+ (target_can_do_hardware_single_step): Declare.
+ * server.c (handle_query): Use target_supports_hardware_single_step
+ instead of target_supports_conditional_breakpoints.
+
+2015-09-15 Yao Qi <yao.qi@linaro.org>
+
* linux-aarch64-low.c (aarch64_linux_siginfo_fixup): New
function.
(struct linux_target_ops the_low_target): Install
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index aa4c868..f5b64ab 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -5614,16 +5614,11 @@ linux_supports_stopped_by_hw_breakpoint (void)
return USE_SIGTRAP_SIGINFO;
}
-/* Implement the supports_conditional_breakpoints target_ops
- method. */
+/* Implement the supports_hardware_single_step target_ops method. */
static int
-linux_supports_conditional_breakpoints (void)
+linux_supports_hardware_single_step (void)
{
- /* GDBserver needs to step over the breakpoint if the condition is
- false. GDBserver software single step is too simple, so disable
- conditional breakpoints if the target doesn't have hardware single
- step. */
return can_hardware_single_step ();
}
@@ -6964,7 +6959,7 @@ static struct target_ops linux_target_ops = {
linux_supports_stopped_by_sw_breakpoint,
linux_stopped_by_hw_breakpoint,
linux_supports_stopped_by_hw_breakpoint,
- linux_supports_conditional_breakpoints,
+ linux_supports_hardware_single_step,
linux_stopped_by_watchpoint,
linux_stopped_data_address,
#if defined(__UCLIBC__) && defined(HAS_NOMMU) \
diff --git a/gdb/gdbserver/lynx-low.c b/gdb/gdbserver/lynx-low.c
index b722930..0582399 100644
--- a/gdb/gdbserver/lynx-low.c
+++ b/gdb/gdbserver/lynx-low.c
@@ -747,10 +747,7 @@ static struct target_ops lynx_target_ops = {
NULL, /* supports_stopped_by_sw_breakpoint */
NULL, /* stopped_by_hw_breakpoint */
NULL, /* supports_stopped_by_hw_breakpoint */
- /* Although lynx has hardware single step, still disable this
- feature for lynx, because it is implemented in linux-low.c instead
- of in generic code. */
- NULL, /* supports_conditional_breakpoints */
+ target_can_do_hardware_single_step,
NULL, /* stopped_by_watchpoint */
NULL, /* stopped_data_address */
NULL, /* read_offsets */
diff --git a/gdb/gdbserver/nto-low.c b/gdb/gdbserver/nto-low.c
index 19f492f..fa216a9 100644
--- a/gdb/gdbserver/nto-low.c
+++ b/gdb/gdbserver/nto-low.c
@@ -950,10 +950,7 @@ static struct target_ops nto_target_ops = {
NULL, /* supports_stopped_by_sw_breakpoint */
NULL, /* stopped_by_hw_breakpoint */
NULL, /* supports_stopped_by_hw_breakpoint */
- /* Although nto has hardware single step, still disable this
- feature for not, because it is implemented in linux-low.c instead
- of in generic code. */
- NULL, /* supports_conditional_breakpoints */
+ target_can_do_hardware_single_step,
nto_stopped_by_watchpoint,
nto_stopped_data_address,
NULL, /* nto_read_offsets */
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 9aa8a3f..1481c47 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -2202,9 +2202,15 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
strcat (own_buf, ";tracenz+");
}
- /* Support target-side breakpoint conditions and commands. */
- if (target_supports_conditional_breakpoints ())
- strcat (own_buf, ";ConditionalBreakpoints+");
+ if (target_supports_hardware_single_step ())
+ {
+ /* Support target-side breakpoint conditions and commands.
+ GDBserver needs to step over the breakpoint if the condition
+ is false. GDBserver software single step is too simple, so
+ disable conditional breakpoints if the target doesn't have
+ hardware single step. */
+ strcat (own_buf, ";ConditionalBreakpoints+");
+ }
strcat (own_buf, ";BreakpointCommands+");
if (target_supports_agent ())
diff --git a/gdb/gdbserver/spu-low.c b/gdb/gdbserver/spu-low.c
index 878ed82..074417a 100644
--- a/gdb/gdbserver/spu-low.c
+++ b/gdb/gdbserver/spu-low.c
@@ -666,7 +666,7 @@ static struct target_ops spu_target_ops = {
NULL, /* supports_stopped_by_sw_breakpoint */
NULL, /* stopped_by_hw_breakpoint */
NULL, /* supports_stopped_by_hw_breakpoint */
- NULL, /* supports_conditional_breakpoints */
+ NULL, /* supports_hardware_single_step */
NULL,
NULL,
NULL,
diff --git a/gdb/gdbserver/target.c b/gdb/gdbserver/target.c
index 7540f2f..17ff7a6 100644
--- a/gdb/gdbserver/target.c
+++ b/gdb/gdbserver/target.c
@@ -216,3 +216,11 @@ kill_inferior (int pid)
return (*the_target->kill) (pid);
}
+
+/* Target can do hardware single step. */
+
+int
+target_can_do_hardware_single_step (void)
+{
+ return 1;
+}
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h
index aea3d15..a2842b4 100644
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -225,9 +225,8 @@ struct target_ops
HW breakpoint triggering. */
int (*supports_stopped_by_hw_breakpoint) (void);
- /* Returns true if the target can evaluate conditions of
- breakpoints. */
- int (*supports_conditional_breakpoints) (void);
+ /* Returns true if the target can do hardware single step. */
+ int (*supports_hardware_single_step) (void);
/* Returns 1 if target was stopped due to a watchpoint hit, 0 otherwise. */
@@ -616,9 +615,9 @@ int kill_inferior (int);
(the_target->supports_stopped_by_hw_breakpoint ? \
(*the_target->supports_stopped_by_hw_breakpoint) () : 0)
-#define target_supports_conditional_breakpoints() \
- (the_target->supports_conditional_breakpoints ? \
- (*the_target->supports_conditional_breakpoints) () : 0)
+#define target_supports_hardware_single_step() \
+ (the_target->supports_hardware_single_step ? \
+ (*the_target->supports_hardware_single_step) () : 0)
#define target_stopped_by_hw_breakpoint() \
(the_target->stopped_by_hw_breakpoint ? \
@@ -656,4 +655,6 @@ int set_desired_thread (int id);
const char *target_pid_to_str (ptid_t);
+int target_can_do_hardware_single_step (void);
+
#endif /* TARGET_H */
diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c
index 85cc040..550a8e9 100644
--- a/gdb/gdbserver/win32-low.c
+++ b/gdb/gdbserver/win32-low.c
@@ -1810,10 +1810,7 @@ static struct target_ops win32_target_ops = {
NULL, /* supports_stopped_by_sw_breakpoint */
NULL, /* stopped_by_hw_breakpoint */
NULL, /* supports_stopped_by_hw_breakpoint */
- /* Although win32-i386 has hardware single step, still disable this
- feature for win32, because it is implemented in linux-low.c instead
- of in generic code. */
- NULL, /* supports_conditional_breakpoints */
+ target_can_do_hardware_single_step,
win32_stopped_by_watchpoint,
win32_stopped_data_address,
NULL, /* read_offsets */