Convert dprintf to vtable ops

This converts dprintf to use vtable_breakpoint_ops.
This commit is contained in:
Tom Tromey 2022-01-15 16:28:06 -07:00
parent ae72050b7f
commit f293a0b5d6
3 changed files with 30 additions and 36 deletions

View file

@ -240,9 +240,6 @@ static struct breakpoint_ops bkpt_probe_breakpoint_ops;
/* Tracepoints set on probes. */ /* Tracepoints set on probes. */
static struct breakpoint_ops tracepoint_probe_breakpoint_ops; static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
/* Dynamic printf class type. */
struct breakpoint_ops dprintf_breakpoint_ops;
/* The structure to be used in regular breakpoints. */ /* The structure to be used in regular breakpoints. */
struct ordinary_breakpoint : public base_breakpoint struct ordinary_breakpoint : public base_breakpoint
{ {
@ -273,6 +270,13 @@ struct momentary_breakpoint : public base_breakpoint
/* DPrintf breakpoints. */ /* DPrintf breakpoints. */
struct dprintf_breakpoint : public ordinary_breakpoint struct dprintf_breakpoint : public ordinary_breakpoint
{ {
void re_set () override;
int breakpoint_hit (const struct bp_location *bl,
const address_space *aspace,
CORE_ADDR bp_addr,
const target_waitstatus &ws) override;
void print_recreate (struct ui_file *fp) override;
void after_condition_true (struct bpstat *bs) override;
}; };
/* The style in which to perform a dynamic printf. This is a user /* The style in which to perform a dynamic printf. This is a user
@ -9159,7 +9163,7 @@ dprintf_command (const char *arg, int from_tty)
0, bp_dprintf, 0, bp_dprintf,
0 /* Ignore count */, 0 /* Ignore count */,
pending_break_support, pending_break_support,
&dprintf_breakpoint_ops, &vtable_breakpoint_ops,
from_tty, from_tty,
1 /* enabled */, 1 /* enabled */,
0 /* internal */, 0 /* internal */,
@ -11860,10 +11864,11 @@ base_breakpoint::breakpoint_hit (const struct bp_location *bl,
return 1; return 1;
} }
static int int
dprintf_breakpoint_hit (const struct bp_location *bl, dprintf_breakpoint::breakpoint_hit (const struct bp_location *bl,
const address_space *aspace, CORE_ADDR bp_addr, const address_space *aspace,
const target_waitstatus &ws) CORE_ADDR bp_addr,
const target_waitstatus &ws)
{ {
if (dprintf_style == dprintf_style_agent if (dprintf_style == dprintf_style_agent
&& target_can_run_breakpoint_commands ()) && target_can_run_breakpoint_commands ())
@ -11874,7 +11879,7 @@ dprintf_breakpoint_hit (const struct bp_location *bl,
return 0; return 0;
} }
return bl->owner->breakpoint_hit (bl, aspace, bp_addr, ws); return this->ordinary_breakpoint::breakpoint_hit (bl, aspace, bp_addr, ws);
} }
int int
@ -12273,15 +12278,13 @@ tracepoint_probe_decode_location (struct breakpoint *b,
return bkpt_probe_decode_location (b, location, search_pspace); return bkpt_probe_decode_location (b, location, search_pspace);
} }
/* Dprintf breakpoint_ops methods. */ void
dprintf_breakpoint::re_set ()
static void
dprintf_re_set (struct breakpoint *b)
{ {
breakpoint_re_set_default (b); breakpoint_re_set_default (this);
/* extra_string should never be non-NULL for dprintf. */ /* extra_string should never be non-NULL for dprintf. */
gdb_assert (b->extra_string != NULL); gdb_assert (extra_string != NULL);
/* 1 - connect to target 1, that can run breakpoint commands. /* 1 - connect to target 1, that can run breakpoint commands.
2 - create a dprintf, which resolves fine. 2 - create a dprintf, which resolves fine.
@ -12293,23 +12296,22 @@ dprintf_re_set (struct breakpoint *b)
answers for target_can_run_breakpoint_commands(). answers for target_can_run_breakpoint_commands().
Given absence of finer grained resetting, we get to do Given absence of finer grained resetting, we get to do
it all the time. */ it all the time. */
if (b->extra_string != NULL) if (extra_string != NULL)
update_dprintf_command_list (b); update_dprintf_command_list (this);
} }
/* Implement the "print_recreate" breakpoint_ops method for dprintf. */ /* Implement the "print_recreate" method for dprintf. */
static void void
dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp) dprintf_breakpoint::print_recreate (struct ui_file *fp)
{ {
gdb_printf (fp, "dprintf %s,%s", gdb_printf (fp, "dprintf %s,%s",
event_location_to_string (tp->location.get ()), event_location_to_string (location.get ()),
tp->extra_string.get ()); extra_string.get ());
print_recreate_thread (tp, fp); print_recreate_thread (this, fp);
} }
/* Implement the "after_condition_true" breakpoint_ops method for /* Implement the "after_condition_true" method for dprintf.
dprintf.
dprintf's are implemented with regular commands in their command dprintf's are implemented with regular commands in their command
list, but we run the commands here instead of before presenting the list, but we run the commands here instead of before presenting the
@ -12317,8 +12319,8 @@ dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp)
also makes it so that the commands of multiple dprintfs at the same also makes it so that the commands of multiple dprintfs at the same
address are all handled. */ address are all handled. */
static void void
dprintf_after_condition_true (struct bpstat *bs) dprintf_breakpoint::after_condition_true (struct bpstat *bs)
{ {
/* dprintf's never cause a stop. This wasn't set in the /* dprintf's never cause a stop. This wasn't set in the
check_status hook instead because that would make the dprintf's check_status hook instead because that would make the dprintf's
@ -14588,13 +14590,6 @@ initialize_breakpoint_ops (void)
ops->create_sals_from_location = strace_marker_create_sals_from_location; ops->create_sals_from_location = strace_marker_create_sals_from_location;
ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal; ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
ops->decode_location = strace_marker_decode_location; ops->decode_location = strace_marker_decode_location;
ops = &dprintf_breakpoint_ops;
*ops = vtable_breakpoint_ops;
ops->re_set = dprintf_re_set;
ops->print_recreate = dprintf_print_recreate;
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. */

View file

@ -1490,7 +1490,6 @@ extern void rwatch_command_wrapper (const char *, int, bool);
extern void tbreak_command (const char *, int); extern void tbreak_command (const char *, int);
extern struct breakpoint_ops base_breakpoint_ops; extern struct breakpoint_ops base_breakpoint_ops;
extern struct breakpoint_ops dprintf_breakpoint_ops;
extern struct breakpoint_ops vtable_breakpoint_ops; extern struct breakpoint_ops vtable_breakpoint_ops;
extern void initialize_breakpoint_ops (void); extern void initialize_breakpoint_ops (void);

View file

@ -327,7 +327,7 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
else if (dprintf) else if (dprintf)
{ {
type_wanted = bp_dprintf; type_wanted = bp_dprintf;
ops = &dprintf_breakpoint_ops; ops = &vtable_breakpoint_ops;
} }
else else
{ {