diff options
| author | Dmitry Chagin <dchagin@FreeBSD.org> | 2022-05-30 16:53:12 +0000 |
|---|---|---|
| committer | Dmitry Chagin <dchagin@FreeBSD.org> | 2022-05-30 16:53:12 +0000 |
| commit | 109fd18ad96957c25cfaa78da2f825c729e33fef (patch) | |
| tree | 35ccbc5d533de143ffe68b03d480841fa2e35f95 /sys/arm64/linux/linux_sysvec.c | |
| parent | c30a767c6fd6d3f19e897fb800513e75175249b9 (diff) | |
Diffstat (limited to 'sys/arm64/linux/linux_sysvec.c')
| -rw-r--r-- | sys/arm64/linux/linux_sysvec.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/arm64/linux/linux_sysvec.c b/sys/arm64/linux/linux_sysvec.c index 72465285dfed..732eddf0c308 100644 --- a/sys/arm64/linux/linux_sysvec.c +++ b/sys/arm64/linux/linux_sysvec.c @@ -430,7 +430,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) ucontext_t uc; uint8_t *scr; struct sigacts *psp; - int onstack, sig; + int onstack, sig, issiginfo; td = curthread; p = td->td_proc; @@ -442,6 +442,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) tf = td->td_frame; onstack = sigonstack(tf->tf_sp); + issiginfo = SIGISMEMBER(psp->ps_siginfo, sig); CTR4(KTR_SIG, "sendsig: td=%p (%s) catcher=%p sig=%d", td, p->p_comm, catcher, sig); @@ -528,8 +529,13 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) free(frame, M_LINUX); tf->tf_x[0]= sig; - tf->tf_x[1] = (register_t)&fp->sf.sf_si; - tf->tf_x[2] = (register_t)&fp->sf.sf_uc; + if (issiginfo) { + tf->tf_x[1] = (register_t)&fp->sf.sf_si; + tf->tf_x[2] = (register_t)&fp->sf.sf_uc; + } else { + tf->tf_x[1] = 0; + tf->tf_x[2] = 0; + } tf->tf_x[8] = (register_t)catcher; tf->tf_sp = (register_t)fp; tf->tf_elr = (register_t)linux_vdso_sigcode; |
