mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
dprintf-style agent can't explain a trap.
If some event happens to trigger at the same address as a dprintf-style agent dprintf is installed, GDB will complain, like: (gdb) continue Continuing. May only run agent-printf on the target (gdb) Such dprintfs are completely handled on the target side, so they can't explain a stop, but GDB is currently putting then on the bpstat chain anyway, because they currently unconditionally use bkpt_breakpoint_hit as breakpoint_hit method. gdb/ 2014-06-02 Pedro Alves <palves@redhat.com> * breakpoint.c (dprintf_breakpoint_hit): New function. (initialize_breakpoint_ops): Install it as dprintf's breakpoint_hit method.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2014-06-02 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* breakpoint.c (dprintf_breakpoint_hit): New function.
|
||||||
|
(initialize_breakpoint_ops): Install it as dprintf's
|
||||||
|
breakpoint_hit method.
|
||||||
|
|
||||||
2014-06-02 Joel Brobecker <brobecker@adacore.com>
|
2014-06-02 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* source.c (substitute_path_rule_matches): Simplify using
|
* source.c (substitute_path_rule_matches): Simplify using
|
||||||
|
@ -13141,6 +13141,23 @@ bkpt_breakpoint_hit (const struct bp_location *bl,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
dprintf_breakpoint_hit (const struct bp_location *bl,
|
||||||
|
struct address_space *aspace, CORE_ADDR bp_addr,
|
||||||
|
const struct target_waitstatus *ws)
|
||||||
|
{
|
||||||
|
if (dprintf_style == dprintf_style_agent
|
||||||
|
&& target_can_run_breakpoint_commands ())
|
||||||
|
{
|
||||||
|
/* An agent-style dprintf never causes a stop. If we see a trap
|
||||||
|
for this address it must be for a breakpoint that happens to
|
||||||
|
be set at the same address. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bkpt_breakpoint_hit (bl, aspace, bp_addr, ws);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bkpt_resources_needed (const struct bp_location *bl)
|
bkpt_resources_needed (const struct bp_location *bl)
|
||||||
{
|
{
|
||||||
@ -16220,6 +16237,7 @@ initialize_breakpoint_ops (void)
|
|||||||
ops->print_mention = bkpt_print_mention;
|
ops->print_mention = bkpt_print_mention;
|
||||||
ops->print_recreate = dprintf_print_recreate;
|
ops->print_recreate = dprintf_print_recreate;
|
||||||
ops->after_condition_true = dprintf_after_condition_true;
|
ops->after_condition_true = dprintf_after_condition_true;
|
||||||
|
ops->breakpoint_hit = dprintf_breakpoint_hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Chain containing all defined "enable breakpoint" subcommands. */
|
/* Chain containing all defined "enable breakpoint" subcommands. */
|
||||||
|
Reference in New Issue
Block a user