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);

Attachment: pgpOiMg9tShWD.pgp
Description: PGP signature

Reply via email to