mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-28 12:33:36 +08:00
[gdbserver] Rename supports_conditional_breakpoints to supports_hardware_single_step
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-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.
This commit is contained in:
parent
ade90bdeb7
commit
70b90b91bf
@ -1,3 +1,23 @@
|
||||
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
|
||||
|
@ -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) \
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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 ())
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user