summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2012-08-29 18:49:57 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2012-08-29 18:49:57 +0000
commit1ab312cb7832a9735ce19c1023c6ca6f5a067ae1 (patch)
treebcc1f003f84373c712d1e16df9d540fe001ec3b1
parent01fdd79f235316a79271d1955bc699deca2dcc5d (diff)
Handle T_IPROT traps from userland by call vm_fault() instead of doing an
unconditional SIGSEGV. Fixes random SIGSEGVs during single-stepping. ok miod@
-rw-r--r--sys/arch/hppa/hppa/trap.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/arch/hppa/hppa/trap.c b/sys/arch/hppa/hppa/trap.c
index 79054297e80..319c5b2085a 100644
--- a/sys/arch/hppa/hppa/trap.c
+++ b/sys/arch/hppa/hppa/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.124 2012/08/07 11:17:34 kettenis Exp $ */
+/* $OpenBSD: trap.c,v 1.125 2012/08/29 18:49:56 kettenis Exp $ */
/*
* Copyright (c) 1998-2004 Michael Shalayeff
@@ -411,9 +411,7 @@ trap(int type, struct trapframe *frame)
else
goto datacc;
}
- /* FALLTHROUGH */
- case T_IPROT | T_USER:
sv.sival_int = va;
KERNEL_LOCK();
trapsignal(p, SIGSEGV, vftype, SEGV_ACCERR, sv);
@@ -468,6 +466,7 @@ trap(int type, struct trapframe *frame)
space, va, opcode);
break;
+ case T_IPROT | T_USER:
case T_TLB_DIRTY:
case T_TLB_DIRTY | T_USER:
case T_DATACC: