Commit graph

1572 commits

Author SHA1 Message Date
Pedro Alves
7ab979957c Make sure momentary breakpoints are always thread-specific
This adds a new ctor to momentary_breakpoints with a few parameters
that are always necessary for momentary breakpoints.

In particular, I noticed that set_std_terminate_breakpoint doesn't
make the breakpoint be thread specific, which looks like a bug to me.

The point of that breakpoint is to intercept std::terminate calls that
happen as result of the called thread throwing an exception that won't
be caught by the dummy frame.  If some other thread calls
std::terminate, IMO, it's no different from some other thread calling
exit/_exit, for example.

Change-Id: Ifc5ff4a6d6e58b8c4854d00b86725382d38a1a02
2022-05-20 20:41:02 +01:00
Pedro Alves
f970305146 Momentary breakpoints should have no breakpoint number
Momentary breakpoints have no breakpoint number, their breakpoint
number should be always 0, to avoid constantly incrementing (or
decrementing) the internal breakpoint count.

Indeed, set_momentary_breakpoint installs the created breakpoint
without a number.

However, momentary_breakpoint_from_master incorrectly gives an
internal breakpoint number to the new breakpoint.  This commit fixes
that.

Change-Id: Iedcae5432cdf232db9e9a6e1a646d358abd34f95
2022-05-20 20:41:02 +01:00
Pedro Alves
9a71ed14cb Add/tweak intro comments of struct breakpoint and several subclasses
This tweaks the intro comments of the following classes:

 internal_breakpoint
 momentary_breakpoint
 breakpoint
 base_breakpoint
 watchpoint
 catchpoint

Change-Id: If6b31f51ebbb81705fbe5b8435f60ab2c88a98c8
2022-05-20 20:41:01 +01:00
Pedro Alves
960bc2bd14 Move add_location(sal) to base_breakpoint
After the previous patches, only base_breakpoint subclasses use
add_location(sal), so we can move it to base_breakpoint (a.k.a. base
class for code breakpoints).

This requires a few casts here and there, but always at spots where
you can see from context what the breakpoint's type actually is.

I inlined new_single_step_breakpoint into its only caller exactly for
this reason.

I did try to propagate more use of base_breakpoint to avoid casts, but
that turned out unwieldy for this patch.

Change-Id: I49d959322b0fdce5a88a216bb44730fc5dd7c6f8
2022-05-20 20:41:01 +01:00
Pedro Alves
92bb0228c8 Move common bits of catchpoint/exception_catchpoint to breakpoint's ctor
Move common bits of catchpoint and exception_catchpoint to
breakpoint's ctor, to avoid duplicating code.

Change-Id: I3a115180f4d496426522f1d89a3875026aea3cf2
2022-05-20 20:41:01 +01:00
Pedro Alves
acd0955bc1 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
2022-05-20 20:41:01 +01:00
Pedro Alves
6e14e4412b Make breakpoint_address_bits look at the location kind
Software watchpoints allocate a special dummy location using
software_watchpoint_add_no_memory_location, and then
breakpoint_address_bits checks whether the location is that special
location to decide whether the location has a meaninful address to
print.

Introduce a new bp_loc_software_watchpoint location kind, and make
breakpoint_address_bits use bl_address_is_meaningful instead, which
returns false for bp_loc_other, which is in accordance with we
document for bp_location::address:

  /* (... snip ...)  Valid for all types except
     bp_loc_other.  */
  CORE_ADDR address = 0;

Rename software_watchpoint_add_no_memory_location to
add_dummy_location, and simplify it.  This will be used by catchpoints
too in a following patch.

Note that neither "info breakpoints" nor "maint info breakpoints"
actually prints the addresses of watchpoints, but I think it would be
useful to do so in "maint info breakpoints".  This approach let's us
implement that in the future.

Change-Id: I50e398f66ef618c31ffa662da755eaba6295aed7
2022-05-20 20:41:01 +01:00
Pedro Alves
7a3e3265ed Refactor momentary breakpoints, eliminate set_raw_breakpoint{,_without_location}
This commit makes set_momentary_breakpoint allocate the breakpoint
type without relying on set_raw_breakpoint, and similarly,
momentary_breakpoint_from_master not rely on
set_raw_breakpoint_without_location.  This will let us convert
init_raw_breakpoint to a ctor in a following patch.

