diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2005-08-02 21:27:59 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2005-08-02 21:27:59 +0000 |
commit | 2b1625a3d548b5b2c7dde3068e2bc8a89bc383c0 (patch) | |
tree | bff6b88e79a9210421c64ebdcf7ef2d856f05c18 /sys/arch | |
parent | 4644da424bed48fc7cc36ce5fb79fe7eb2ca8b6e (diff) |
Save floating point context on signals, same diff as macppc
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/mvmeppc/mvmeppc/genassym.cf | 7 | ||||
-rw-r--r-- | sys/arch/mvmeppc/mvmeppc/locore.S | 42 |
2 files changed, 45 insertions, 4 deletions
diff --git a/sys/arch/mvmeppc/mvmeppc/genassym.cf b/sys/arch/mvmeppc/mvmeppc/genassym.cf index ed2353e86b4..aaf0c2c59fe 100644 --- a/sys/arch/mvmeppc/mvmeppc/genassym.cf +++ b/sys/arch/mvmeppc/mvmeppc/genassym.cf @@ -1,4 +1,4 @@ -# $OpenBSD: genassym.cf,v 1.8 2004/11/16 17:08:09 miod Exp $ +# $OpenBSD: genassym.cf,v 1.9 2005/08/02 21:27:58 drahn Exp $ # # Copyright (c) 1982, 1990 The Regents of the University of California. # All rights reserved. @@ -72,4 +72,9 @@ member p_back member p_addr member p_stat +struct sigframe +member sf_sc + +struct fpsig + export SONPROC diff --git a/sys/arch/mvmeppc/mvmeppc/locore.S b/sys/arch/mvmeppc/mvmeppc/locore.S index 782b1c3f9af..22e43fbeed5 100644 --- a/sys/arch/mvmeppc/mvmeppc/locore.S +++ b/sys/arch/mvmeppc/mvmeppc/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.10 2004/12/24 22:50:30 miod Exp $ */ +/* $OpenBSD: locore.S,v 1.11 2005/08/02 21:27:58 drahn Exp $ */ /* $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $ */ /* @@ -1125,9 +1125,45 @@ _C_LABEL(setfault): .type _C_LABEL(sigcode),@function .type _C_LABEL(esigcode),@function _C_LABEL(sigcode): - addi %r1,%r1,-16 /* reserved space for callee */ + addi %r1,%r1,-((16+FPSIG_SIZEOF+15)& ~0xf) /* reserved space for callee */ + addi %r6,%r1,8 + stfd %f0,0(%r6) + stfd %f1,8(%r6) + stfd %f2,16(%r6) + stfd %f3,24(%r6) + stfd %f4,32(%r6) + stfd %f5,40(%r6) + stfd %f6,48(%r6) + stfd %f7,56(%r6) + stfd %f8,64(%r6) + stfd %f9,72(%r6) + stfd %f10,80(%r6) + stfd %f11,88(%r6) + stfd %f12,96(%r6) + stfd %f13,104(%r6) + mffs %f0 + stfd %f0,112(%r6) + lfd %f0,0(%r6) /* restore the clobbered register */ + blrl - addi %r3,%r1,16+8 /* compute &sf_sc */ + addi %r6,%r1,8 + lfd %f0,112(%r6) + mtfsf 0xff,%f0 + lfd %f0,0(%r6) + lfd %f1,8(%r6) + lfd %f2,16(%r6) + lfd %f3,24(%r6) + lfd %f4,32(%r6) + lfd %f5,40(%r6) + lfd %f6,48(%r6) + lfd %f7,56(%r6) + lfd %f8,64(%r6) + lfd %f9,72(%r6) + lfd %f10,80(%r6) + lfd %f11,88(%r6) + lfd %f12,96(%r6) + lfd %f13,104(%r6) + addi %r3,%r1,((16+FPSIG_SIZEOF+15)&~0xf)+SF_SC /* compute &sf_sc */ li %r0,SYS_sigreturn sc /* sigreturn(scp) */ li %r0,SYS_exit |