Make catchpoint inherit breakpoint, eliminate init_raw_breakpoint

struct catchpoint's ctor currently calls init_raw_breakpoint, which is
a bit weird, as that ctor-like function takes a sal argument, but
catchpoints don't have code locations.

Instead, make struct catchpoint's ctor add the catchpoint's dummy
location using add_dummy_location.

init_raw_breakpoint uses add_location under the hood, and with a dummy
sal it would ultimately use the breakpoint's gdbarch for the
location's gdbarch, so replace the references to loc->gdbarch (which
is now NULL) in syscall_catchpoint to references to the catchpoint's
gdbarch.

struct catchpoint's ctor was the last user of init_raw_breakpoint, so
this commit eliminates the latter.

Since catchpoint locations aren't code locations, make struct
catchpoint inherit struct breakpoint instead of base_breakpoint.  This
let's us delete the tracepoint::re_set override too.

Change-Id: Ib428bf71efb09fdaf399c56e4372b0f41d9c5869
This commit is contained in:
Pedro Alves
2022-05-07 01:23:03 +01:00
parent 6e14e4412b
commit acd0955bc1
3 changed files with 7 additions and 37 deletions

View File

@ -197,7 +197,7 @@ syscall_catchpoint::print_it (const bpstat *bs) const
must print "called syscall" or "returned from syscall". */
struct target_waitstatus last;
struct syscall s;
struct gdbarch *gdbarch = bs->bp_location_at->gdbarch;
struct gdbarch *gdbarch = b->gdbarch;
get_last_target_status (nullptr, nullptr, &last);
@ -242,7 +242,7 @@ syscall_catchpoint::print_one (bp_location **last_loc) const
{
struct value_print_options opts;
struct ui_out *uiout = current_uiout;
struct gdbarch *gdbarch = loc->gdbarch;
struct gdbarch *gdbarch = loc->owner->gdbarch;
get_user_print_options (&opts);
/* Field 4, the address, is omitted (which makes the columns not
@ -293,7 +293,7 @@ syscall_catchpoint::print_one (bp_location **last_loc) const
void
syscall_catchpoint::print_mention () const
{
struct gdbarch *gdbarch = loc->gdbarch;
struct gdbarch *gdbarch = loc->owner->gdbarch;
if (!syscalls_to_be_caught.empty ())
{

View File

@ -7266,30 +7266,6 @@ get_sal_arch (struct symtab_and_line sal)
return NULL;
}
/* Low level routine for partially initializing a breakpoint of type
BPTYPE. The newly created breakpoint's address, section, source
file name, and line number are provided by SAL.
It is expected that the caller will complete the initialization of
the newly created breakpoint struct as well as output any status
information regarding the creation of a new breakpoint. */
static void
init_raw_breakpoint (struct breakpoint *b, struct symtab_and_line sal,
enum bptype bptype)
{
b->add_location (sal);
if (bptype != bp_catchpoint)
gdb_assert (sal.pspace != NULL);
/* Store the program space that was used to set the breakpoint,
except for ordinary breakpoints, which are independent of the
program space. */
if (bptype != bp_breakpoint && bptype != bp_hardware_breakpoint)
b->pspace = sal.pspace;
}
/* Call this routine when stepping and nexting to enable a breakpoint
if we do a longjmp() or 'throw' in TP. FRAME is the frame which
initiated the operation. */
@ -7751,12 +7727,11 @@ disable_breakpoints_in_freed_objfile (struct objfile *objfile)
catchpoint::catchpoint (struct gdbarch *gdbarch, bool temp,
const char *cond_string_)
: base_breakpoint (gdbarch, bp_catchpoint)
: breakpoint (gdbarch, bp_catchpoint)
{
symtab_and_line sal;
sal.pspace = current_program_space;
add_dummy_location (this, current_program_space);
init_raw_breakpoint (this, sal, bp_catchpoint);
pspace = current_program_space;
if (cond_string_ != nullptr)
cond_string = make_unique_xstrdup (cond_string_);

View File

@ -1030,18 +1030,13 @@ struct tracepoint : public base_breakpoint
/* The base class for catchpoints. */
struct catchpoint : public base_breakpoint
struct catchpoint : public breakpoint
{
/* If TEMP is true, then make the breakpoint temporary. If
COND_STRING is not NULL, then store it in the breakpoint. */
catchpoint (struct gdbarch *gdbarch, bool temp, const char *cond_string);
~catchpoint () override = 0;
void re_set () override
{
/* For catchpoints, the default is to do nothing. */
}
};