The comment about set_raw_breakpoint being used in gdbtk sources is
stale.  gdbtk no longer uses it.

Change-Id: Ibbf77731e4b22e18ccebc1b5799bbec0aff28c8a
2022-05-20 20:41:01 +01:00
Pedro Alves
752a2291b1 Refactor set_internal_breakpoint / internal_breakpoint ctor
This moves initialization of internal_breakpoint's breakpoint fields
to internal_breakpoint's ctor, and stops using
new_breakpoint_from_type for internal_breakpoint breakpoints.

Change-Id: I898ed0565f47cb00e4429f1c6446e6f9a385a78d
2022-05-20 20:41:01 +01:00
Pedro Alves
bd21b6c9cf Convert init_ada_exception_catchpoint to a ctor
Currently, init_ada_exception_catchpoint is defined in breakpoint.c, I
presume so it can call the static describe_other_breakpoints function.
I think this is a dependency inversion.
init_ada_exception_catchpoint, being code specific to Ada catchpoints,
should be in ada-lang.c, and describe_other_breakpoints, a core
function, should be exported.

And then, we can convert init_ada_exception_catchpoint to an
ada_catchpoint ctor.

Change-Id: I07695572dabc5a75d3d3740fd9b95db1529406a1
2022-05-20 20:41:01 +01:00
Pedro Alves
3b003a6126 init_breakpoint_sal -> base_breakpoint::base_breakpoint
This converts init_breakpoint_sal to a base_breakpoint constructor.

It removes a use of init_raw_breakpoint.

To avoid manually adding a bunch of parameters to
new_breakpoint_from_type, and manually passing them down to the
constructors of a number of different base_breakpoint subclasses, make
new_breakpoint_from_type a variable template function.

Change-Id: I4cc24133ac4c292f547289ec782fc78e5bbe2510
2022-05-20 20:41:00 +01:00
Pedro Alves
d837fd813d Remove "internal" parameter from a couple functions
None of init_breakpoint_sal, create_breakpoint_sal, and
strace_marker_create_breakpoints_sal make use of their "internal"
parameter, so remove it.

Change-Id: I943f3bb44717ade7a7b7547edf8f3ff3c37da435
2022-05-20 20:41:00 +01:00
Pedro Alves
ef4848c75f More breakpoint_ops parameter elimination
Remove breakpoint_ops parameters from a few functions that don't need
it.

Change-Id: Ifcf5e1cc688184acbf5e19b8ea60138ebe63cf28
2022-05-20 20:41:00 +01:00
Pedro Alves
ff733ec228 Make a few functions work with base_breakpoint instead of breakpoint
This makes tracepoints inherit from base_breakpoint, since their
locations are code locations.  If we do that, then we can eliminate
tracepoint::re_set and tracepoint::decode_location, as they are doing
the same as the base_breakpoint implementations.

With this, all breakpoint types created by new_breakpoint_from_type
are code breakpoints, i.e., base_breakpoint subclasses, and thus we
can make it return a base_breakpoint pointer.

Finally, init_breakpoint_sal can take a base_breakpoint pointer as
"self" pointer too.  This will let us convert this function to a
base_breakpoint ctor in a following patch.

Change-Id: I3a4073ff1a4c865f525588095c18dc42b744cb54
2022-05-20 20:41:00 +01:00
Pedro Alves
b925bf21e0 ranged_breakpoint: move initialization to ctor
Move initialization of ranged_breakpoint's fields to its ctor.

Change-Id: If7b842861f3cc6a429ea329d45598b5852283ba3
2022-05-20 20:41:00 +01:00
Pedro Alves
27a62b4359 ranged_breakpoint: use install_breakpoint
This commit replaces a chunk of code in break_range_command by an
equivalent call to install_breakpoint.

Change-Id: I31c06cabd36f5be91740aab029265f678aa78e35
2022-05-20 20:41:00 +01:00
Pedro Alves
f317d1eb2a ranged_breakpoint: don't use init_raw_breakpoint
ranged_breakpoint's ctor already sets the breakpoint's type to
bp_hardware_breakpoint.

Since this is a "regular" breakpoint, b->pspace should remain NULL.

Thus, the only thing init_raw_breakpoint is needed for, is to add the
breakpoint's location.  Do that directly.

