summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/mvme68k/mvme68k/trap.c11
-rw-r--r--sys/arch/sparc/sparc/trap.c5
2 files changed, 9 insertions, 7 deletions
diff --git a/sys/arch/mvme68k/mvme68k/trap.c b/sys/arch/mvme68k/mvme68k/trap.c
index 07ba8798f4d..fa1dfbc9d99 100644
--- a/sys/arch/mvme68k/mvme68k/trap.c
+++ b/sys/arch/mvme68k/mvme68k/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.12 1997/02/04 12:29:20 deraadt Exp $ */
+/* $OpenBSD: trap.c,v 1.13 1997/02/04 17:23:20 deraadt Exp $ */
/*
* Copyright (c) 1995 Theo de Raadt
@@ -549,7 +549,7 @@ copyfault:
register struct vmspace *vm = NULL;
register vm_map_t map;
int rv;
- vm_prot_t ftype;
+ vm_prot_t ftype, vftype;
extern vm_map_t kernel_map;
/* vmspace only significant if T_USER */
@@ -574,9 +574,10 @@ copyfault:
map = kernel_map;
else
map = &vm->vm_map;
- if (WRFAULT(code))
+ if (WRFAULT(code)) {
+ vftype = VM_PROT_WRITE;
ftype = VM_PROT_READ | VM_PROT_WRITE;
- else
+ } else
ftype = VM_PROT_READ;
va = trunc_page((vm_offset_t)v);
@@ -640,7 +641,7 @@ copyfault:
goto dopanic;
}
frame.f_pad = code & 0xffff;
- ucode = ftype;
+ ucode = vftype;
typ = SEGV_MAPERR;
i = SIGSEGV;
break;
diff --git a/sys/arch/sparc/sparc/trap.c b/sys/arch/sparc/sparc/trap.c
index 65569121f50..d3ebb6efb61 100644
--- a/sys/arch/sparc/sparc/trap.c
+++ b/sys/arch/sparc/sparc/trap.c
@@ -776,7 +776,7 @@ mem_access_fault4m(type, sfsr, sfva, afsr, afva, tf)
register struct vmspace *vm;
register vm_offset_t va;
register int rv;
- vm_prot_t ftype;
+ vm_prot_t ftype, vftype;
int onfault;
u_quad_t sticks;
#if DEBUG
@@ -928,6 +928,7 @@ static int lastdouble;
/* Now munch on protections... */
ftype = sfsr & SFSR_AT_STORE ? VM_PROT_READ|VM_PROT_WRITE:VM_PROT_READ;
+ vftype = sfsr & SFSR_AT_STORE ? VM_PROT_WRITE:VM_PROT_READ;
if (psr & PSR_PS) {
extern char Lfsbail[];
if (sfsr & SFSR_AT_TEXT || type == T_TEXTFAULT) {
@@ -1016,7 +1017,7 @@ kfault:
tf->tf_npc = onfault + 4;
return;
}
- trapsignal(p, SIGSEGV, ftype, SEGV_MAPERR, (caddr_t)sfva);
+ trapsignal(p, SIGSEGV, vftype, SEGV_MAPERR, (caddr_t)sfva);
}
out:
if ((psr & PSR_PS) == 0) {