diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2011-04-27 13:29:15 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2011-04-27 13:29:15 +0000 |
commit | 2455069d930b37918b92281be109444d1e38dc6d (patch) | |
tree | 1dede0ae37934adb93839c5dbe7d705198704b2b /gdb/target.h | |
parent | 46c6471b0a591c6a53cf9bacdee6663cc63cd588 (diff) | |
download | gdb-2455069d930b37918b92281be109444d1e38dc6d.zip gdb-2455069d930b37918b92281be109444d1e38dc6d.tar.gz gdb-2455069d930b37918b92281be109444d1e38dc6d.tar.bz2 |
* target.h (struct target_ops): Remove to_notice_signals;
add to_pass_signals.
(target_notice_signals): Remove.
(target_pass_signals): Add prototype.
* target.c (update_current_target): Remove to_notice_signals;
mention to_pass_signals.
(target_pass_signals): New function.
(debug_to_notice_signals): Remove.
(setup_target_debug): Do not install debug_to_notice_signals.
* infrun.c (signal_pass): New global.
(resume): Call target_pass_signals.
(handle_inferior_event): Report all signals while stepping over
non-steppable watchpoint. Reset trap_expected to ensure breakpoints
are re-inserted when stepping over a signal handler.
(signal_cache_update): New function.
(signal_stop_update): Call it.
(signal_print_update): Likewise.
(signal_pass_update): Likewise.
(handle_command): Call signal_cache_update and target_pass_signals
instead of target_notice_signals.
(_initialize_infrun): Initialize signal_pass.
* linux-nat.c (pass_mask): New global.
(linux_nat_pass_signals): New function.
(linux_nat_create_inferior): Report all signals initially.
(linux_nat_attach): Likewise.
(linux_nat_resume): Use pass_mask to decide whether to directly
handle an inferior signal.
(linux_nat_wait_1): Likewise.
(linux_nat_add_target): Install to_pass_signals callback.
* nto-procfs.c (notice_signals): Remove.
(procfs_resume): Do not call notice_signals.
(procfs_notice_signals): Remove.
(procfs_pass_signals): New function.
(init_procfs_ops): Install to_pass_signals callback instead of
to_notice_signals callback.
(_initialize_procfs): Report all signals initially.
* procfs.c (procfs_notice_signals): Remove.
(procfs_pass_signals): New function.
(procfs_target): Install to_pass_signals callback instead of
to_notice_signals callback.
(register_gdb_signals): Remove.
(procfs_debug_inferior): Report all signals initially.
(procfs_init_inferior): Remove redundant register_gdb_signals call.
* remote.c (remote_pass_signals): Add numsigs and pass_signals
parameters; use them instead of calling signal_..._state routines.
(remote_notice_signals): Remove.
(remote_start_remote): Report all signals initially.
(remote_resume): Do not call remote_pass_signals.
(_initialize_remote): Install to_pass_signals callback instead of
to_notice_signals callback.
Diffstat (limited to 'gdb/target.h')
-rw-r--r-- | gdb/target.h | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/gdb/target.h b/gdb/target.h index f0b2e43..11380ed 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -494,7 +494,11 @@ struct target_ops int (*to_has_exited) (int, int, int *); void (*to_mourn_inferior) (struct target_ops *); int (*to_can_run) (void); - void (*to_notice_signals) (ptid_t ptid); + + /* Documentation of this routine is provided with the corresponding + target_* macro. */ + void (*to_pass_signals) (int, unsigned char *); + int (*to_thread_alive) (struct target_ops *, ptid_t ptid); void (*to_find_new_threads) (struct target_ops *); char *(*to_pid_to_str) (struct target_ops *, ptid_t); @@ -1120,10 +1124,19 @@ void target_mourn_inferior (void); #define target_can_run(t) \ ((t)->to_can_run) () -/* post process changes to signal handling in the inferior. */ +/* Set list of signals to be handled in the target. + + PASS_SIGNALS is an array of size NSIG, indexed by target signal number + (enum target_signal). For every signal whose entry in this array is + non-zero, the target is allowed -but not required- to skip reporting + arrival of the signal to the GDB core by returning from target_wait, + and to pass the signal directly to the inferior instead. + + However, if the target is hardware single-stepping a thread that is + about to receive a signal, it needs to be reported in any case, even + if mentioned in a previous target_pass_signals call. */ -#define target_notice_signals(ptid) \ - (*current_target.to_notice_signals) (ptid) +extern void target_pass_signals (int nsig, unsigned char *pass_signals); /* Check to see if a thread is still alive. */ |