Change-Id: I1505de94c3919881c2b300437e2c0da9b05f76bd
2022-05-20 20:41:00 +01:00
Pedro Alves
1c2cbcf1de Make structs breakpoint/base_breakpoint/catchpoint be abstract
You should never instanciate these types directly.

Change-Id: I8086c74c415eadbd44924bb0ef20f34b5b97ee6f
2022-05-20 20:40:59 +01:00
Pedro Alves
0661562829 add_location_to_breakpoint -> breakpoint::add_location
Make add_location_to_breakpoint be a method of struct breakpoint.

A patch later in the series will move this to base_breakpoint, but for
now, it needs to be here.

Change-Id: I5bdc2ec1a7c2d66f26f51bf6f6adc8384a90b129
2022-05-20 20:40:59 +01:00
Tom Tromey
fed1c982de Introduce catchpoint class
This introduces a catchpoint class that is used as the base class for
all catchpoints.  init_catchpoint is rewritten to be a constructor
instead.

This changes the hierarchy a little -- some catchpoints now inherit
from base_breakpoint whereas previously they did not.  This isn't a
problem, as long as re_set is redefined in catchpoint.
2022-05-06 12:03:35 -06:00
Tom Tromey
73063f5180 Remove init_raw_breakpoint_without_location
This removes init_raw_breakpoint_without_location, replacing it with a
constructor on 'breakpoint' itself.  The subclasses and callers are
all updated.
2022-05-06 12:03:35 -06:00
Tom Tromey
4d1ae55893 Constify breakpoint::print_recreate
This constifies breakpoint::print_recreate.
2022-05-06 12:03:34 -06:00
Tom Tromey
b713485d66 Constify breakpoint::print_mention
This constifies breakpoint::print_mention.
2022-05-06 12:03:34 -06:00
Tom Tromey
a67bcaba1c Constify breakpoint::print_one
This constifies breakpoint::print_one.
2022-05-06 12:03:34 -06:00
Tom Tromey
7bd8631327 Constify breakpoint::print_it
This constifies breakpoint::print_it.  Doing this pointed out some
code in ada-lang.c that can be simplified a little as well.
2022-05-06 12:03:34 -06:00
Tom Tromey
5a61e17687 Move works_in_software_mode to watchpoint
works_in_software_mode is only useful for watchpoints.  This patch
moves it from breakpoint to watchpoint, and changes it to return bool.
2022-05-06 12:03:34 -06:00
Tom Tromey
a6860f3ad2 Boolify breakpoint::explains_signal
This changes breakpoint::explains_signal to return bool.
2022-05-06 12:03:34 -06:00
Tom Tromey
9efa3c7fa3 Remove breakpoint::ops
The breakpoint::ops field is set but never used.  This removes it.
2022-05-06 12:03:34 -06:00
Tom Tromey
04d0163c3f Change print_recreate_thread to a method
This changes print_recreate_thread to be a method on breakpoint.  This
function is only used as a helper by print_recreate methods, so I
thought this transformation made sense.
2022-05-06 12:03:34 -06:00
Simon Marchi
03ada39ea5 gdb: remove type_wanted parameter from a few functions
The type_wanted value, passed down to the create_sals_from_location
callback, is never used.  Remove it.

