diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2012-08-29 18:49:57 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2012-08-29 18:49:57 +0000 |
commit | 1ab312cb7832a9735ce19c1023c6ca6f5a067ae1 (patch) | |
tree | bcc1f003f84373c712d1e16df9d540fe001ec3b1 | |
parent | 01fdd79f235316a79271d1955bc699deca2dcc5d (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.c | 5 |
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: |