diff options
author | kib <kib@FreeBSD.org> | 2010-07-04 11:48:30 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-07-04 11:48:30 +0000 |
commit | 22a31bdc6e494c4ec4dd908a6deca6832f6e6ff6 (patch) | |
tree | 71019082a5835ccc7a2f026d2a4092c1c06dc96a /sys/kern/kern_sig.c | |
parent | 5f8b30cbbbfceb9999d60f43cafb99bb1df6734d (diff) | |
download | FreeBSD-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.c | 17 |
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); } |