|
@@ -2353,19 +2353,15 @@ relock:
|
|
|
|
|
|
/**
|
|
|
* signal_delivered -
|
|
|
- * @sig: number of signal being delivered
|
|
|
- * @info: siginfo_t of signal being delivered
|
|
|
- * @ka: sigaction setting that chose the handler
|
|
|
- * @regs: user register state
|
|
|
+ * @ksig: kernel signal struct
|
|
|
* @stepping: nonzero if debugger single-step or block-step in use
|
|
|
*
|
|
|
* This function should be called when a signal has successfully been
|
|
|
- * delivered. It updates the blocked signals accordingly (@ka->sa.sa_mask
|
|
|
+ * delivered. It updates the blocked signals accordingly (@ksig->ka.sa.sa_mask
|
|
|
* is always blocked, and the signal itself is blocked unless %SA_NODEFER
|
|
|
- * is set in @ka->sa.sa_flags. Tracing is notified.
|
|
|
+ * is set in @ksig->ka.sa.sa_flags. Tracing is notified.
|
|
|
*/
|
|
|
-void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka,
|
|
|
- struct pt_regs *regs, int stepping)
|
|
|
+static void signal_delivered(struct ksignal *ksig, int stepping)
|
|
|
{
|
|
|
sigset_t blocked;
|
|
|
|
|
@@ -2375,9 +2371,9 @@ void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka,
|
|
|
simply clear the restore sigmask flag. */
|
|
|
clear_restore_sigmask();
|
|
|
|
|
|
- sigorsets(&blocked, ¤t->blocked, &ka->sa.sa_mask);
|
|
|
- if (!(ka->sa.sa_flags & SA_NODEFER))
|
|
|
- sigaddset(&blocked, sig);
|
|
|
+ sigorsets(&blocked, ¤t->blocked, &ksig->ka.sa.sa_mask);
|
|
|
+ if (!(ksig->ka.sa.sa_flags & SA_NODEFER))
|
|
|
+ sigaddset(&blocked, ksig->sig);
|
|
|
set_current_blocked(&blocked);
|
|
|
tracehook_signal_handler(stepping);
|
|
|
}
|
|
@@ -2387,8 +2383,7 @@ void signal_setup_done(int failed, struct ksignal *ksig, int stepping)
|
|
|
if (failed)
|
|
|
force_sigsegv(ksig->sig, current);
|
|
|
else
|
|
|
- signal_delivered(ksig->sig, &ksig->info, &ksig->ka,
|
|
|
- signal_pt_regs(), stepping);
|
|
|
+ signal_delivered(ksig, stepping);
|
|
|
}
|
|
|
|
|
|
/*
|