diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2008-02-20 21:34:20 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2008-02-20 21:34:20 +0000 |
commit | 9949c7c0e74a6c0db87ab4dfb76eb31bbb1f9d71 (patch) | |
tree | 4af95144a895c18e228cd5aa3b119907ea45370f /sys/arch/mips64 | |
parent | a70750f826f74eebcef979bf18c6c39a9df3d5ec (diff) |
Oops, correctly recover from kcopy() faults, since the stack frame is
different now.
Diffstat (limited to 'sys/arch/mips64')
-rw-r--r-- | sys/arch/mips64/mips64/lcore_access.S | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/arch/mips64/mips64/lcore_access.S b/sys/arch/mips64/mips64/lcore_access.S index 0d9d17f8d91..9da36ec7b38 100644 --- a/sys/arch/mips64/mips64/lcore_access.S +++ b/sys/arch/mips64/mips64/lcore_access.S @@ -1,4 +1,4 @@ -/* $OpenBSD: lcore_access.S,v 1.12 2008/02/20 19:13:38 miod Exp $ */ +/* $OpenBSD: lcore_access.S,v 1.13 2008/02/20 21:34:19 miod Exp $ */ /* * Copyright (c) 2001-2003 Opsycon AB (www.opsycon.se / www.opsycon.com) @@ -58,7 +58,7 @@ onfault_table: PTR_VAL 0 # invalid index number PTR_VAL _copyerr - PTR_VAL _copyerr + PTR_VAL _kcopyerr #if defined(DDB) || defined(DEBUG) PTR_VAL kt_ddberr #else @@ -321,3 +321,12 @@ NON_LEAF(kcopy, FRAMESZ(CF_SZ + REGSZ), ra) j ra move v0, zero END(kcopy) + +_kcopyerr: + PTR_L v0, CF_ARGSZ(sp) + PTR_L t3, curprocpaddr + PTR_L ra, CF_RA_OFFS + REGSZ(sp) + sw v0, PCB_ONFAULT(t3) + PTR_ADDU sp, sp, FRAMESZ(CF_SZ + REGSZ) + j ra + li v0, EFAULT # return error |