Change-Id: Ic363ee13f6af593a3e875ff7fe46de130cdc190c
2022-05-02 16:14:23 -04:00
Tom Tromey
eee031e253 Remove create_breakpoints_sal_default
create_breakpoints_sal_default is just a simple wrapper, so remove it.
2022-04-29 16:14:32 -06:00
Tom Tromey
ee89d0a4e8 Remove allocate_bp_location
allocate_bp_location is just a small wrapper for a method call, so
inline it everywhere.
2022-04-29 16:14:32 -06:00
Tom Tromey
a678887d09 Constify breakpoint_ops
Now that all breakpoint_ops are statically initialized, they can all
be made const.
2022-04-29 16:14:32 -06:00
Tom Tromey
8613a476b1 Remove breakpoint ops initialization
initialize_breakpoint_ops does not do much any more, so remove it in
favor of statically-initialize objects.
2022-04-29 16:14:32 -06:00
Tom Tromey
a0cd5f080b Remove vtable_breakpoint_ops
There's no need to have vtable_breakpoint_ops any more, so remove it
in favor of base_breakpoint_ops.
2022-04-29 16:14:32 -06:00
Tom Tromey
c47614fef9 Remove most fields from breakpoint_ops
At this point, all implementations of breakpoints use the vtable.  So,
we can now remove most function pointers from breakpoint_ops and
switch to using methods directly in the callers.  Only the two "static
virtual" methods remain in breakpoint_ops.
2022-04-29 16:14:32 -06:00
Tom Tromey
b3316ff153 Remove breakpoint_ops from init_catchpoint
init_catchpoint is only ever passed a single breakpoint_ops pointer,
so remove the parameter.
2022-04-29 16:14:32 -06:00
Tom Tromey
a48ddc0d6a Remove breakpoint_ops from init_ada_exception_breakpoint
init_ada_exception_breakpoint is only ever passed a single
breakpoint_ops structure, so remove the parameter.
2022-04-29 16:14:32 -06:00
Tom Tromey
8d89123dc2 Merge probe and ordinary tracepoints
Right now, probe tracepoints are handled by a separate ops object.
However, they differ only in a small way from ordinary tracepoints,
and furthermore can be distinguished by their event location.

This patch merges the two cases, just as was done for breakpoints.
2022-04-29 16:14:32 -06:00
Tom Tromey
5d926615e9 Merge probe and ordinary breakpoints
Right now, probe breakpoints are handled by a separate ops object.
However, they differ only in a small way from ordinary breakpoints,
and furthermore can be distinguished by their "probe" object.

This patch merges the two cases.  This avoids having to introduce a
new bp_ constant (which can be quite subtle to do correctly) and a new
subclass.
2022-04-29 16:14:32 -06:00
Tom Tromey
823b50f385 Remove bkpt_base_breakpoint_ops
An earlier patch removed the last use of bkpt_base_breakpoint_ops, so
remove the object entirely.
2022-04-29 16:14:32 -06:00
Tom Tromey
6d7a8c568b Convert static marker tracepoints to vtable ops
This converts static marker tracepoints to use vtable_breakpoint_ops.
2022-04-29 16:14:31 -06:00
Tom Tromey
7b572efb48 Add bp_static_marker_tracepoint
Because the actual construction of a breakpoint is buried deep in
create_breakpoint, at present it's necessary to have a new bp_
enumerator constant any time a new subclass is needed.  Static marker
tracepoints are one such case, so this patch introduces
bp_static_marker_tracepoint and updates various spots to recognize it.
2022-04-29 16:14:31 -06:00
Tom Tromey
ec45bb676c Convert ranged breakpoints to vtable ops
This converts ranged breakpoints to use vtable_breakpoint_ops.  This
requires introducing a new ranged_breakpoint type, but this is
relatively simple because ranged breakpoints can only be created by
break_range_command.
2022-04-29 16:14:31 -06:00
Tom Tromey
f293a0b5d6 Convert dprintf to vtable ops
This converts dprintf to use vtable_breakpoint_ops.
2022-04-29 16:14:31 -06:00
Tom Tromey
7dd8e7ae28 Convert ordinary breakpoints to vtable ops
This converts "ordinary" breakpoint to use vtable_breakpoint_ops.
Recall that an ordinary breakpoint is both the kind normally created
by users, and also a base class used by other classes.
2022-04-29 16:14:31 -06:00
Tom Tromey
5ad71d67ae Change inheritance of dprintf
The dprintf breakpoint ops is mostly a copy of bpkt_breakpoint_ops,
except it's written out explicitly -- and, importantly, there's
nothing that bpkt_breakpoint_ops overrides that dprintf does not.
This changes dprintf to simply inherit directly, and updates struct
dprintf_breakpoint to reflect the change as well.
2022-04-29 16:14:31 -06:00
Tom Tromey
1fd30a4730 Convert momentary breakpoints to vtable ops
This converts momentary breakpoints to use vtable_breakpoint_ops.
2022-04-29 16:14:31 -06:00
Tom Tromey
c359fff502 Convert internal breakpoints to vtable ops
This converts internal breakpoints to use vtable_breakpoint_ops.
2022-04-29 16:14:31 -06:00
Tom Tromey
2b5ab5b851 Convert base breakpoints to vtable ops
This converts base breakpoints to use vtable_breakpoint_ops.
2022-04-29 16:14:31 -06:00