On Thu, Sep 02, 2010 at 05:35:39PM +0000, David Xu wrote: > Kostik Belousov wrote: > > >>the tf_err may not be equal to ksi_addr! This may need to be fixed. > >> > >The change was introduced by > >r151316 | davidxu | 2005-10-14 > > /* Old FreeBSD-style arguments. */ > >- sf.sf_siginfo = code; > >- sf.sf_addr = regs->tf_err; > >+ sf.sf_siginfo = ksi->ksi_code; > >+ sf.sf_addr = (register_t)ksi->ksi_addr; > > sf.sf_ahu.sf_handler = catcher; > > > :( The rollback looks straightforward. I explicitely decided to not change any architecture that is not i386.
diff --git a/sys/amd64/ia32/ia32_signal.c b/sys/amd64/ia32/ia32_signal.c index d85a3bb..5ce6993 100644 --- a/sys/amd64/ia32/ia32_signal.c +++ b/sys/amd64/ia32/ia32_signal.c @@ -374,7 +374,7 @@ freebsd4_ia32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) } else { /* Old FreeBSD-style arguments. */ sf.sf_siginfo = siginfo.si_code; - sf.sf_addr = (u_int32_t)siginfo.si_addr; + sf.sf_addr = regs->tf_err; sf.sf_ah = (u_int32_t)(uintptr_t)catcher; } mtx_unlock(&psp->ps_mtx); @@ -495,7 +495,7 @@ ia32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) } else { /* Old FreeBSD-style arguments. */ sf.sf_siginfo = siginfo.si_code; - sf.sf_addr = (u_int32_t)siginfo.si_addr; + sf.sf_addr = regs->tf_err; sf.sf_ah = (u_int32_t)(uintptr_t)catcher; } mtx_unlock(&psp->ps_mtx); diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index ef229ca..6a5e4e6 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -390,7 +390,7 @@ osendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) } else { /* Old FreeBSD-style arguments. */ sf.sf_arg2 = ksi->ksi_code; - sf.sf_addr = (register_t)ksi->ksi_addr; + sf.sf_addr = regs->tf_err; sf.sf_ahu.sf_handler = catcher; } mtx_unlock(&psp->ps_mtx); @@ -531,7 +531,7 @@ freebsd4_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) } else { /* Old FreeBSD-style arguments. */ sf.sf_siginfo = ksi->ksi_code; - sf.sf_addr = (register_t)ksi->ksi_addr; + sf.sf_addr = regs->tf_err; sf.sf_ahu.sf_handler = catcher; } mtx_unlock(&psp->ps_mtx); @@ -684,7 +684,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) } else { /* Old FreeBSD-style arguments. */ sf.sf_siginfo = ksi->ksi_code; - sf.sf_addr = (register_t)ksi->ksi_addr; + sf.sf_addr = regs->tf_err; sf.sf_ahu.sf_handler = catcher; } mtx_unlock(&psp->ps_mtx);
pgpOiMg9tShWD.pgp
Description: PGP signature