summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2010-07-04 11:48:30 +0000
committerkib <kib@FreeBSD.org>2010-07-04 11:48:30 +0000
commit22a31bdc6e494c4ec4dd908a6deca6832f6e6ff6 (patch)
tree71019082a5835ccc7a2f026d2a4092c1c06dc96a /sys/kern/kern_sig.c
parent5f8b30cbbbfceb9999d60f43cafb99bb1df6734d (diff)
downloadFreeBSD-src-22a31bdc6e494c4ec4dd908a6deca6832f6e6ff6.zip
FreeBSD-src-22a31bdc6e494c4ec4dd908a6deca6832f6e6ff6.tar.gz
Extend ptrace(PT_LWPINFO) to report siginfo for the signal that caused
debugee stop. The change should keep the ABI. Take care of compat32. Discussed with: davidxu, jhb MFC after: 2 weeks
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 04c2ba7..af3c7da 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -2522,7 +2522,6 @@ issignal(struct thread *td, int stop_allowed)
struct sigacts *ps;
struct sigqueue *queue;
sigset_t sigpending;
- ksiginfo_t ksi;
int sig, prop, newsig;
p = td->td_proc;
@@ -2565,10 +2564,10 @@ issignal(struct thread *td, int stop_allowed)
* be thrown away.
*/
queue = &td->td_sigqueue;
- ksi.ksi_signo = 0;
- if (sigqueue_get(queue, sig, &ksi) == 0) {
+ td->td_dbgksi.ksi_signo = 0;
+ if (sigqueue_get(queue, sig, &td->td_dbgksi) == 0) {
queue = &p->p_sigqueue;
- sigqueue_get(queue, sig, &ksi);
+ sigqueue_get(queue, sig, &td->td_dbgksi);
}
mtx_unlock(&ps->ps_mtx);
@@ -2595,13 +2594,13 @@ issignal(struct thread *td, int stop_allowed)
continue;
signotify(td);
} else {
- if (ksi.ksi_signo != 0) {
- ksi.ksi_flags |= KSI_HEAD;
+ if (td->td_dbgksi.ksi_signo != 0) {
+ td->td_dbgksi.ksi_flags |= KSI_HEAD;
if (sigqueue_add(&td->td_sigqueue, sig,
- &ksi) != 0)
- ksi.ksi_signo = 0;
+ &td->td_dbgksi) != 0)
+ td->td_dbgksi.ksi_signo = 0;
}
- if (ksi.ksi_signo == 0)
+ if (td->td_dbgksi.ksi_signo == 0)
sigqueue_add(&td->td_sigqueue, sig,
NULL);
}
OpenPOWER on IntegriCloud