summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/machdep.c3
-rw-r--r--sys/amd64/amd64/trap.c5
-rw-r--r--sys/amd64/include/frame.h3
-rw-r--r--sys/amd64/include/reg.h4
-rw-r--r--sys/i386/i386/machdep.c3
-rw-r--r--sys/i386/i386/trap.c5
-rw-r--r--sys/i386/include/frame.h3
-rw-r--r--sys/i386/include/reg.h4
-rw-r--r--sys/kern/subr_trap.c5
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;
}
OpenPOWER on IntegriCloud