diff options
-rw-r--r-- | sys/amd64/amd64/machdep.c | 3 | ||||
-rw-r--r-- | sys/amd64/amd64/trap.c | 5 | ||||
-rw-r--r-- | sys/amd64/include/frame.h | 3 | ||||
-rw-r--r-- | sys/amd64/include/reg.h | 4 | ||||
-rw-r--r-- | sys/i386/i386/machdep.c | 3 | ||||
-rw-r--r-- | sys/i386/i386/trap.c | 5 | ||||
-rw-r--r-- | sys/i386/include/frame.h | 3 | ||||
-rw-r--r-- | sys/i386/include/reg.h | 4 | ||||
-rw-r--r-- | sys/kern/subr_trap.c | 5 |
9 files changed, 26 insertions, 9 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index e926d0e..d89bf87 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.18 1993/11/17 23:24:56 wollman Exp $ + * $Id: machdep.c,v 1.19 1993/11/25 01:30:55 wollman Exp $ */ #include "npx.h" @@ -460,6 +460,7 @@ sendsig(catcher, sig, mask, code) fp->sf_signum = sig; fp->sf_code = code; fp->sf_scp = &fp->sf_sc; + fp->sf_addr = (char *) regs[tERR]; fp->sf_handler = catcher; /* save scratch registers */ diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index d413307..97a7418 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.8 1993/11/25 01:31:01 wollman Exp $ + * $Id: trap.c,v 1.9 1993/11/28 09:28:54 davidg Exp $ */ /* @@ -370,6 +370,9 @@ nogo: goto we_re_toast; } i = (rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV; + ucode = type &~ T_USER; + frame.tf_err = eva; + /* kludge to pass faulting virtual address to sendsig */ break; } diff --git a/sys/amd64/include/frame.h b/sys/amd64/include/frame.h index a591f53..a7455b6 100644 --- a/sys/amd64/include/frame.h +++ b/sys/amd64/include/frame.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)frame.h 5.2 (Berkeley) 1/18/91 - * $Id: frame.h,v 1.3 1993/11/07 17:42:56 wollman Exp $ + * $Id: frame.h,v 1.4 1993/11/17 23:25:03 wollman Exp $ */ #ifndef _MACHINE_FRAME_H_ @@ -105,6 +105,7 @@ struct sigframe { int sf_signum; int sf_code; struct sigcontext *sf_scp; + char *sf_addr; sig_t sf_handler; int sf_eax; int sf_edx; diff --git a/sys/amd64/include/reg.h b/sys/amd64/include/reg.h index 55f1556..969df87 100644 --- a/sys/amd64/include/reg.h +++ b/sys/amd64/include/reg.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)reg.h 5.5 (Berkeley) 1/18/91 - * $Id: reg.h,v 1.3 1993/11/07 17:43:07 wollman Exp $ + * $Id: reg.h,v 1.4 1993/11/16 09:54:57 davidg Exp $ */ #ifndef _MACHINE_REG_H_ @@ -60,6 +60,8 @@ #define tECX (8) #define tEAX (9) +#define tERR (11) + #define tEIP (12) #define tCS (13) #define tEFLAGS (14) diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index e926d0e..d89bf87 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.18 1993/11/17 23:24:56 wollman Exp $ + * $Id: machdep.c,v 1.19 1993/11/25 01:30:55 wollman Exp $ */ #include "npx.h" @@ -460,6 +460,7 @@ sendsig(catcher, sig, mask, code) fp->sf_signum = sig; fp->sf_code = code; fp->sf_scp = &fp->sf_sc; + fp->sf_addr = (char *) regs[tERR]; fp->sf_handler = catcher; /* save scratch registers */ diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c index d413307..97a7418 100644 --- a/sys/i386/i386/trap.c +++ b/sys/i386/i386/trap.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.8 1993/11/25 01:31:01 wollman Exp $ + * $Id: trap.c,v 1.9 1993/11/28 09:28:54 davidg Exp $ */ /* @@ -370,6 +370,9 @@ nogo: goto we_re_toast; } i = (rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV; + ucode = type &~ T_USER; + frame.tf_err = eva; + /* kludge to pass faulting virtual address to sendsig */ break; } diff --git a/sys/i386/include/frame.h b/sys/i386/include/frame.h index a591f53..a7455b6 100644 --- a/sys/i386/include/frame.h +++ b/sys/i386/include/frame.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)frame.h 5.2 (Berkeley) 1/18/91 - * $Id: frame.h,v 1.3 1993/11/07 17:42:56 wollman Exp $ + * $Id: frame.h,v 1.4 1993/11/17 23:25:03 wollman Exp $ */ #ifndef _MACHINE_FRAME_H_ @@ -105,6 +105,7 @@ struct sigframe { int sf_signum; int sf_code; struct sigcontext *sf_scp; + char *sf_addr; sig_t sf_handler; int sf_eax; int sf_edx; diff --git a/sys/i386/include/reg.h b/sys/i386/include/reg.h index 55f1556..969df87 100644 --- a/sys/i386/include/reg.h +++ b/sys/i386/include/reg.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)reg.h 5.5 (Berkeley) 1/18/91 - * $Id: reg.h,v 1.3 1993/11/07 17:43:07 wollman Exp $ + * $Id: reg.h,v 1.4 1993/11/16 09:54:57 davidg Exp $ */ #ifndef _MACHINE_REG_H_ @@ -60,6 +60,8 @@ #define tECX (8) #define tEAX (9) +#define tERR (11) + #define tEIP (12) #define tCS (13) #define tEFLAGS (14) diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index d413307..97a7418 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.8 1993/11/25 01:31:01 wollman Exp $ + * $Id: trap.c,v 1.9 1993/11/28 09:28:54 davidg Exp $ */ /* @@ -370,6 +370,9 @@ nogo: goto we_re_toast; } i = (rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV; + ucode = type &~ T_USER; + frame.tf_err = eva; + /* kludge to pass faulting virtual address to sendsig */ break; } |