This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 1/2] [gdbserver] Rename supports_conditional_breakpoints to supports_hardware_single_step
- From: Yao Qi <qiyaoltc at gmail dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 1 Sep 2015 09:41:54 +0100
- Subject: [PATCH 1/2] [gdbserver] Rename supports_conditional_breakpoints to supports_hardware_single_step
- Authentication-results: sourceware.org; auth=none
- References: <1441096915-23615-1-git-send-email-yao dot qi at linaro dot org>
In my patch https://sourceware.org/ml/gdb-patches/2015-04/msg01110.html
a new target_ops hook supports_conditional_breakpoints was added to
disable conditional breakpoints if target doesn't have hardware single
step. This patch is to generalize this hook from
supports_conditional_breakpoints to supports_hardware_single_step,
so that the following patch can use it.
gdb/gdbserver:
2015-09-01 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.
---
gdb/gdbserver/linux-low.c | 11 +++--------
gdb/gdbserver/lynx-low.c | 5 +----
gdb/gdbserver/nto-low.c | 5 +----
gdb/gdbserver/server.c | 12 +++++++++---
gdb/gdbserver/spu-low.c | 2 +-
gdb/gdbserver/target.c | 8 ++++++++
gdb/gdbserver/target.h | 13 +++++++------
gdb/gdbserver/win32-low.c | 5 +----
8 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index f4c6029..9ae0522 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -5524,16 +5524,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 ();
}
@@ -6886,7 +6881,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 1a187c8..c5eb8fd 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 c52cf16..5c0d83d 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -2192,9 +2192,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 3e3b80f..7df8df3 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. */
@@ -609,9 +608,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 ? \
@@ -649,4 +648,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 86386ce..212c3c2 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 */
--
1.9.1