diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/macppc/macppc/genassym.cf | 7 | ||||
-rw-r--r-- | sys/arch/macppc/macppc/locore.S | 42 | ||||
-rw-r--r-- | sys/arch/powerpc/include/frame.h | 7 |
3 files changed, 51 insertions, 5 deletions
diff --git a/sys/arch/macppc/macppc/genassym.cf b/sys/arch/macppc/macppc/genassym.cf index ff0301788d1..3ad86d58929 100644 --- a/sys/arch/macppc/macppc/genassym.cf +++ b/sys/arch/macppc/macppc/genassym.cf @@ -1,4 +1,4 @@ -# $OpenBSD: genassym.cf,v 1.11 2004/06/24 22:35:56 drahn Exp $ +# $OpenBSD: genassym.cf,v 1.12 2005/08/02 21:02:48 drahn Exp $ # # Copyright (c) 1982, 1990 The Regents of the University of California. # All rights reserved. @@ -73,4 +73,9 @@ member p_back member p_addr member p_stat +struct sigframe +member sf_sc + +struct fpsig + export SONPROC diff --git a/sys/arch/macppc/macppc/locore.S b/sys/arch/macppc/macppc/locore.S index 7e5dda6ce8a..1a3fecd1694 100644 --- a/sys/arch/macppc/macppc/locore.S +++ b/sys/arch/macppc/macppc/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.20 2004/12/24 22:50:30 miod Exp $ */ +/* $OpenBSD: locore.S,v 1.21 2005/08/02 21:02:48 drahn Exp $ */ /* $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $ */ /* @@ -1145,9 +1145,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 diff --git a/sys/arch/powerpc/include/frame.h b/sys/arch/powerpc/include/frame.h index d7628de7cbd..674f7c2e9fa 100644 --- a/sys/arch/powerpc/include/frame.h +++ b/sys/arch/powerpc/include/frame.h @@ -1,4 +1,4 @@ -/* $OpenBSD: frame.h,v 1.5 2001/09/01 15:49:05 drahn Exp $ */ +/* $OpenBSD: frame.h,v 1.6 2005/08/02 21:02:49 drahn Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -73,4 +73,9 @@ struct sigframe { struct sigcontext sf_sc; siginfo_t sf_si; }; + +struct fpsig { + double f[14]; /* f0 - f13 are volatile */ + double fpscr; +}; #endif /* _POWERPC_FRAME_H_ */ |