summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2003-12-09 09:52:14 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2003-12-09 09:52:14 +0000
commitb291daba6fc1b6ac32dcb37aa92b7cc15bcfdf6b (patch)
tree38b906373a018da854ce32707d7f540212add6a7
parent8c307294e6a86b800c099838454834bd6b2ed29f (diff)
Notes
-rw-r--r--sys/ia64/ia64/trap.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c
index 96df12533d7e..e8622aac72f2 100644
--- a/sys/ia64/ia64/trap.c
+++ b/sys/ia64/ia64/trap.c
@@ -648,8 +648,17 @@ trap(int vector, struct trapframe *framep)
if (sig == 0)
goto out;
ucode = framep->tf_special.ifa; /* VA */
- } else
+ } else {
+ /* Check for copyin/copyout fault. */
+ if (td != NULL && td->td_pcb->pcb_onfault != 0) {
+ framep->tf_special.iip =
+ td->td_pcb->pcb_onfault;
+ framep->tf_special.psr &= ~IA64_PSR_RI;
+ td->td_pcb->pcb_onfault = 0;
+ goto out;
+ }
trap_panic(vector, framep);
+ }
break;
case IA64_VEC_FLOATING_POINT_FAULT: