diff options
author | George Barrett <bob@bob131.so> | 2019-12-10 08:28:39 +1100 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2019-12-09 16:51:33 -0500 |
commit | bac7c5cf92e85195de99077b4147358bb372e87a (patch) | |
tree | 7d1b2ecbcf4d6acc9111d682c3e20bce1f4ccd2c /gdb/breakpoint.h | |
parent | 330f1d3825daa0d9e8d6c54f4fcf6fa5800e5664 (diff) | |
download | fsf-binutils-gdb-bac7c5cf92e85195de99077b4147358bb372e87a.zip fsf-binutils-gdb-bac7c5cf92e85195de99077b4147358bb372e87a.tar.gz fsf-binutils-gdb-bac7c5cf92e85195de99077b4147358bb372e87a.tar.bz2 |
Fix scripted probe breakpoints
The documentation for make-breakpoint from the Guile API and the `spec'
variant of the gdb.Breakpoint constructor from the Python API state that
the format acceptable for location strings is the same as that accepted
by the break command. However, using the -probe qualifier at the
beginning of the location string causes a GDB internal error as it
attempts to decode a probe location in the wrong code path. Without this
functionality, there doesn't appear to be another way to set breakpoints
on probe points from Python or Guile scripts.
This patch introduces a new helper function that returns a
breakpoint_ops instance appropriate for a parsed location and updates
the Guile and Python bindings to use said function, rather than the
current hard-coded use of bkpt_breakpoint_ops. Since this logic is
duplicated in the handling of the `break' and `trace' commands, those
are also updated to call into the new helper function.
gdb/ChangeLog:
2019-12-10 George Barrett <bob@bob131.so>
Fix scripted probe breakpoints.
* breakpoint.c (tracepoint_probe_breakpoint_ops): Move
declaration forward.
(breakpoint_ops_for_event_location_type)
(breakpoint_ops_for_event_location): Add function definitions.
(break_command_1, trace_command): Use
breakpoint_ops_for_event_location.
* breakpoint.h (breakpoint_ops_for_event_location): Add function
declarations.
* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Use
breakpoint_ops_for_event_location.
* python/py-breakpoint.c (bppy_init): Use
breakpoint_ops_for_event_location.
gdb/testsuite/ChangeLog:
2019-12-10 George Barrett <bob@bob131.so>
Test scripted probe breakpoints.
* gdb.guile/scm-breakpoint.c (main): Add probe point.
* gdb.python/py-breakpoint.c (main): Likewise.
* gdb.guile/scm-breakpoint.exp (test_bkpt_probe): Add probe
specifier test.
* gdb.python/py-breakpoint.exp (test_bkpt_probe): Likewise.
Diffstat (limited to 'gdb/breakpoint.h')
-rw-r--r-- | gdb/breakpoint.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index a9d689d..3197854 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -1352,6 +1352,15 @@ extern void init_catchpoint (struct breakpoint *b, extern void install_breakpoint (int internal, std::unique_ptr<breakpoint> &&b, int update_gll); +/* Returns the breakpoint ops appropriate for use with with LOCATION and + according to IS_TRACEPOINT. Use this to ensure, for example, that you pass + the correct ops to create_breakpoint for probe locations. If LOCATION is + NULL, returns bkpt_breakpoint_ops (or tracepoint_breakpoint_ops, if + IS_TRACEPOINT is true). */ + +extern const struct breakpoint_ops *breakpoint_ops_for_event_location + (const struct event_location *location, bool is_tracepoint); + /* Flags that can be passed down to create_breakpoint, etc., to affect breakpoint creation in several ways. */ |