diff options
author | Tom Tromey <tromey@redhat.com> | 2013-01-16 17:31:40 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2013-01-16 17:31:40 +0000 |
commit | ab04a2af2bacfc1062c907630bee6e345dbd2ea9 (patch) | |
tree | 12d3019d08999c1decb65cab0a6f1496f8daaf94 /gdb/breakpoint.h | |
parent | 8ac3646fbbb5f1e0442caa55559513d593136f8c (diff) | |
download | gdb-ab04a2af2bacfc1062c907630bee6e345dbd2ea9.zip gdb-ab04a2af2bacfc1062c907630bee6e345dbd2ea9.tar.gz gdb-ab04a2af2bacfc1062c907630bee6e345dbd2ea9.tar.bz2 |
2013-01-03 Pedro Alves <palves@redhat.com>
Tom Tromey <tromey@redhat.com>
PR cli/7221:
* NEWS: Add "catch signal".
* breakpoint.c (base_breakpoint_ops): No longer static.
(bpstat_explains_signal): New function.
(init_catchpoint): No longer static.
(base_breakpoint_explains_signal): New function.
(base_breakpoint_ops): Initialize new field.
* breakpoint.h (enum bpstat_signal_value): New.
(struct breakpoint_ops) <explains_signal>: New field.
(bpstat_explains_signal): Remove macro, declare as function.
(base_breakpoint_ops, init_catchpoint): Declare.
* break-catch-sig.c: New file.
* inferior.h (signal_catch_update): Declare.
* infrun.c (signal_catch): New global.
(handle_syscall_event): Update for change to
bpstat_explains_signal.
(handle_inferior_event): Likewise. Always handle random signals
via bpstats.
(signal_cache_update): Check signal_catch.
(signal_catch_update): New function.
(_initialize_infrun): Initialize signal_catch.
* Makefile.in (SFILES): Add break-catch-sig.c.
(COMMON_OBS): Add break-catch-sig.o.
gdb/doc
* gdb.texinfo (Set Catchpoints): Document "catch signal".
(Signals): Likewise.
gdb/testsuite
* gdb.base/catch-signal.c: New file.
* gdb.base/catch-signal.exp: New file.
Diffstat (limited to 'gdb/breakpoint.h')
-rw-r--r-- | gdb/breakpoint.h | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 52864f5..df9d366 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -474,6 +474,22 @@ struct bp_location char *source_file; }; +/* Return values for bpstat_explains_signal. Note that the order of + the constants is important here; they are compared directly in + bpstat_explains_signal. */ + +enum bpstat_signal_value + { + /* bpstat does not explain this signal. */ + BPSTAT_SIGNAL_NO = 0, + + /* bpstat explains this signal; signal should not be delivered. */ + BPSTAT_SIGNAL_HIDE, + + /* bpstat explains this signal; signal should be delivered. */ + BPSTAT_SIGNAL_PASS + }; + /* This structure is a collection of function pointers that, if available, will be called instead of the performing the default action for this bptype. */ @@ -588,6 +604,12 @@ struct breakpoint_ops This function is called inside `addr_string_to_sals'. */ void (*decode_linespec) (struct breakpoint *, char **, struct symtabs_and_lines *); + + /* Return true if this breakpoint explains a signal, but the signal + should still be delivered to the inferior. This is used to make + 'catch signal' interact properly with 'handle'; see + bpstat_explains_signal. */ + enum bpstat_signal_value (*explains_signal) (struct breakpoint *); }; /* Helper for breakpoint_ops->print_recreate implementations. Prints @@ -980,10 +1002,9 @@ struct bpstat_what bpstat_what (bpstat); bpstat bpstat_find_breakpoint (bpstat, struct breakpoint *); /* Nonzero if a signal that we got in wait() was due to circumstances - explained by the BS. */ -/* Currently that is true if we have hit a breakpoint, or if there is - a watchpoint enabled. */ -#define bpstat_explains_signal(bs) ((bs) != NULL) + explained by the bpstat; and the signal should therefore not be + delivered. */ +extern enum bpstat_signal_value bpstat_explains_signal (bpstat); /* Nonzero is this bpstat causes a stop. */ extern int bpstat_causes_stop (bpstat); @@ -1183,6 +1204,7 @@ extern void awatch_command_wrapper (char *, int, int); extern void rwatch_command_wrapper (char *, int, int); extern void tbreak_command (char *, int); +extern struct breakpoint_ops base_breakpoint_ops; extern struct breakpoint_ops bkpt_breakpoint_ops; extern struct breakpoint_ops tracepoint_breakpoint_ops; @@ -1215,6 +1237,11 @@ extern void int tempflag, int from_tty); +extern void init_catchpoint (struct breakpoint *b, + struct gdbarch *gdbarch, int tempflag, + char *cond_string, + const struct breakpoint_ops *ops); + /* Add breakpoint B on the breakpoint list, and notify the user, the target and breakpoint_created observers of its existence. If INTERNAL is non-zero, the breakpoint number will be allocated from |